FFmpeg
options.c
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2000, 2001, 2002 Fabrice Bellard
3  *
4  * This file is part of FFmpeg.
5  *
6  * FFmpeg is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * FFmpeg is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with FFmpeg; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19  */
20 #include "avformat.h"
21 #include "avformat_internal.h"
22 #include "avio_internal.h"
23 #include "demux.h"
24 #include "internal.h"
25 
26 #include "libavcodec/avcodec.h"
27 #include "libavcodec/codec_par.h"
28 
29 #include "libavutil/attributes.h"
30 #include "libavutil/avassert.h"
31 #include "libavutil/iamf.h"
32 #include "libavutil/internal.h"
33 #include "libavutil/intmath.h"
34 #include "libavutil/mem.h"
35 #include "libavutil/opt.h"
36 
37 /**
38  * @file
39  * Options definition for AVFormatContext.
40  */
41 
43 #include "options_table.h"
45 
46 static const char* format_to_name(void* ptr)
47 {
49  if (fc->name) return fc->name;
50  else if(fc->iformat) return fc->iformat->name;
51  else if(fc->oformat) return fc->oformat->name;
52  else return fc->av_class->class_name;
53 }
54 
55 static void *format_child_next(void *obj, void *prev)
56 {
57  AVFormatContext *s = obj;
58  if (!prev && s->priv_data &&
59  ((s->iformat && s->iformat->priv_class) ||
60  s->oformat && s->oformat->priv_class))
61  return s->priv_data;
62  if (s->pb && s->pb->av_class && prev != s->pb)
63  return s->pb;
64  return NULL;
65 }
66 
67 enum {
72 
73 };
74 
75 #define ITER_STATE_SHIFT 16
76 
77 static const AVClass *format_child_class_iterate(void **iter)
78 {
79  // we use the low 16 bits of iter as the value to be passed to
80  // av_(de)muxer_iterate()
81  void *val = (void*)(((uintptr_t)*iter) & ((1 << ITER_STATE_SHIFT) - 1));
82  unsigned int state = ((uintptr_t)*iter) >> ITER_STATE_SHIFT;
83  const AVClass *ret = NULL;
84 
86  ret = &ff_avio_class;
87  state++;
88  goto finish;
89  }
90 
91  if (state == CHILD_CLASS_ITER_MUX) {
92  const AVOutputFormat *ofmt;
93 
94  while ((ofmt = av_muxer_iterate(&val))) {
95  ret = ofmt->priv_class;
96  if (ret)
97  goto finish;
98  }
99 
100  val = NULL;
101  state++;
102  }
103 
104  if (state == CHILD_CLASS_ITER_DEMUX) {
105  const AVInputFormat *ifmt;
106 
107  while ((ifmt = av_demuxer_iterate(&val))) {
108  ret = ifmt->priv_class;
109  if (ret)
110  goto finish;
111  }
112  val = NULL;
113  state++;
114  }
115 
116 finish:
117  // make sure none av_(de)muxer_iterate does not set the high bits of val
118  av_assert0(!((uintptr_t)val >> ITER_STATE_SHIFT));
119  *iter = (void*)((uintptr_t)val | (state << ITER_STATE_SHIFT));
120  return ret;
121 }
122 
123 static AVClassCategory get_category(void *ptr)
124 {
125  AVFormatContext* s = ptr;
126  if(s->iformat) return AV_CLASS_CATEGORY_DEMUXER;
127  else return AV_CLASS_CATEGORY_MUXER;
128 }
129 
131  .class_name = "AVFormatContext",
132  .item_name = format_to_name,
133  .option = avformat_options,
134  .version = LIBAVUTIL_VERSION_INT,
135  .child_next = format_child_next,
136  .child_class_iterate = format_child_class_iterate,
138  .get_category = get_category,
139 };
140 
142  const char *url, int flags, AVDictionary **options)
143 {
144  int loglevel;
145 
146  if (!strcmp(url, s->url) ||
147  s->iformat && !strcmp(s->iformat->name, "image2") ||
148  s->oformat && !strcmp(s->oformat->name, "image2")
149  ) {
150  loglevel = AV_LOG_DEBUG;
151  } else
152  loglevel = AV_LOG_INFO;
153 
154  av_log(s, loglevel, "Opening \'%s\' for %s\n", url, flags & AVIO_FLAG_WRITE ? "writing" : "reading");
155 
156  return ffio_open_whitelist(pb, url, flags, &s->interrupt_callback, options, s->protocol_whitelist, s->protocol_blacklist);
157 }
158 
160 {
161  return avio_close(pb);
162 }
163 
165 {
167  FFFormatContext *si;
169 
170  fci = av_mallocz(sizeof(*fci));
171  if (!fci)
172  return NULL;
173 
174  si = &fci->fc;
175  s = &si->pub;
176  s->av_class = &av_format_context_class;
177  s->io_open = io_open_default;
178  s->io_close2= io_close2_default;
179 
181 
182  si->pkt = av_packet_alloc();
183  si->parse_pkt = av_packet_alloc();
184  if (!si->pkt || !si->parse_pkt) {
186  return NULL;
187  }
188 
189  return s;
190 }
191 
193 {
194  return &av_format_context_class;
195 }
196 
197 #define DISPOSITION_OPT(ctx) \
198  { "disposition", NULL, offsetof(ctx, disposition), AV_OPT_TYPE_FLAGS, { .i64 = 0 }, \
199  .flags = AV_OPT_FLAG_ENCODING_PARAM, .unit = "disposition" }, \
200  { "default", .type = AV_OPT_TYPE_CONST, { .i64 = AV_DISPOSITION_DEFAULT }, .unit = "disposition" }, \
201  { "dub", .type = AV_OPT_TYPE_CONST, { .i64 = AV_DISPOSITION_DUB }, .unit = "disposition" }, \
202  { "original", .type = AV_OPT_TYPE_CONST, { .i64 = AV_DISPOSITION_ORIGINAL }, .unit = "disposition" }, \
203  { "comment", .type = AV_OPT_TYPE_CONST, { .i64 = AV_DISPOSITION_COMMENT }, .unit = "disposition" }, \
204  { "lyrics", .type = AV_OPT_TYPE_CONST, { .i64 = AV_DISPOSITION_LYRICS }, .unit = "disposition" }, \
205  { "karaoke", .type = AV_OPT_TYPE_CONST, { .i64 = AV_DISPOSITION_KARAOKE }, .unit = "disposition" }, \
206  { "forced", .type = AV_OPT_TYPE_CONST, { .i64 = AV_DISPOSITION_FORCED }, .unit = "disposition" }, \
207  { "hearing_impaired", .type = AV_OPT_TYPE_CONST, { .i64 = AV_DISPOSITION_HEARING_IMPAIRED }, .unit = "disposition" }, \
208  { "visual_impaired", .type = AV_OPT_TYPE_CONST, { .i64 = AV_DISPOSITION_VISUAL_IMPAIRED }, .unit = "disposition" }, \
209  { "clean_effects", .type = AV_OPT_TYPE_CONST, { .i64 = AV_DISPOSITION_CLEAN_EFFECTS }, .unit = "disposition" }, \
210  { "attached_pic", .type = AV_OPT_TYPE_CONST, { .i64 = AV_DISPOSITION_ATTACHED_PIC }, .unit = "disposition" }, \
211  { "timed_thumbnails", .type = AV_OPT_TYPE_CONST, { .i64 = AV_DISPOSITION_TIMED_THUMBNAILS }, .unit = "disposition" }, \
212  { "non_diegetic", .type = AV_OPT_TYPE_CONST, { .i64 = AV_DISPOSITION_NON_DIEGETIC }, .unit = "disposition" }, \
213  { "captions", .type = AV_OPT_TYPE_CONST, { .i64 = AV_DISPOSITION_CAPTIONS }, .unit = "disposition" }, \
214  { "descriptions", .type = AV_OPT_TYPE_CONST, { .i64 = AV_DISPOSITION_DESCRIPTIONS }, .unit = "disposition" }, \
215  { "metadata", .type = AV_OPT_TYPE_CONST, { .i64 = AV_DISPOSITION_METADATA }, .unit = "disposition" }, \
216  { "dependent", .type = AV_OPT_TYPE_CONST, { .i64 = AV_DISPOSITION_DEPENDENT }, .unit = "disposition" }, \
217  { "still_image", .type = AV_OPT_TYPE_CONST, { .i64 = AV_DISPOSITION_STILL_IMAGE }, .unit = "disposition" }, \
218  { "multilayer", .type = AV_OPT_TYPE_CONST, { .i64 = AV_DISPOSITION_MULTILAYER }, .unit = "disposition" }
219 
220 static const AVOption stream_options[] = {
222  { "discard", NULL, offsetof(AVStream, discard), AV_OPT_TYPE_INT, { .i64 = AVDISCARD_DEFAULT }, INT_MIN, INT_MAX,
223  .flags = AV_OPT_FLAG_DECODING_PARAM, .unit = "avdiscard" },
224  { "none", .type = AV_OPT_TYPE_CONST, {.i64 = AVDISCARD_NONE }, .unit = "avdiscard" },
225  { "default", .type = AV_OPT_TYPE_CONST, {.i64 = AVDISCARD_DEFAULT }, .unit = "avdiscard" },
226  { "noref", .type = AV_OPT_TYPE_CONST, {.i64 = AVDISCARD_NONREF }, .unit = "avdiscard" },
227  { "bidir", .type = AV_OPT_TYPE_CONST, {.i64 = AVDISCARD_BIDIR }, .unit = "avdiscard" },
228  { "nointra", .type = AV_OPT_TYPE_CONST, {.i64 = AVDISCARD_NONINTRA }, .unit = "avdiscard" },
229  { "nokey", .type = AV_OPT_TYPE_CONST, {.i64 = AVDISCARD_NONKEY }, .unit = "avdiscard" },
230  { "all", .type = AV_OPT_TYPE_CONST, {.i64 = AVDISCARD_ALL }, .unit = "avdiscard" },
231  { NULL }
232 };
233 
234 static const AVClass stream_class = {
235  .class_name = "AVStream",
236  .item_name = av_default_item_name,
237  .version = LIBAVUTIL_VERSION_INT,
238  .option = stream_options,
239 };
240 
242 {
243  return &stream_class;
244 }
245 
247 {
248  FFStream *sti;
249  AVStream *st;
250  AVStream **streams;
251 
252  if (s->nb_streams >= s->max_streams) {
253  av_log(s, AV_LOG_ERROR, "Number of streams exceeds max_streams parameter"
254  " (%d), see the documentation if you wish to increase it\n",
255  s->max_streams);
256  return NULL;
257  }
258  streams = av_realloc_array(s->streams, s->nb_streams + 1, sizeof(*streams));
259  if (!streams)
260  return NULL;
261  s->streams = streams;
262 
263  sti = av_mallocz(sizeof(*sti));
264  if (!sti)
265  return NULL;
266  st = &sti->pub;
267 
268  st->av_class = &stream_class;
270  if (!st->codecpar)
271  goto fail;
272 
273  sti->fmtctx = s;
274 
275  sti->parse_pkt = av_packet_alloc();
276  if (!sti->parse_pkt)
277  goto fail;
278 
279  if (s->iformat) {
281  if (!sti->avctx)
282  goto fail;
283 
284  sti->info = av_mallocz(sizeof(*sti->info));
285  if (!sti->info)
286  goto fail;
287 
288 #if FF_API_R_FRAME_RATE
289  sti->info->last_dts = AV_NOPTS_VALUE;
290 #endif
293 
294  /* default pts setting is MPEG-like */
295  avpriv_set_pts_info(st, 33, 1, 90000);
296  /* we set the current DTS to 0 so that formats without any timestamps
297  * but durations get some timestamps, formats with some unknown
298  * timestamps have their first few packets buffered and the
299  * timestamps corrected before they are returned to the user */
300  sti->cur_dts = RELATIVE_TS_BASE;
301  } else {
302  sti->cur_dts = AV_NOPTS_VALUE;
303  }
304 
305  st->index = s->nb_streams;
307  st->duration = AV_NOPTS_VALUE;
308  sti->first_dts = AV_NOPTS_VALUE;
309  sti->probe_packets = s->max_probe_packets;
312 
315  for (int i = 0; i < MAX_REORDER_DELAY + 1; i++)
316  sti->pts_buffer[i] = AV_NOPTS_VALUE;
317 
318  st->sample_aspect_ratio = (AVRational) { 0, 1 };
319 
320  sti->need_context_update = 1;
321 
322  s->streams[s->nb_streams++] = st;
323  return st;
324 fail:
325  ff_free_stream(&st);
326  return NULL;
327 }
328 
329 #define FLAGS AV_OPT_FLAG_ENCODING_PARAM | AV_OPT_FLAG_VIDEO_PARAM
330 #define OFFSET(x) offsetof(AVStreamGroupTileGrid, x)
331 static const AVOption tile_grid_options[] = {
332  { "grid_size", "size of the output canvas", OFFSET(coded_width),
333  AV_OPT_TYPE_IMAGE_SIZE, { .str = NULL }, 0, INT_MAX, FLAGS },
334  { "output_size", "size of valid pixels in output image meant for presentation", OFFSET(width),
335  AV_OPT_TYPE_IMAGE_SIZE, { .str = NULL }, 0, INT_MAX, FLAGS },
336  { "background_color", "set a background color for unused pixels",
337  OFFSET(background), AV_OPT_TYPE_COLOR, { .str = "black"}, 0, 0, FLAGS },
338  { "horizontal_offset", NULL, OFFSET(horizontal_offset), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, FLAGS },
339  { "vertical_offset", NULL, OFFSET(vertical_offset), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, FLAGS },
340  { NULL },
341 };
342 #undef OFFSET
343 
344 static const AVClass tile_grid_class = {
345  .class_name = "AVStreamGroupTileGrid",
346  .version = LIBAVUTIL_VERSION_INT,
347  .option = tile_grid_options,
348 };
349 
350 #define OFFSET(x) offsetof(AVStreamGroupTREF, x)
351 static const AVOption tref_options[] = {
352  { "metadata_index", "Index of the data stream within the group", OFFSET(metadata_index),
353  AV_OPT_TYPE_UINT, { .i64 = 0 }, 0, UINT_MAX, FLAGS },
354  { NULL },
355 };
356 #undef OFFSET
357 
358 static const AVClass tref_class = {
359  .class_name = "AVStreamGroupTREF",
360  .version = LIBAVUTIL_VERSION_INT,
361  .option = tref_options,
362 };
363 
364 #if FF_API_LCEVC_STRUCT
366 #endif
367 #define OFFSET(x) offsetof(AVStreamGroupLayeredVideo, x)
368 static const AVOption layered_video_options[] = {
369 #if FF_API_LCEVC_STRUCT
370  { "lcevc_index", "Index of the LCEVC stream within the group", OFFSET(lcevc_index),
371  AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, FLAGS | AV_OPT_FLAG_DEPRECATED },
372 #endif
373  { "el_index", "Index of the enhancement layer stream within the group", OFFSET(el_index),
374  AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, FLAGS },
375  { "video_size", "size of the final layered video presentation", OFFSET(width),
376  AV_OPT_TYPE_IMAGE_SIZE, { .str = NULL }, 0, INT_MAX, FLAGS },
377  { NULL },
378 };
379 #if FF_API_LCEVC_STRUCT
381 #endif
382 #undef OFFSET
383 
384 static const AVClass layered_video_class = {
385  .class_name = "AVStreamGroupLayeredVideo",
386  .version = LIBAVUTIL_VERSION_INT,
387  .option = layered_video_options,
388 };
389 
390 static void *stream_group_child_next(void *obj, void *prev)
391 {
392  AVStreamGroup *stg = obj;
393  if (!prev) {
394  switch(stg->type) {
396  return stg->params.iamf_audio_element;
398  return stg->params.iamf_mix_presentation;
400  return stg->params.tile_grid;
402  return stg->params.tref;
405  return stg->params.layered_video;
406  default:
407  break;
408  }
409  }
410  return NULL;
411 }
412 
413 #undef FLAGS
414 
415 static const AVClass *stream_group_child_iterate(void **opaque)
416 {
417  uintptr_t i = (uintptr_t)*opaque;
418  const AVClass *ret = NULL;
419 
420  switch(i) {
422  i++;
426  break;
429  break;
431  ret = &tile_grid_class;
432  break;
434  ret = &tref_class;
435  break;
439  break;
440  default:
441  break;
442  }
443 
444  if (ret)
445  *opaque = (void*)(i + 1);
446  return ret;
447 }
448 
449 static const AVOption stream_group_options[] = {
451  {"id", "Set group id", offsetof(AVStreamGroup, id), AV_OPT_TYPE_INT64, {.i64 = 0}, 0, INT64_MAX, AV_OPT_FLAG_ENCODING_PARAM },
452  { NULL }
453 };
454 
455 static const AVClass stream_group_class = {
456  .class_name = "AVStreamGroup",
457  .item_name = av_default_item_name,
458  .version = LIBAVUTIL_VERSION_INT,
459  .option = stream_group_options,
460  .child_next = stream_group_child_next,
461  .child_class_iterate = stream_group_child_iterate,
462 };
463 
465 {
466  return &stream_group_class;
467 }
468 
472 {
473  AVStreamGroup **stream_groups;
474  AVStreamGroup *stg;
475  FFStreamGroup *stgi;
476 
477  stream_groups = av_realloc_array(s->stream_groups, s->nb_stream_groups + 1,
478  sizeof(*stream_groups));
479  if (!stream_groups)
480  return NULL;
481  s->stream_groups = stream_groups;
482 
483  stgi = av_mallocz(sizeof(*stgi));
484  if (!stgi)
485  return NULL;
486  stg = &stgi->pub;
487 
489  av_opt_set_defaults(stg);
490  stg->type = type;
491  switch (type) {
494  if (!stg->params.iamf_audio_element)
495  goto fail;
496  break;
499  if (!stg->params.iamf_mix_presentation)
500  goto fail;
501  break;
503  stg->params.tile_grid = av_mallocz(sizeof(*stg->params.tile_grid));
504  if (!stg->params.tile_grid)
505  goto fail;
508  break;
510  stg->params.tref = av_mallocz(sizeof(*stg->params.tref));
511  if (!stg->params.tref)
512  goto fail;
513  stg->params.tref->av_class = &tref_class;
515  break;
518  stg->params.layered_video = av_mallocz(sizeof(*stg->params.layered_video));
519  if (!stg->params.layered_video)
520  goto fail;
523  break;
524  default:
525  goto fail;
526  }
527 
528  if (options) {
530  goto fail;
531  }
532 
533  stgi->fmtctx = s;
534  stg->index = s->nb_stream_groups;
535 
536  s->stream_groups[s->nb_stream_groups++] = stg;
537 
538  return stg;
539 fail:
540  ff_free_stream_group(&stg);
541  return NULL;
542 }
543 
545 {
546  AVStream **streams = av_realloc_array(stg->streams, stg->nb_streams + 1,
547  sizeof(*stg->streams));
548  if (!streams)
549  return AVERROR(ENOMEM);
550 
551  stg->streams = streams;
552  stg->streams[stg->nb_streams++] = st;
553 
554  return 0;
555 }
556 
558 {
559  const FFStreamGroup *stgi = cffstreamgroup(stg);
560  const FFStream *sti = cffstream(st);
561 
562  if (stgi->fmtctx != sti->fmtctx)
563  return AVERROR(EINVAL);
564 
565  for (int i = 0; i < stg->nb_streams; i++)
566  if (stg->streams[i]->index == st->index)
567  return AVERROR(EEXIST);
568 
569  return stream_group_add_stream(stg, st);
570 }
571 
572 static int option_is_disposition(const AVOption *opt)
573 {
574  return opt->type == AV_OPT_TYPE_CONST &&
575  opt->unit && !strcmp(opt->unit, "disposition");
576 }
577 
578 int av_disposition_from_string(const char *disp)
579 {
580  for (const AVOption *opt = stream_options; opt->name; opt++)
581  if (option_is_disposition(opt) && !strcmp(disp, opt->name))
582  return opt->default_val.i64;
583  return AVERROR(EINVAL);
584 }
585 
586 const char *av_disposition_to_string(int disposition)
587 {
588  int val;
589 
590  if (disposition <= 0)
591  return NULL;
592 
593  val = 1 << ff_ctz(disposition);
594  for (const AVOption *opt = stream_options; opt->name; opt++)
595  if (option_is_disposition(opt) && opt->default_val.i64 == val)
596  return opt->name;
597 
598  return NULL;
599 }
AV_OPT_SEARCH_CHILDREN
#define AV_OPT_SEARCH_CHILDREN
Search in possible children of the given object first.
Definition: opt.h:604
flags
const SwsFlags flags[]
Definition: swscale.c:85
FFStreamInfo::fps_last_dts
int64_t fps_last_dts
Definition: demux.h:216
iamf.h
AVCodec
AVCodec.
Definition: codec.h:169
AVStreamGroupParamsType
AVStreamGroupParamsType
Definition: avformat.h:1127
FF_ENABLE_DEPRECATION_WARNINGS
#define FF_ENABLE_DEPRECATION_WARNINGS
Definition: internal.h:67
ffio_open_whitelist
int ffio_open_whitelist(AVIOContext **s, const char *filename, int flags, const AVIOInterruptCB *int_cb, AVDictionary **options, const char *whitelist, const char *blacklist)
Definition: avio.c:477
av_opt_set_defaults
void av_opt_set_defaults(void *s)
Set the values of all AVOption fields to their default values.
Definition: opt.c:1671
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
AVStreamGroup::tile_grid
struct AVStreamGroupTileGrid * tile_grid
Definition: avformat.h:1175
DISPOSITION_OPT
#define DISPOSITION_OPT(ctx)
Definition: options.c:197
AV_STREAM_GROUP_PARAMS_LCEVC
@ AV_STREAM_GROUP_PARAMS_LCEVC
Definition: avformat.h:1132
ITER_STATE_SHIFT
#define ITER_STATE_SHIFT
Definition: options.c:75
FFStream::first_dts
int64_t first_dts
Timestamp corresponding to the last dts sync point.
Definition: internal.h:352
ff_ctz
#define ff_ctz
Definition: intmath.h:105
stream_group_add_stream
static int stream_group_add_stream(AVStreamGroup *stg, AVStream *st)
Definition: options.c:544
FFStream::last_IP_pts
int64_t last_IP_pts
Definition: internal.h:305
format_child_class_iterate
static const AVClass * format_child_class_iterate(void **iter)
Definition: options.c:77
FLAGS
#define FLAGS
Definition: options.c:329
avformat_get_class
const AVClass * avformat_get_class(void)
Get the AVClass for AVFormatContext.
Definition: options.c:192
CHILD_CLASS_ITER_DONE
@ CHILD_CLASS_ITER_DONE
Definition: options.c:71
AVOption
AVOption.
Definition: opt.h:428
tref_options
static const AVOption tref_options[]
Definition: options.c:351
AVStreamGroup::tref
struct AVStreamGroupTREF * tref
Definition: avformat.h:1184
AVDictionary
Definition: dict.c:32
cffstream
static const av_always_inline FFStream * cffstream(const AVStream *st)
Definition: internal.h:363
FFStream::last_dts_for_order_check
int64_t last_dts_for_order_check
Internal data to analyze DTS and detect faulty mpeg streams.
Definition: internal.h:287
av_disposition_to_string
const char * av_disposition_to_string(int disposition)
Definition: options.c:586
stream_group_class
static const AVClass stream_group_class
Definition: options.c:455
FormatContextInternal
Definition: avformat_internal.h:33
ff_free_stream_group
void ff_free_stream_group(AVStreamGroup **pstg)
Frees a stream group without modifying the corresponding AVFormatContext.
Definition: avformat.c:78
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:830
finish
static void finish(void)
Definition: movenc.c:374
AVStreamGroup::av_class
const AVClass * av_class
A class for AVOptions.
Definition: avformat.h:1144
FFStreamInfo::fps_first_dts
int64_t fps_first_dts
Those are used for average framerate estimation.
Definition: demux.h:214
FFStream::avctx
struct AVCodecContext * avctx
The codec context used by avformat_find_stream_info, the parser, etc.
Definition: internal.h:156
AVDISCARD_NONE
@ AVDISCARD_NONE
discard nothing
Definition: defs.h:226
val
static double val(void *priv, double ch)
Definition: aeval.c:77
av_iamf_audio_element_alloc
AVIAMFAudioElement * av_iamf_audio_element_alloc(void)
Allocates a AVIAMFAudioElement, and initializes its fields with default values.
Definition: iamf.c:324
av_stream_group_get_class
const AVClass * av_stream_group_get_class(void)
Get the AVClass for AVStreamGroup.
Definition: options.c:464
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
AVStream::duration
int64_t duration
Decoding: duration of the stream, in stream time base.
Definition: avformat.h:806
AV_PTS_WRAP_IGNORE
#define AV_PTS_WRAP_IGNORE
Options for behavior on timestamp wrap detection.
Definition: avformat.h:736
AV_STREAM_GROUP_PARAMS_DOLBY_VISION
@ AV_STREAM_GROUP_PARAMS_DOLBY_VISION
Definition: avformat.h:1134
AVStreamGroupTileGrid::av_class
const AVClass * av_class
Definition: avformat.h:955
stream_group_child_next
static void * stream_group_child_next(void *obj, void *prev)
Definition: options.c:390
avassert.h
AV_LOG_ERROR
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:210
AVInputFormat
Definition: avformat.h:546
layered_video_options
static const AVOption layered_video_options[]
Definition: options.c:368
AV_STREAM_GROUP_PARAMS_IAMF_MIX_PRESENTATION
@ AV_STREAM_GROUP_PARAMS_IAMF_MIX_PRESENTATION
Definition: avformat.h:1130
avcodec_alloc_context3
AVCodecContext * avcodec_alloc_context3(const AVCodec *codec)
Allocate an AVCodecContext and set its fields to default values.
Definition: options.c:149
s
#define s(width, name)
Definition: cbs_vp9.c:198
FFStreamInfo::last_dts
int64_t last_dts
Definition: demux.h:193
av_realloc_array
void * av_realloc_array(void *ptr, size_t nmemb, size_t size)
Definition: mem.c:217
fc
#define fc(width, name, range_min, range_max)
Definition: cbs_av1.c:494
FFStreamGroup::fmtctx
AVFormatContext * fmtctx
Definition: avformat_internal.h:127
AV_OPT_TYPE_INT64
@ AV_OPT_TYPE_INT64
Underlying C type is int64_t.
Definition: opt.h:262
av_assert0
#define av_assert0(cond)
assert() equivalent, that is always enabled.
Definition: avassert.h:42
AVIO_FLAG_WRITE
#define AVIO_FLAG_WRITE
write-only
Definition: avio.h:618
AVStreamGroup::index
unsigned int index
Group index in AVFormatContext.
Definition: avformat.h:1151
AV_LOG_DEBUG
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
Definition: log.h:231
RELATIVE_TS_BASE
#define RELATIVE_TS_BASE
Definition: avformat_internal.h:105
av_mallocz
#define av_mallocz(s)
Definition: tableprint_vlc.h:31
layered_video_class
static const AVClass layered_video_class
Definition: options.c:384
AVDISCARD_BIDIR
@ AVDISCARD_BIDIR
discard all bidirectional frames
Definition: defs.h:229
AVStreamGroup::layered_video
struct AVStreamGroupLayeredVideo * layered_video
Definition: avformat.h:1176
avformat_new_stream
AVStream * avformat_new_stream(AVFormatContext *s, const AVCodec *c)
Definition: options.c:246
AV_CLASS_CATEGORY_DEMUXER
@ AV_CLASS_CATEGORY_DEMUXER
Definition: log.h:33
FFFormatContext
Definition: internal.h:64
AVDISCARD_ALL
@ AVDISCARD_ALL
discard all
Definition: defs.h:232
AVFormatContext
Format I/O context.
Definition: avformat.h:1314
FFStream::pub
AVStream pub
The public context.
Definition: internal.h:132
fail
#define fail
Definition: test.h:478
internal.h
AVStream::codecpar
AVCodecParameters * codecpar
Codec parameters associated with this stream.
Definition: avformat.h:770
LIBAVUTIL_VERSION_INT
#define LIBAVUTIL_VERSION_INT
Definition: version.h:85
AVClass
Describe the class of an AVClass context structure.
Definition: log.h:76
NULL
#define NULL
Definition: coverity.c:32
CHILD_CLASS_ITER_MUX
@ CHILD_CLASS_ITER_MUX
Definition: options.c:69
AVRational
Rational number (pair of numerator and denominator).
Definition: rational.h:58
avformat_options
static const AVOption avformat_options[]
Definition: options_table.h:36
AV_OPT_TYPE_COLOR
@ AV_OPT_TYPE_COLOR
Underlying C type is uint8_t[4].
Definition: opt.h:322
AV_OPT_TYPE_IMAGE_SIZE
@ AV_OPT_TYPE_IMAGE_SIZE
Underlying C type is two consecutive integers.
Definition: opt.h:302
av_fallthrough
#define av_fallthrough
Definition: attributes.h:67
av_default_item_name
const char * av_default_item_name(void *ptr)
Return the context name.
Definition: log.c:242
options
Definition: swscale.c:50
attributes.h
AVOutputFormat::priv_class
const AVClass * priv_class
AVClass for the private context.
Definition: avformat.h:536
AV_OPT_TYPE_UINT
@ AV_OPT_TYPE_UINT
Underlying C type is unsigned int.
Definition: opt.h:334
FormatContextInternal::fc
FFFormatContext fc
Definition: avformat_internal.h:34
stream_group_options
static const AVOption stream_group_options[]
Definition: options.c:449
AV_OPT_FLAG_ENCODING_PARAM
#define AV_OPT_FLAG_ENCODING_PARAM
A generic parameter which can be set by the user for muxing or encoding.
Definition: opt.h:351
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
format_to_name
FF_DISABLE_DEPRECATION_WARNINGS static const FF_ENABLE_DEPRECATION_WARNINGS char * format_to_name(void *ptr)
Definition: options.c:46
stream_group_child_iterate
static const AVClass * stream_group_child_iterate(void **opaque)
Definition: options.c:415
av_disposition_from_string
int av_disposition_from_string(const char *disp)
Definition: options.c:578
avformat_stream_group_add_stream
int avformat_stream_group_add_stream(AVStreamGroup *stg, AVStream *st)
Add an already allocated stream to a stream group.
Definition: options.c:557
AV_STREAM_GROUP_PARAMS_TILE_GRID
@ AV_STREAM_GROUP_PARAMS_TILE_GRID
Definition: avformat.h:1131
AVDISCARD_NONKEY
@ AVDISCARD_NONKEY
discard all frames except keyframes
Definition: defs.h:231
AVIOContext
Bytestream IO Context.
Definition: avio.h:160
FFFormatContext::parse_pkt
AVPacket * parse_pkt
The generic code uses this as a temporary packet to parse packets or for muxing, especially flushing.
Definition: internal.h:104
AV_STREAM_GROUP_PARAMS_TREF
@ AV_STREAM_GROUP_PARAMS_TREF
Definition: avformat.h:1133
avformat_alloc_context
AVFormatContext * avformat_alloc_context(void)
Allocate an AVFormatContext.
Definition: options.c:164
AVDISCARD_DEFAULT
@ AVDISCARD_DEFAULT
discard useless packets like 0 size packets in avi
Definition: defs.h:227
FFStream
Definition: internal.h:128
ff_free_stream
void ff_free_stream(AVStream **pst)
Frees a stream without modifying the corresponding AVFormatContext.
Definition: avformat.c:45
AVClass::category
AVClassCategory category
Category used for visualization (like color).
Definition: log.h:133
i
#define i(width, name, range_min, range_max)
Definition: cbs_h264.c:63
AV_NOPTS_VALUE
#define AV_NOPTS_VALUE
Undefined timestamp value.
Definition: avutil.h:247
AVStreamGroup::iamf_audio_element
struct AVIAMFAudioElement * iamf_audio_element
Definition: avformat.h:1173
av_iamf_mix_presentation_alloc
AVIAMFMixPresentation * av_iamf_mix_presentation_alloc(void)
Allocates a AVIAMFMixPresentation, and initializes its fields with default values.
Definition: iamf.c:522
av_demuxer_iterate
const AVInputFormat * av_demuxer_iterate(void **opaque)
Iterate over all registered demuxers.
Definition: allformats.c:616
AVOption::name
const char * name
Definition: opt.h:429
AVStream::sample_aspect_ratio
AVRational sample_aspect_ratio
sample aspect ratio (0 if unknown)
Definition: avformat.h:825
CHILD_CLASS_ITER_DEMUX
@ CHILD_CLASS_ITER_DEMUX
Definition: options.c:70
FFStream::pts_wrap_behavior
int pts_wrap_behavior
Options for behavior, when a wrap is detected.
Definition: internal.h:267
av_packet_alloc
AVPacket * av_packet_alloc(void)
Allocate an AVPacket and set its fields to default values.
Definition: packet.c:63
AVStreamGroup::params
union AVStreamGroup::@454 params
Group type-specific parameters.
AVCodecParameters::avcodec_parameters_alloc
AVCodecParameters * avcodec_parameters_alloc(void)
Allocate a new AVCodecParameters and set its fields to default values (unknown/invalid/0).
Definition: codec_par.c:57
AV_STREAM_GROUP_PARAMS_IAMF_AUDIO_ELEMENT
@ AV_STREAM_GROUP_PARAMS_IAMF_AUDIO_ELEMENT
Definition: avformat.h:1129
FFStream::probe_packets
int probe_packets
Number of packets to buffer for codec probing.
Definition: internal.h:311
AVStreamGroup::streams
AVStream ** streams
A list of streams in the group.
Definition: avformat.h:1215
state
static struct @593 state
AVStreamGroup::iamf_mix_presentation
struct AVIAMFMixPresentation * iamf_mix_presentation
Definition: avformat.h:1174
avformat_internal.h
AV_LOG_INFO
#define AV_LOG_INFO
Standard information.
Definition: log.h:221
av_iamf_audio_element_get_class
const AVClass * av_iamf_audio_element_get_class(void)
Definition: iamf.c:319
get_category
static AVClassCategory get_category(void *ptr)
Definition: options.c:123
AV_OPT_FLAG_DEPRECATED
#define AV_OPT_FLAG_DEPRECATED
Set if option is deprecated, users should refer to AVOption.help text for more information.
Definition: opt.h:385
OFFSET
#define OFFSET(x)
Definition: options.c:367
AVClassCategory
AVClassCategory
Definition: log.h:28
AV_STREAM_GROUP_PARAMS_NONE
@ AV_STREAM_GROUP_PARAMS_NONE
Definition: avformat.h:1128
AVDISCARD_NONINTRA
@ AVDISCARD_NONINTRA
discard all non intra frames
Definition: defs.h:230
AVOutputFormat
Definition: avformat.h:507
tile_grid_class
static const AVClass tile_grid_class
Definition: options.c:344
avio_internal.h
av_opt_set_dict2
int av_opt_set_dict2(void *obj, AVDictionary **options, int search_flags)
Set all the options from a given dictionary on an object.
Definition: opt.c:1955
internal.h
tref_class
static const AVClass tref_class
Definition: options.c:358
io_close2_default
static int io_close2_default(AVFormatContext *s, AVIOContext *pb)
Definition: options.c:159
AVStream::av_class
const AVClass * av_class
A class for AVOptions.
Definition: avformat.h:751
stream_class
static const AVClass stream_class
Definition: options.c:234
ff_avio_class
const AVClass ff_avio_class
Definition: avio.c:98
FFStream::pts_buffer
int64_t pts_buffer[MAX_REORDER_DELAY+1]
Definition: internal.h:282
demux.h
AVStreamGroupTREF::av_class
const AVClass * av_class
Definition: avformat.h:1119
avcodec.h
ret
ret
Definition: filter_design.txt:187
AVStream
Stream structure.
Definition: avformat.h:747
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:81
CHILD_CLASS_ITER_AVIO
@ CHILD_CLASS_ITER_AVIO
Definition: options.c:68
avformat.h
FFStreamGroup::pub
AVStreamGroup pub
The public context.
Definition: avformat_internal.h:125
AVOption::type
enum AVOptionType type
Definition: opt.h:444
av_iamf_mix_presentation_get_class
const AVClass * av_iamf_mix_presentation_get_class(void)
Definition: iamf.c:517
AVStreamGroup
Definition: avformat.h:1140
format_child_next
static void * format_child_next(void *obj, void *prev)
Definition: options.c:55
AVStream::index
int index
stream index in AVFormatContext
Definition: avformat.h:753
av_muxer_iterate
const AVOutputFormat * av_muxer_iterate(void **opaque)
Iterate over all registered muxers.
Definition: allformats.c:595
AV_CLASS_CATEGORY_MUXER
@ AV_CLASS_CATEGORY_MUXER
Definition: log.h:32
AVStreamGroup::nb_streams
unsigned int nb_streams
Number of elements in AVStreamGroup.streams.
Definition: avformat.h:1202
AV_OPT_TYPE_INT
@ AV_OPT_TYPE_INT
Underlying C type is int.
Definition: opt.h:258
avformat_free_context
void avformat_free_context(AVFormatContext *s)
Free an AVFormatContext and all its streams.
Definition: avformat.c:148
stream_options
static const AVOption stream_options[]
Definition: options.c:220
FFStream::parse_pkt
AVPacket * parse_pkt
The generic code uses this as a temporary packet to parse packets or for muxing, especially flushing.
Definition: internal.h:330
FFStream::info
struct FFStreamInfo * info
Stream information used internally by avformat_find_stream_info()
Definition: internal.h:182
io_open_default
static int io_open_default(AVFormatContext *s, AVIOContext **pb, const char *url, int flags, AVDictionary **options)
Definition: options.c:141
FF_DISABLE_DEPRECATION_WARNINGS
#define FF_DISABLE_DEPRECATION_WARNINGS
Definition: internal.h:66
AV_OPT_FLAG_DECODING_PARAM
#define AV_OPT_FLAG_DECODING_PARAM
A generic parameter which can be set by the user for demuxing or decoding.
Definition: opt.h:355
mem.h
AVStreamGroup::type
enum AVStreamGroupParamsType type
Group type.
Definition: avformat.h:1167
AVOption::unit
const char * unit
The logical unit to which the option belongs.
Definition: opt.h:478
FFFormatContext::pkt
AVPacket * pkt
Used to hold temporary packets for the generic demuxing code.
Definition: internal.h:111
avformat_stream_group_create
AVStreamGroup * avformat_stream_group_create(AVFormatContext *s, enum AVStreamGroupParamsType type, AVDictionary **options)
Add a new empty stream group to a media file.
Definition: options.c:469
codec_par.h
FFStream::cur_dts
int64_t cur_dts
Definition: internal.h:353
FFStream::need_context_update
int need_context_update
Whether the internal avctx needs to be updated from codecpar (after a late change to codecpar)
Definition: internal.h:173
avio_close
int avio_close(AVIOContext *s)
Close the resource accessed by the AVIOContext s and free it.
Definition: avio.c:622
options_table.h
av_log
#define av_log(a,...)
Definition: tableprint_vlc.h:27
FFStream::fmtctx
AVFormatContext * fmtctx
Definition: internal.h:134
tile_grid_options
static const AVOption tile_grid_options[]
Definition: options.c:331
FFStreamGroup
Definition: avformat_internal.h:121
AVStream::start_time
int64_t start_time
Decoding: pts of the first frame of the stream in presentation order, in stream time base.
Definition: avformat.h:796
width
#define width
Definition: dsp.h:89
av_stream_get_class
const AVClass * av_stream_get_class(void)
Get the AVClass for AVStream.
Definition: options.c:241
AVDISCARD_NONREF
@ AVDISCARD_NONREF
discard all non reference
Definition: defs.h:228
FFFormatContext::pub
AVFormatContext pub
The public context.
Definition: internal.h:68
AV_OPT_TYPE_CONST
@ AV_OPT_TYPE_CONST
Special option type for declaring named constants.
Definition: opt.h:298
option_is_disposition
static int option_is_disposition(const AVOption *opt)
Definition: options.c:572
FFStream::pts_wrap_reference
int64_t pts_wrap_reference
Internal data to check for wrapping of the time stamp.
Definition: internal.h:255
AVInputFormat::priv_class
const AVClass * priv_class
AVClass for the private context.
Definition: avformat.h:577
AVStreamGroupLayeredVideo::av_class
const AVClass * av_class
Definition: avformat.h:1075
MAX_REORDER_DELAY
#define MAX_REORDER_DELAY
Definition: hw_base_encode.h:28
cffstreamgroup
static const av_always_inline FFStreamGroup * cffstreamgroup(const AVStreamGroup *stg)
Definition: avformat_internal.h:135
av_format_context_class
static const AVClass av_format_context_class
Definition: options.c:130
intmath.h