FFmpeg
av1dec.c
Go to the documentation of this file.
1 /*
2  * AV1 Annex B demuxer
3  * Copyright (c) 2019 James Almer <jamrial@gmail.com>
4  *
5  * This file is part of FFmpeg.
6  *
7  * FFmpeg is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * FFmpeg is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with FFmpeg; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20  */
21 
22 #include "config_components.h"
23 
24 #include "libavutil/common.h"
25 #include "libavutil/opt.h"
26 #include "libavcodec/av1_parse.h"
27 #include "libavcodec/bsf.h"
28 #include "avformat.h"
29 #include "avio_internal.h"
30 #include "internal.h"
31 
32 typedef struct AV1DemuxContext {
33  const AVClass *class;
37  uint32_t frame_unit_size;
39 
40 //return < 0 if we need more data
41 static int get_score(int type, int *seq)
42 {
43  switch (type) {
45  *seq = 1;
46  return -1;
47  case AV1_OBU_FRAME:
49  return *seq ? AVPROBE_SCORE_EXTENSION + 1 : 0;
50  case AV1_OBU_METADATA:
51  case AV1_OBU_PADDING:
52  return -1;
53  default:
54  break;
55  }
56  return 0;
57 }
58 
60 {
61  AV1DemuxContext *const c = s->priv_data;
62  const AVBitStreamFilter *filter = av_bsf_get_by_name("av1_frame_merge");
63  AVStream *st;
64  FFStream *sti;
65  int ret;
66 
67  if (!filter) {
68  av_log(s, AV_LOG_ERROR, "av1_frame_merge bitstream filter "
69  "not found. This is a bug, please report it.\n");
70  return AVERROR_BUG;
71  }
72 
73  st = avformat_new_stream(s, NULL);
74  if (!st)
75  return AVERROR(ENOMEM);
76  sti = ffstream(st);
77 
81 
82  st->avg_frame_rate = c->framerate;
83  // taken from rawvideo demuxers
84  avpriv_set_pts_info(st, 64, 1, 1200000);
85 
86  ret = av_bsf_alloc(filter, &c->bsf);
87  if (ret < 0)
88  return ret;
89 
90  ret = avcodec_parameters_copy(c->bsf->par_in, st->codecpar);
91  if (ret < 0)
92  return ret;
93 
94  ret = av_bsf_init(c->bsf);
95  if (ret < 0)
96  return ret;
97 
98  return 0;
99 }
100 
102 {
103  AV1DemuxContext *const c = s->priv_data;
104 
105  av_bsf_free(&c->bsf);
106  return 0;
107 }
108 
109 #define DEC AV_OPT_FLAG_DECODING_PARAM
110 #define OFFSET(x) offsetof(AV1DemuxContext, x)
111 static const AVOption av1_options[] = {
112  { "framerate", "", OFFSET(framerate), AV_OPT_TYPE_VIDEO_RATE, {.str = "25"}, 0, INT_MAX, DEC},
113  { NULL },
114 };
115 #undef OFFSET
116 
117 static const AVClass av1_demuxer_class = {
118  .class_name = "AV1 Annex B/low overhead OBU demuxer",
119  .item_name = av_default_item_name,
120  .option = av1_options,
121  .version = LIBAVUTIL_VERSION_INT,
122 };
123 
124 #if CONFIG_AV1_DEMUXER
125 
126 static int leb(AVIOContext *pb, uint32_t *len, int eof) {
127  int more, i = 0;
128  *len = 0;
129  do {
130  unsigned bits;
131  int byte = avio_r8(pb);
132  if (pb->error)
133  return pb->error;
134  if (pb->eof_reached)
135  return (eof && !i) ? AVERROR_EOF : AVERROR_INVALIDDATA;
136  more = byte & 0x80;
137  bits = byte & 0x7f;
138  if (i <= 3 || (i == 4 && bits < (1 << 4)))
139  *len |= bits << (i * 7);
140  else if (bits)
141  return AVERROR_INVALIDDATA;
142  if (++i == 8 && more)
143  return AVERROR_INVALIDDATA;
144  } while (more);
145  return i;
146 }
147 
148 static int read_obu(const uint8_t *buf, int size, int64_t *obu_size, int *type)
149 {
150  int start_pos, temporal_id, spatial_id;
151  int len;
152 
153  len = parse_obu_header(buf, size, obu_size, &start_pos,
154  type, &temporal_id, &spatial_id);
155  if (len < 0)
156  return len;
157 
158  return 0;
159 }
160 
161 static int annexb_probe(const AVProbeData *p)
162 {
164  AVIOContext *const pb = &ctx.pub;
165  int64_t obu_size;
166  uint32_t temporal_unit_size, frame_unit_size, obu_unit_size;
167  int seq = 0;
168  int ret, type, cnt = 0;
169 
171 
172  ret = leb(pb, &temporal_unit_size, 1);
173  if (ret < 0)
174  return 0;
175  cnt += ret;
176  ret = leb(pb, &frame_unit_size, 0);
177  if (ret < 0 || ((int64_t)frame_unit_size + ret) > temporal_unit_size)
178  return 0;
179  cnt += ret;
180  ret = leb(pb, &obu_unit_size, 0);
181  if (ret < 0 || ((int64_t)obu_unit_size + ret) >= frame_unit_size)
182  return 0;
183  cnt += ret;
184 
185  frame_unit_size -= obu_unit_size + ret;
186 
187  avio_skip(pb, obu_unit_size);
188  if (pb->eof_reached || pb->error)
189  return 0;
190 
191  // Check that the first OBU is a Temporal Delimiter.
192  ret = read_obu(p->buf + cnt, FFMIN(p->buf_size - cnt, obu_unit_size), &obu_size, &type);
193  if (ret < 0 || type != AV1_OBU_TEMPORAL_DELIMITER || obu_size > 0)
194  return 0;
195  cnt += obu_unit_size;
196 
197  do {
198  ret = leb(pb, &obu_unit_size, 0);
199  if (ret < 0 || ((int64_t)obu_unit_size + ret) > frame_unit_size)
200  return 0;
201  cnt += ret;
202 
203  avio_skip(pb, obu_unit_size);
204  if (pb->eof_reached || pb->error)
205  return 0;
206 
207  ret = read_obu(p->buf + cnt, FFMIN(p->buf_size - cnt, obu_unit_size), &obu_size, &type);
208  if (ret < 0)
209  return 0;
210  cnt += obu_unit_size;
211 
212  ret = get_score(type, &seq);
213  if (ret >= 0)
214  return ret;
215 
216  frame_unit_size -= obu_unit_size + ret;
217  } while (frame_unit_size);
218 
219  return 0;
220 }
221 
222 static int annexb_read_packet(AVFormatContext *s, AVPacket *pkt)
223 {
224  AV1DemuxContext *const c = s->priv_data;
225  uint32_t obu_unit_size;
226  int ret, len;
227 
228 retry:
229  if (avio_feof(s->pb)) {
230  if (c->temporal_unit_size || c->frame_unit_size)
231  return AVERROR_INVALIDDATA;
232  goto end;
233  }
234 
235  if (!c->temporal_unit_size) {
236  len = leb(s->pb, &c->temporal_unit_size, 1);
237  if (len == AVERROR_EOF) goto end;
238  else if (len < 0) return len;
239  }
240 
241  if (!c->frame_unit_size) {
242  len = leb(s->pb, &c->frame_unit_size, 0);
243  if (len < 0)
244  return len;
245  if (((int64_t)c->frame_unit_size + len) > c->temporal_unit_size)
246  return AVERROR_INVALIDDATA;
247  c->temporal_unit_size -= len;
248  }
249 
250  len = leb(s->pb, &obu_unit_size, 0);
251  if (len < 0)
252  return len;
253  if (((int64_t)obu_unit_size + len) > c->frame_unit_size)
254  return AVERROR_INVALIDDATA;
255 
256  ret = av_get_packet(s->pb, pkt, obu_unit_size);
257  if (ret < 0)
258  return ret;
259  if (ret != obu_unit_size)
260  return AVERROR_INVALIDDATA;
261 
262  c->temporal_unit_size -= obu_unit_size + len;
263  c->frame_unit_size -= obu_unit_size + len;
264 
265 end:
266  ret = av_bsf_send_packet(c->bsf, pkt);
267  if (ret < 0) {
268  av_log(s, AV_LOG_ERROR, "Failed to send packet to "
269  "av1_frame_merge filter\n");
270  return ret;
271  }
272 
273  ret = av_bsf_receive_packet(c->bsf, pkt);
274  if (ret < 0 && ret != AVERROR(EAGAIN) && ret != AVERROR_EOF)
275  av_log(s, AV_LOG_ERROR, "av1_frame_merge filter failed to "
276  "send output packet\n");
277 
278  if (ret == AVERROR(EAGAIN))
279  goto retry;
280 
281  return ret;
282 }
283 
285  .name = "av1",
286  .long_name = NULL_IF_CONFIG_SMALL("AV1 Annex B"),
287  .priv_data_size = sizeof(AV1DemuxContext),
288  .flags_internal = FF_FMT_INIT_CLEANUP,
291  .read_packet = annexb_read_packet,
293  .extensions = "obu",
295  .priv_class = &av1_demuxer_class,
296 };
297 #endif
298 
299 #if CONFIG_OBU_DEMUXER
300 //For low overhead obu, we can't foresee the obu size before we parsed the header.
301 //So, we can't use parse_obu_header here, since it will check size <= buf_size
302 //see c27c7b49dc for more details
303 static int read_obu_with_size(const uint8_t *buf, int buf_size, int64_t *obu_size, int *type)
304 {
305  GetBitContext gb;
306  int ret, extension_flag, start_pos;
307  int64_t size;
308 
309  ret = init_get_bits8(&gb, buf, FFMIN(buf_size, MAX_OBU_HEADER_SIZE));
310  if (ret < 0)
311  return ret;
312 
313  if (get_bits1(&gb) != 0) // obu_forbidden_bit
314  return AVERROR_INVALIDDATA;
315 
316  *type = get_bits(&gb, 4);
317  extension_flag = get_bits1(&gb);
318  if (!get_bits1(&gb)) // has_size_flag
319  return AVERROR_INVALIDDATA;
320  skip_bits1(&gb); // obu_reserved_1bit
321 
322  if (extension_flag) {
323  get_bits(&gb, 3); // temporal_id
324  get_bits(&gb, 2); // spatial_id
325  skip_bits(&gb, 3); // extension_header_reserved_3bits
326  }
327 
328  *obu_size = leb128(&gb);
329  if (*obu_size > INT_MAX)
330  return AVERROR_INVALIDDATA;
331 
332  if (get_bits_left(&gb) < 0)
333  return AVERROR_INVALIDDATA;
334 
335  start_pos = get_bits_count(&gb) / 8;
336 
337  size = *obu_size + start_pos;
338  if (size > INT_MAX)
339  return AVERROR_INVALIDDATA;
340  return size;
341 }
342 
343 static int obu_probe(const AVProbeData *p)
344 {
345  int64_t obu_size;
346  int seq = 0;
347  int ret, type, cnt;
348 
349  // Check that the first OBU is a Temporal Delimiter.
350  cnt = read_obu_with_size(p->buf, p->buf_size, &obu_size, &type);
351  if (cnt < 0 || type != AV1_OBU_TEMPORAL_DELIMITER || obu_size != 0)
352  return 0;
353 
354  while (1) {
355  ret = read_obu_with_size(p->buf + cnt, p->buf_size - cnt, &obu_size, &type);
356  if (ret < 0 || obu_size <= 0)
357  return 0;
358  cnt += FFMIN(ret, p->buf_size - cnt);
359 
360  ret = get_score(type, &seq);
361  if (ret >= 0)
362  return ret;
363  }
364  return 0;
365 }
366 
367 static int obu_get_packet(AVFormatContext *s, AVPacket *pkt)
368 {
369  AV1DemuxContext *const c = s->priv_data;
371  int64_t obu_size;
372  int size;
373  int ret, len, type;
374 
375  if ((ret = ffio_ensure_seekback(s->pb, MAX_OBU_HEADER_SIZE)) < 0)
376  return ret;
378  if (size < 0)
379  return size;
380 
381  len = read_obu_with_size(header, size, &obu_size, &type);
382  if (len < 0) {
383  av_log(c, AV_LOG_ERROR, "Failed to read obu\n");
384  return len;
385  }
386  avio_seek(s->pb, -size, SEEK_CUR);
387 
388  ret = av_get_packet(s->pb, pkt, len);
389  if (ret != len) {
390  av_log(c, AV_LOG_ERROR, "Failed to get packet for obu\n");
391  return ret < 0 ? ret : AVERROR_INVALIDDATA;
392  }
393  return 0;
394 }
395 
396 static int obu_read_packet(AVFormatContext *s, AVPacket *pkt)
397 {
398  AV1DemuxContext *const c = s->priv_data;
399  int ret;
400 
401  if (s->io_repositioned) {
402  av_bsf_flush(c->bsf);
403  s->io_repositioned = 0;
404  }
405  while (1) {
406  ret = obu_get_packet(s, pkt);
407  /* In case of AVERROR_EOF we need to flush the BSF. Conveniently
408  * obu_get_packet() returns a blank pkt in this case which
409  * can be used to signal that the BSF should be flushed. */
410  if (ret < 0 && ret != AVERROR_EOF)
411  return ret;
412  ret = av_bsf_send_packet(c->bsf, pkt);
413  if (ret < 0) {
414  av_log(s, AV_LOG_ERROR, "Failed to send packet to "
415  "av1_frame_merge filter\n");
416  return ret;
417  }
418  ret = av_bsf_receive_packet(c->bsf, pkt);
419  if (ret < 0 && ret != AVERROR(EAGAIN) && ret != AVERROR_EOF)
420  av_log(s, AV_LOG_ERROR, "av1_frame_merge filter failed to "
421  "send output packet\n");
422  if (ret != AVERROR(EAGAIN))
423  break;
424  }
425 
426  return ret;
427 }
428 
430  .name = "obu",
431  .long_name = NULL_IF_CONFIG_SMALL("AV1 low overhead OBU"),
432  .priv_data_size = sizeof(AV1DemuxContext),
433  .flags_internal = FF_FMT_INIT_CLEANUP,
434  .read_probe = obu_probe,
436  .read_packet = obu_read_packet,
438  .extensions = "obu",
440  .priv_class = &av1_demuxer_class,
441 };
442 #endif
AVFMT_NO_BYTE_SEEK
#define AVFMT_NO_BYTE_SEEK
Format does not allow seeking by bytes.
Definition: avformat.h:488
FF_FMT_INIT_CLEANUP
#define FF_FMT_INIT_CLEANUP
For an AVInputFormat with this flag set read_close() needs to be called by the caller upon read_heade...
Definition: internal.h:46
get_bits_left
static int get_bits_left(GetBitContext *gb)
Definition: get_bits.h:694
AVERROR
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later. That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another. Frame references ownership and permissions
opt.h
AVCodecParameters::codec_type
enum AVMediaType codec_type
General type of the encoded data.
Definition: codec_par.h:51
get_score
static int get_score(int type, int *seq)
Definition: av1dec.c:41
AV1DemuxContext
Definition: av1dec.c:32
avformat_new_stream
AVStream * avformat_new_stream(AVFormatContext *s, const struct AVCodec *c)
Add a new stream to a media file.
AVERROR_EOF
#define AVERROR_EOF
End of file.
Definition: error.h:57
AV_OPT_TYPE_VIDEO_RATE
@ AV_OPT_TYPE_VIDEO_RATE
offset must point to AVRational
Definition: opt.h:238
AVFMT_NOTIMESTAMPS
#define AVFMT_NOTIMESTAMPS
Format does not need / have any timestamps.
Definition: avformat.h:480
get_bits_count
static int get_bits_count(const GetBitContext *s)
Definition: get_bits.h:266
ff_obu_demuxer
const AVInputFormat ff_obu_demuxer
AVOption
AVOption.
Definition: opt.h:251
AVStream::avg_frame_rate
AVRational avg_frame_rate
Average framerate.
Definition: avformat.h:930
AVIOContext::error
int error
contains the error code or 0 if no error happened
Definition: avio.h:249
filter
filter_frame For filters that do not use the this method is called when a frame is pushed to the filter s input It can be called at any time except in a reentrant way If the input frame is enough to produce then the filter should push the output frames on the output link immediately As an exception to the previous rule if the input frame is enough to produce several output frames then the filter needs output only at least one per link The additional frames can be left buffered in the filter
Definition: filter_design.txt:228
ffio_init_read_context
void ffio_init_read_context(FFIOContext *s, const uint8_t *buffer, int buffer_size)
Wrap a buffer in an AVIOContext for reading.
Definition: aviobuf.c:134
AVProbeData::buf_size
int buf_size
Size of buf except extra allocated bytes.
Definition: avformat.h:455
AV1_OBU_TEMPORAL_DELIMITER
@ AV1_OBU_TEMPORAL_DELIMITER
Definition: av1.h:31
av_bsf_free
void av_bsf_free(AVBSFContext **pctx)
Free a bitstream filter context and everything associated with it; write NULL into the supplied point...
Definition: bsf.c:52
FFIOContext
Definition: avio_internal.h:28
AVBSFContext
The bitstream filter state.
Definition: bsf.h:68
skip_bits
static void skip_bits(GetBitContext *s, int n)
Definition: get_bits.h:381
get_bits
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
Definition: get_bits.h:335
av1_parse.h
avpriv_set_pts_info
void avpriv_set_pts_info(AVStream *st, int pts_wrap_bits, unsigned int pts_num, unsigned int pts_den)
Set the time base and wrapping info for a given stream.
Definition: avformat.c:761
bsf.h
ffstream
static av_always_inline FFStream * ffstream(AVStream *st)
Definition: internal.h:420
AV1_OBU_FRAME_HEADER
@ AV1_OBU_FRAME_HEADER
Definition: av1.h:32
GetBitContext
Definition: get_bits.h:108
read_close
static av_cold int read_close(AVFormatContext *ctx)
Definition: libcdio.c:143
AVFMT_GENERIC_INDEX
#define AVFMT_GENERIC_INDEX
Use generic index building code.
Definition: avformat.h:481
type
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf type
Definition: writing_filters.txt:86
annexb_probe
static int annexb_probe(const AVProbeData *p)
Definition: evcdec.c:59
pkt
AVPacket * pkt
Definition: movenc.c:59
AV_LOG_ERROR
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:180
AVInputFormat
Definition: avformat.h:549
init_get_bits8
static int init_get_bits8(GetBitContext *s, const uint8_t *buffer, int byte_size)
Initialize GetBitContext.
Definition: get_bits.h:545
read_packet
static int read_packet(void *opaque, uint8_t *buf, int buf_size)
Definition: avio_read_callback.c:41
parse_obu_header
static int parse_obu_header(const uint8_t *buf, int buf_size, int64_t *obu_size, int *start_pos, int *type, int *temporal_id, int *spatial_id)
Definition: av1_parse.h:104
s
#define s(width, name)
Definition: cbs_vp9.c:198
av_bsf_flush
void av_bsf_flush(AVBSFContext *ctx)
Reset the internal bitstream filter state.
Definition: bsf.c:190
AVInputFormat::name
const char * name
A comma separated list of short names for the format.
Definition: avformat.h:554
AVProbeData::buf
unsigned char * buf
Buffer must have AVPROBE_PADDING_SIZE of extra allocated bytes filled with zero.
Definition: avformat.h:454
av1_read_close
static int av1_read_close(AVFormatContext *s)
Definition: av1dec.c:101
bits
uint8_t bits
Definition: vp3data.h:128
ctx
AVFormatContext * ctx
Definition: movenc.c:48
av_bsf_alloc
int av_bsf_alloc(const AVBitStreamFilter *filter, AVBSFContext **pctx)
Allocate a context for a given bitstream filter.
Definition: bsf.c:104
FFStream::need_parsing
enum AVStreamParseType need_parsing
Definition: internal.h:391
AVFormatContext
Format I/O context.
Definition: avformat.h:1115
internal.h
DEC
#define DEC
Definition: av1dec.c:109
AVStream::codecpar
AVCodecParameters * codecpar
Codec parameters associated with this stream.
Definition: avformat.h:864
framerate
float framerate
Definition: av1_levels.c:29
LIBAVUTIL_VERSION_INT
#define LIBAVUTIL_VERSION_INT
Definition: version.h:85
leb128
#define leb128(name)
Definition: cbs_av1.c:631
av_bsf_init
int av_bsf_init(AVBSFContext *ctx)
Prepare the filter for use, after all the parameters and options have been set.
Definition: bsf.c:149
read_header
static int read_header(FFV1Context *f)
Definition: ffv1dec.c:550
AVClass
Describe the class of an AVClass context structure.
Definition: log.h:66
NULL
#define NULL
Definition: coverity.c:32
AV_CODEC_ID_AV1
@ AV_CODEC_ID_AV1
Definition: codec_id.h:283
av_bsf_receive_packet
int av_bsf_receive_packet(AVBSFContext *ctx, AVPacket *pkt)
Retrieve a filtered packet.
Definition: bsf.c:230
AVRational
Rational number (pair of numerator and denominator).
Definition: rational.h:58
av_default_item_name
const char * av_default_item_name(void *ptr)
Return the context name.
Definition: log.c:237
get_bits1
static unsigned int get_bits1(GetBitContext *s)
Definition: get_bits.h:388
AVProbeData
This structure contains the data a format has to probe a file.
Definition: avformat.h:452
c
Undefined Behavior In the C some operations are like signed integer dereferencing freed accessing outside allocated Undefined Behavior must not occur in a C it is not safe even if the output of undefined operations is unused The unsafety may seem nit picking but Optimizing compilers have in fact optimized code on the assumption that no undefined Behavior occurs Optimizing code based on wrong assumptions can and has in some cases lead to effects beyond the output of computations The signed integer overflow problem in speed critical code Code which is highly optimized and works with signed integers sometimes has the problem that often the output of the computation does not c
Definition: undefined.txt:32
AVPROBE_SCORE_EXTENSION
#define AVPROBE_SCORE_EXTENSION
score for file extension
Definition: avformat.h:462
AV1DemuxContext::bsf
AVBSFContext * bsf
Definition: av1dec.c:34
AV1_OBU_FRAME
@ AV1_OBU_FRAME
Definition: av1.h:35
AVIOContext
Bytestream IO Context.
Definition: avio.h:166
OFFSET
#define OFFSET(x)
Definition: av1dec.c:110
NULL_IF_CONFIG_SMALL
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
Definition: internal.h:106
FFStream
Definition: internal.h:199
av_bsf_send_packet
int av_bsf_send_packet(AVBSFContext *ctx, AVPacket *pkt)
Submit a packet for filtering.
Definition: bsf.c:202
ff_av1_demuxer
const AVInputFormat ff_av1_demuxer
size
int size
Definition: twinvq_data.h:10344
AV1_OBU_SEQUENCE_HEADER
@ AV1_OBU_SEQUENCE_HEADER
Definition: av1.h:30
header
static const uint8_t header[24]
Definition: sdr2.c:67
avio_r8
int avio_r8(AVIOContext *s)
Definition: aviobuf.c:650
ffio_ensure_seekback
int ffio_ensure_seekback(AVIOContext *s, int64_t buf_size)
Ensures that the requested seekback buffer size will be available.
Definition: aviobuf.c:1071
skip_bits1
static void skip_bits1(GetBitContext *s)
Definition: get_bits.h:413
AV1DemuxContext::frame_unit_size
uint32_t frame_unit_size
Definition: av1dec.c:37
AV1_OBU_PADDING
@ AV1_OBU_PADDING
Definition: av1.h:39
i
#define i(width, name, range_min, range_max)
Definition: cbs_h2645.c:255
avio_internal.h
common.h
FFMIN
#define FFMIN(a, b)
Definition: macros.h:49
len
int len
Definition: vorbis_enc_data.h:426
av_get_packet
int av_get_packet(AVIOContext *s, AVPacket *pkt, int size)
Allocate and read the payload of a packet and initialize its fields with default values.
Definition: utils.c:103
ret
ret
Definition: filter_design.txt:187
AVStream
Stream structure.
Definition: avformat.h:841
avio_seek
int64_t avio_seek(AVIOContext *s, int64_t offset, int whence)
fseek() equivalent for AVIOContext.
Definition: aviobuf.c:278
AVClass::class_name
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
Definition: log.h:71
AVSTREAM_PARSE_HEADERS
@ AVSTREAM_PARSE_HEADERS
Only parse headers, do not repack.
Definition: avformat.h:692
avformat.h
AV_INPUT_BUFFER_PADDING_SIZE
#define AV_INPUT_BUFFER_PADDING_SIZE
Definition: defs.h:40
AV1DemuxContext::temporal_unit_size
uint32_t temporal_unit_size
Definition: av1dec.c:36
AVBitStreamFilter
Definition: bsf.h:111
avio_read
int avio_read(AVIOContext *s, unsigned char *buf, int size)
Read size bytes from AVIOContext into buf.
Definition: aviobuf.c:659
AVIOContext::eof_reached
int eof_reached
true if was unable to read due to error or eof
Definition: avio.h:248
avio_skip
int64_t avio_skip(AVIOContext *s, int64_t offset)
Skip given number of bytes forward.
Definition: aviobuf.c:365
AVMEDIA_TYPE_VIDEO
@ AVMEDIA_TYPE_VIDEO
Definition: avutil.h:201
read_probe
static int read_probe(const AVProbeData *p)
Definition: cdg.c:29
av1_options
static const AVOption av1_options[]
Definition: av1dec.c:111
AVCodecParameters::codec_id
enum AVCodecID codec_id
Specific type of the encoded data (the codec used).
Definition: codec_par.h:55
AVPacket
This structure stores compressed data.
Definition: packet.h:468
av1_read_header
static int av1_read_header(AVFormatContext *s)
Definition: av1dec.c:59
av1_demuxer_class
static const AVClass av1_demuxer_class
Definition: av1dec.c:117
flags
#define flags(name, subs,...)
Definition: cbs_av1.c:474
AVERROR_BUG
#define AVERROR_BUG
Internal bug, also see AVERROR_BUG2.
Definition: error.h:52
av_log
#define av_log(a,...)
Definition: tableprint_vlc.h:27
AVERROR_INVALIDDATA
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
Definition: error.h:61
AV1DemuxContext::framerate
AVRational framerate
Definition: av1dec.c:35
AV1_OBU_METADATA
@ AV1_OBU_METADATA
Definition: av1.h:34
avcodec_parameters_copy
int avcodec_parameters_copy(AVCodecParameters *dst, const AVCodecParameters *src)
Copy the contents of src to dst.
Definition: codec_par.c:106
MAX_OBU_HEADER_SIZE
#define MAX_OBU_HEADER_SIZE
Definition: av1_parse.h:35
avio_feof
int avio_feof(AVIOContext *s)
Similar to feof() but also returns nonzero on read errors.
Definition: aviobuf.c:393
av_bsf_get_by_name
const AVBitStreamFilter * av_bsf_get_by_name(const char *name)
Definition: bitstream_filters.c:86