80 while (end - p >= 2) {
81 unsigned int item_len = p[0], config_item = p[1];
83 if (item_len < 2 || end - p < item_len || config_item > 4)
86 switch (config_item) {
88 return p - buf + item_len;
156 unsigned int id,
len, type, to_copy;
168 if (end - p < len + (type == 0x7F) ||
id >= 0x80)
174 to_copy =
FFMIN(len + (p - &buf[1]), 0x800 - qdm->
len[
id]);
175 memcpy(&qdm->
buf[
id][qdm->
len[
id]], buf + 1, to_copy);
176 qdm->
len[
id] += to_copy;
178 return p + len - buf;
188 int to_copy, n, res, include_csum;
192 assert(qdm->
cache > 0);
193 for (n = 0; n < 0x80; n++)
205 if (qdm->
len[n] > 0xff) {
220 memcpy(p, qdm->
buf[n], to_copy);
225 unsigned int total = 0;
230 AV_WB16(csum_pos, (uint16_t) total);
254 "Out of sequence config - dropping queue\n");
256 memset(qdm->
len, 0,
sizeof(qdm->
len));
274 while (end - p >= 4) {
284 for (n = 0; n < 0x80; n++)
292 if (--qdm->
cache == 0)
298 return (qdm->
cache > 0) ? 1 : 0;
int block_size
from extradata, used as pkt length
unsigned int n_pkts
number of RTP packets received since last packet output / config
RTP/JPEG specific private data.
int index
stream index in AVFormatContext
void av_freep(void *arg)
Free a memory block which has been allocated with av_malloc(z)() or av_realloc() and set the pointer ...
static PayloadContext * qdm2_extradata_new(void)
uint8_t * extradata
some codecs need / can use extradata like Huffman tables.
static int qdm2_parse_subpacket(PayloadContext *qdm, AVStream *st, const uint8_t *buf, const uint8_t *end)
Parse a single subpacket.
int subpkts_per_block
max. nr. of subpackets to add per output buffer
int av_new_packet(AVPacket *pkt, int size)
Allocate the payload of a packet and initialize its fields with default values.
static int qdm2_parse_packet(AVFormatContext *s, PayloadContext *qdm, AVStream *st, AVPacket *pkt, uint32_t *timestamp, const uint8_t *buf, int len, uint16_t seq, int flags)
return 0 on packet, no more left, 1 on packet, -1 on partial packet...
uint32_t timestamp
current frame timestamp
void av_free(void *ptr)
Free a memory block which has been allocated with av_malloc(z)() or av_realloc(). ...
static int qdm2_parse_config(PayloadContext *qdm, AVStream *st, const uint8_t *buf, const uint8_t *end)
Parse configuration (basically the codec-specific extradata) from an RTP config subpacket (starts wit...
int block_type
values read from the config header, used as packet headers
void av_log(void *avcl, int level, const char *fmt,...)
AVCodecContext * codec
Codec context associated with this stream.
unsigned int cache
number of data packets that we have cached right now
static int qdm2_restore_block(PayloadContext *qdm, AVStream *st, AVPacket *pkt)
Add a superblock header around a set of subpackets.
#define FF_INPUT_BUFFER_PADDING_SIZE
RTPDynamicProtocolHandler ff_qdm2_dynamic_handler
static void qdm2_extradata_free(PayloadContext *qdm)
#define AVERROR_INVALIDDATA
This structure stores compressed data.
void * av_mallocz(size_t size)
Allocate a block of size bytes with alignment suitable for all memory accesses (including vectors if ...