47 uint8_t
buf[0x80][0x800];
77 const uint8_t *buf,
const uint8_t *end)
79 const uint8_t *p = buf;
82 while (end - p >= 2) {
83 unsigned int item_len = p[0], config_item = p[1];
85 if (item_len < 2 || end - p < item_len || config_item > 4)
88 switch (config_item) {
90 return p - buf + item_len;
157 const uint8_t *buf,
const uint8_t *end)
159 const uint8_t *p = buf;
172 if (end - p <
len + (
type == 0x7F) ||
id >= 0x80)
178 to_copy =
FFMIN(
len + (p - &buf[1]), 0x800 - qdm->
len[
id]);
179 memcpy(&qdm->
buf[
id][qdm->
len[
id]], buf + 1, to_copy);
180 qdm->
len[
id] += to_copy;
182 return p +
len - buf;
193 uint8_t *p, *csum_pos =
NULL;
198 for (n = 0; n < 0x80; n++)
203 int min_size = 2 + (qdm->
len[n] > 0xff) + 2*include_csum;
210 memset(
pkt->data, 0,
pkt->size);
215 if (qdm->
len[n] > 0xff) {
230 memcpy(p, qdm->
buf[n], to_copy);
235 unsigned int total = 0;
240 AV_WB16(csum_pos, (uint16_t) total);
250 const uint8_t *buf,
int len, uint16_t seq,
254 const uint8_t *end = buf +
len, *p = buf;
264 "Out of sequence config - dropping queue\n");
266 memset(qdm->
len, 0,
sizeof(qdm->
len));
284 while (end - p >= 4) {
294 for (n = 0; n < 0x80; n++)
302 if (--qdm->
cache == 0)
308 return (qdm->
cache > 0) ? 1 : 0;
simple assert() macros that are a bit more flexible than ISO C assert().
#define av_assert0(cond)
assert() equivalent, that is always enabled.
#define flags(name, subs,...)
static int parse_packet(AVFormatContext *s, AVPacket *pkt, int stream_index, int flush)
Parse a packet, add all split parts to parse_queue.
int av_new_packet(AVPacket *pkt, int size)
Allocate the payload of a packet and initialize its fields with default values.
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
#define AV_LOG_WARNING
Something somehow does not look correct.
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...
static int qdm2_parse_subpacket(PayloadContext *qdm, AVStream *st, const uint8_t *buf, const uint8_t *end)
Parse a single subpacket.
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...
static int qdm2_restore_block(PayloadContext *qdm, AVStream *st, AVPacket *pkt)
Add a superblock header around a set of subpackets.
uint8_t * extradata
Extra binary data needed for initializing the decoder, codec-dependent.
enum AVCodecID codec_id
Specific type of the encoded data (the codec used).
This structure stores compressed data.
AVCodecParameters * codecpar
Codec parameters associated with this stream.
int index
stream index in AVFormatContext
RTP/AV1 specific private data.
unsigned int n_pkts
number of RTP packets received since last packet output / config
int block_size
from extradata, used as pkt length
uint32_t timestamp
last received timestamp for frame
uint8_t * buf
the temporary storage buffer
int subpkts_per_block
max. nr. of subpackets to add per output buffer
int block_type
values read from the config header, used as packet headers
unsigned int cache
number of data packets that we have cached right now