FFmpeg
Loading...
Searching...
No Matches
ffprobe.c
Go to the documentation of this file.
1/*
2 * Copyright (c) 2007-2010 Stefano Sabatini
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
21/**
22 * @file
23 * simple media prober based on the FFmpeg libraries
24 */
25
26#include "config.h"
27#include "libavutil/ffversion.h"
28
29#include <string.h>
30#include <math.h>
31
33#include "libavformat/version.h"
34#include "libavcodec/avcodec.h"
35#include "libavcodec/version.h"
37#include "libavutil/avassert.h"
38#include "libavutil/avstring.h"
39#include "libavutil/avutil.h"
40#include "libavutil/bprint.h"
43#include "libavutil/display.h"
46#include "libavutil/iamf.h"
49#include "libavutil/dovi_meta.h"
50#include "libavutil/mem.h"
51#include "libavutil/opt.h"
52#include "libavutil/pixdesc.h"
53#include "libavutil/spherical.h"
54#include "libavutil/stereo3d.h"
55#include "libavutil/dict.h"
59#include "libavutil/timecode.h"
60#include "libavutil/timestamp.h"
62#include "libavdevice/version.h"
63#include "libswscale/swscale.h"
64#include "libswscale/version.h"
67#include "libavfilter/version.h"
69#include "cmdutils.h"
70#include "opt_common.h"
71
72#include "libavutil/thread.h"
73
74// attached as opaque_ref to packets/frames
75typedef struct FrameData {
78} FrameData;
79
80typedef struct InputStream {
81 AVStream *st;
82
85
86typedef struct InputFile {
88
90 int nb_streams;
91} InputFile;
92
93const char program_name[] = "ffprobe";
94const int program_birth_year = 2007;
95
96static int do_analyze_frames = 0;
97static int do_bitexact = 0;
98static int do_count_frames = 0;
99static int do_count_packets = 0;
100static int do_read_frames = 0;
101static int do_read_packets = 0;
102static int do_show_chapters = 0;
103static int do_show_error = 0;
104static int do_show_format = 0;
105static int do_show_frames = 0;
106static int do_show_packets = 0;
107static int do_show_programs = 0;
110static int do_show_streams = 0;
113static int do_show_data = 0;
119static int do_show_log = 0;
120
121static int do_show_chapter_tags = 0;
122static int do_show_format_tags = 0;
123static int do_show_frame_tags = 0;
124static int do_show_program_tags = 0;
126static int do_show_stream_tags = 0;
127static int do_show_packet_tags = 0;
128
129static int show_value_unit = 0;
130static int use_value_prefix = 0;
133static int show_private_data = 1;
134
135static const char *audio_codec_name = NULL;
136static const char *data_codec_name = NULL;
137static const char *subtitle_codec_name = NULL;
138static const char *video_codec_name = NULL;
139
140#define SHOW_OPTIONAL_FIELDS_AUTO -1
141#define SHOW_OPTIONAL_FIELDS_NEVER 0
142#define SHOW_OPTIONAL_FIELDS_ALWAYS 1
144
145static char *output_format;
146static char *stream_specifier;
147static char *show_data_hash;
148static char *data_dump_format;
149
150typedef struct ReadInterval {
151 int id; ///< identifier
152 int64_t start, end; ///< start, end in second/AV_TIME_BASE units
157
159static int read_intervals_nb = 0;
160
161static int find_stream_info = 1;
162
163/* section structure definition */
164
165typedef enum {
234} SectionID;
235
236static const char *get_packet_side_data_type(const void *data)
237{
238 const AVPacketSideData *sd = (const AVPacketSideData *)data;
239 return av_x_if_null(av_packet_side_data_name(sd->type), "unknown");
240}
241
242static const char *get_frame_side_data_type(const void *data)
243{
244 const AVFrameSideData *sd = (const AVFrameSideData *)data;
245 return av_x_if_null(av_frame_side_data_name(sd->type), "unknown");
246}
247
248static const char *get_raw_string_type(const void *data)
249{
250 return data;
251}
252
253static const char *get_stream_group_type(const void *data)
254{
255 const AVStreamGroup *stg = (const AVStreamGroup *)data;
256 return av_x_if_null(avformat_stream_group_name(stg->type), "unknown");
257}
258
262 [SECTION_ID_CHAPTER_TAGS] = { SECTION_ID_CHAPTER_TAGS, "tags", AV_TEXTFORMAT_SECTION_FLAG_HAS_VARIABLE_FIELDS, { -1 }, .element_name = "tag", .unique_name = "chapter_tags" },
263 [SECTION_ID_ERROR] = { SECTION_ID_ERROR, "error", 0, { -1 } },
264 [SECTION_ID_FORMAT] = { SECTION_ID_FORMAT, "format", 0, { SECTION_ID_FORMAT_TAGS, -1 } },
265 [SECTION_ID_FORMAT_TAGS] = { SECTION_ID_FORMAT_TAGS, "tags", AV_TEXTFORMAT_SECTION_FLAG_HAS_VARIABLE_FIELDS, { -1 }, .element_name = "tag", .unique_name = "format_tags" },
268 [SECTION_ID_FRAME_TAGS] = { SECTION_ID_FRAME_TAGS, "tags", AV_TEXTFORMAT_SECTION_FLAG_HAS_VARIABLE_FIELDS, { -1 }, .element_name = "tag", .unique_name = "frame_tags" },
269 [SECTION_ID_FRAME_SIDE_DATA_LIST] ={ SECTION_ID_FRAME_SIDE_DATA_LIST, "side_data_list", AV_TEXTFORMAT_SECTION_FLAG_IS_ARRAY, { SECTION_ID_FRAME_SIDE_DATA, -1 }, .element_name = "side_data", .unique_name = "frame_side_data_list" },
273 [SECTION_ID_FRAME_SIDE_DATA_COMPONENT_LIST] = { SECTION_ID_FRAME_SIDE_DATA_COMPONENT_LIST, "components", AV_TEXTFORMAT_SECTION_FLAG_IS_ARRAY, { SECTION_ID_FRAME_SIDE_DATA_COMPONENT, -1 }, .element_name = "component", .unique_name = "frame_side_data_components" },
275 [SECTION_ID_FRAME_SIDE_DATA_PIECE_LIST] = { SECTION_ID_FRAME_SIDE_DATA_PIECE_LIST, "pieces", AV_TEXTFORMAT_SECTION_FLAG_IS_ARRAY, { SECTION_ID_FRAME_SIDE_DATA_PIECE, -1 }, .element_name = "piece", .unique_name = "frame_side_data_pieces" },
276 [SECTION_ID_FRAME_SIDE_DATA_PIECE] = { SECTION_ID_FRAME_SIDE_DATA_PIECE, "piece", AV_TEXTFORMAT_SECTION_FLAG_HAS_VARIABLE_FIELDS|AV_TEXTFORMAT_SECTION_FLAG_HAS_TYPE, { -1 }, .element_name = "piece_entry", .unique_name = "frame_side_data_piece", .get_type = get_raw_string_type },
278 [SECTION_ID_FRAME_LOG] = { SECTION_ID_FRAME_LOG, "log", 0, { -1 }, },
280 [SECTION_ID_LIBRARY_VERSION] = { SECTION_ID_LIBRARY_VERSION, "library_version", 0, { -1 } },
284 [SECTION_ID_PACKET_TAGS] = { SECTION_ID_PACKET_TAGS, "tags", AV_TEXTFORMAT_SECTION_FLAG_HAS_VARIABLE_FIELDS, { -1 }, .element_name = "tag", .unique_name = "packet_tags" },
285 [SECTION_ID_PACKET_SIDE_DATA_LIST] ={ SECTION_ID_PACKET_SIDE_DATA_LIST, "side_data_list", AV_TEXTFORMAT_SECTION_FLAG_IS_ARRAY, { SECTION_ID_PACKET_SIDE_DATA, -1 }, .element_name = "side_data", .unique_name = "packet_side_data_list" },
286 [SECTION_ID_PACKET_SIDE_DATA] = { SECTION_ID_PACKET_SIDE_DATA, "side_data", AV_TEXTFORMAT_SECTION_FLAG_HAS_VARIABLE_FIELDS|AV_TEXTFORMAT_SECTION_FLAG_HAS_TYPE, { -1 }, .unique_name = "packet_side_data", .element_name = "side_datum", .get_type = get_packet_side_data_type },
289 [SECTION_ID_PIXEL_FORMAT_FLAGS] = { SECTION_ID_PIXEL_FORMAT_FLAGS, "flags", 0, { -1 }, .unique_name = "pixel_format_flags" },
292 [SECTION_ID_PROGRAM_STREAM_DISPOSITION] = { SECTION_ID_PROGRAM_STREAM_DISPOSITION, "disposition", 0, { -1 }, .unique_name = "program_stream_disposition" },
293 [SECTION_ID_PROGRAM_STREAM_TAGS] = { SECTION_ID_PROGRAM_STREAM_TAGS, "tags", AV_TEXTFORMAT_SECTION_FLAG_HAS_VARIABLE_FIELDS, { -1 }, .element_name = "tag", .unique_name = "program_stream_tags" },
297 [SECTION_ID_PROGRAM_TAGS] = { SECTION_ID_PROGRAM_TAGS, "tags", AV_TEXTFORMAT_SECTION_FLAG_HAS_VARIABLE_FIELDS, { -1 }, .element_name = "tag", .unique_name = "program_tags" },
298 [SECTION_ID_PROGRAM_VERSION] = { SECTION_ID_PROGRAM_VERSION, "program_version", 0, { -1 } },
300 [SECTION_ID_STREAM_GROUP_STREAM_DISPOSITION] = { SECTION_ID_STREAM_GROUP_STREAM_DISPOSITION, "disposition", 0, { -1 }, .unique_name = "stream_group_stream_disposition" },
301 [SECTION_ID_STREAM_GROUP_STREAM_TAGS] = { SECTION_ID_STREAM_GROUP_STREAM_TAGS, "tags", AV_TEXTFORMAT_SECTION_FLAG_HAS_VARIABLE_FIELDS, { -1 }, .element_name = "tag", .unique_name = "stream_group_stream_tags" },
303 [SECTION_ID_STREAM_GROUP_COMPONENTS] = { SECTION_ID_STREAM_GROUP_COMPONENTS, "components", AV_TEXTFORMAT_SECTION_FLAG_IS_ARRAY, { SECTION_ID_STREAM_GROUP_COMPONENT, -1 }, .element_name = "component", .unique_name = "stream_group_components" },
307 [SECTION_ID_STREAM_GROUP_PIECES] = { SECTION_ID_STREAM_GROUP_PIECES, "pieces", AV_TEXTFORMAT_SECTION_FLAG_IS_ARRAY, { SECTION_ID_STREAM_GROUP_PIECE, -1 }, .element_name = "piece", .unique_name = "stream_group_pieces" },
313 [SECTION_ID_STREAM_GROUP_SIDE_DATA_LIST] = { SECTION_ID_STREAM_GROUP_SIDE_DATA_LIST, "side_data_list", AV_TEXTFORMAT_SECTION_FLAG_IS_ARRAY, { SECTION_ID_STREAM_GROUP_SIDE_DATA, -1 }, .element_name = "side_data", .unique_name = "stream_group_side_data_list" },
314 [SECTION_ID_STREAM_GROUP_SIDE_DATA] = { SECTION_ID_STREAM_GROUP_SIDE_DATA, "side_data", AV_TEXTFORMAT_SECTION_FLAG_HAS_TYPE|AV_TEXTFORMAT_SECTION_FLAG_HAS_VARIABLE_FIELDS, { -1 }, .unique_name = "stream_group_side_data", .element_name = "side_datum", .get_type = get_packet_side_data_type },
317 [SECTION_ID_STREAM_GROUP_DISPOSITION] = { SECTION_ID_STREAM_GROUP_DISPOSITION, "disposition", 0, { -1 }, .unique_name = "stream_group_disposition" },
318 [SECTION_ID_STREAM_GROUP_TAGS] = { SECTION_ID_STREAM_GROUP_TAGS, "tags", AV_TEXTFORMAT_SECTION_FLAG_HAS_VARIABLE_FIELDS, { -1 }, .element_name = "tag", .unique_name = "stream_group_tags" },
326 [SECTION_ID_STREAM_DISPOSITION] = { SECTION_ID_STREAM_DISPOSITION, "disposition", 0, { -1 }, .unique_name = "stream_disposition" },
327 [SECTION_ID_STREAM_TAGS] = { SECTION_ID_STREAM_TAGS, "tags", AV_TEXTFORMAT_SECTION_FLAG_HAS_VARIABLE_FIELDS, { -1 }, .element_name = "tag", .unique_name = "stream_tags" },
328 [SECTION_ID_STREAM_SIDE_DATA_LIST] ={ SECTION_ID_STREAM_SIDE_DATA_LIST, "side_data_list", AV_TEXTFORMAT_SECTION_FLAG_IS_ARRAY, { SECTION_ID_STREAM_SIDE_DATA, -1 }, .element_name = "side_data", .unique_name = "stream_side_data_list" },
329 [SECTION_ID_STREAM_SIDE_DATA] = { SECTION_ID_STREAM_SIDE_DATA, "side_data", AV_TEXTFORMAT_SECTION_FLAG_HAS_TYPE|AV_TEXTFORMAT_SECTION_FLAG_HAS_VARIABLE_FIELDS, { -1 }, .unique_name = "stream_side_data", .element_name = "side_datum", .get_type = get_packet_side_data_type },
330 [SECTION_ID_SUBTITLE] = { SECTION_ID_SUBTITLE, "subtitle", 0, { -1 } },
331};
332
333typedef struct EntrySelection {
335 int explicitly_selected; ///< Selected by unique name or through a selected parent.
338
340
341static const OptionDef *options;
342
343/* FFprobe context */
344static const char *input_filename;
345static const char *print_input_filename;
346static const AVInputFormat *iformat = NULL;
347static const char *output_filename = NULL;
348
349static const char unit_hertz_str[] = "Hz" ;
350static const char unit_byte_str[] = "byte" ;
351static const char unit_bit_per_second_str[] = "bit/s";
352
353static unsigned int nb_streams;
354static uint64_t *nb_streams_packets;
355static uint64_t *nb_streams_frames;
359
361
370
373
375{
376 const AVTextFormatSection *section = tctx->section[tctx->level];
377 const EntrySelection *selection = &selected_entries[section - sections];
378
379 return selection->show_all_entries || av_dict_get(selection->entries_to_show, key, NULL, 0);
380}
381
382static void log_callback(void *ptr, int level, const char *fmt, va_list vl)
383{
384 AVClass* avc = ptr ? *(AVClass **) ptr : NULL;
385 va_list vl2;
386 char line[1024];
387 static int print_prefix = 1;
388 void *new_log_buffer;
389
390 va_copy(vl2, vl);
391 av_log_default_callback(ptr, level, fmt, vl);
392 av_log_format_line(ptr, level, fmt, vl2, line, sizeof(line), &print_prefix);
393 va_end(vl2);
394
395#if HAVE_THREADS
397
398 new_log_buffer = av_realloc_array(log_buffer, log_buffer_size + 1, sizeof(*log_buffer));
399 if (new_log_buffer) {
400 char *msg;
401 int i;
402
403 log_buffer = new_log_buffer;
405 log_buffer[log_buffer_size].context_name= avc ? av_strdup(avc->item_name(ptr)) : NULL;
406 if (avc) {
407 if (avc->get_category) log_buffer[log_buffer_size].category = avc->get_category(ptr);
408 else log_buffer[log_buffer_size].category = avc->category;
409 }
410 log_buffer[log_buffer_size].log_level = level;
411 msg = log_buffer[log_buffer_size].log_message = av_strdup(line);
412 for (i=strlen(msg) - 1; i>=0 && msg[i] == '\n'; i--) {
413 msg[i] = 0;
414 }
415 if (avc && avc->parent_log_context_offset) {
416 AVClass** parent = *(AVClass ***) (((uint8_t *) ptr) +
418 if (parent && *parent) {
419 log_buffer[log_buffer_size].parent_name = av_strdup((*parent)->item_name(parent));
420 log_buffer[log_buffer_size].parent_category =
421 (*parent)->get_category ? (*parent)->get_category(parent) :(*parent)->category;
422 }
423 }
425 }
426
428#endif
429}
430
431
432#define print_fmt(k, f, ...) do { \
433 av_bprint_clear(&pbuf); \
434 av_bprintf(&pbuf, f, __VA_ARGS__); \
435 avtext_print_string(tfc, k, pbuf.str, 0); \
436} while (0)
437
438#define print_list_fmt(k, f, n, m, ...) do { \
439 av_bprint_clear(&pbuf); \
440 for (unsigned int idx = 0; idx < n; idx++) { \
441 for (unsigned int idx2 = 0; idx2 < m; idx2++) { \
442 if (idx > 0 || idx2 > 0) \
443 av_bprint_chars(&pbuf, ' ', 1); \
444 av_bprintf(&pbuf, f, __VA_ARGS__); \
445 } \
446 } \
447 avtext_print_string(tfc, k, pbuf.str, 0); \
448} while (0)
449
450#define print_int(k, v) avtext_print_integer(tfc, k, v, 0)
451#define print_int_opt(k, v) avtext_print_integer(tfc, k, v, AV_TEXTFORMAT_PRINT_STRING_OPTIONAL)
452#define print_q(k, v, s) avtext_print_rational(tfc, k, v, s)
453#define print_str(k, v) avtext_print_string(tfc, k, v, 0)
454#define print_str_opt(k, v) avtext_print_string(tfc, k, v, AV_TEXTFORMAT_PRINT_STRING_OPTIONAL)
455#define print_str_validate(k, v) avtext_print_string(tfc, k, v, AV_TEXTFORMAT_PRINT_STRING_VALIDATE)
456#define print_time(k, v, tb) avtext_print_time(tfc, k, v, tb, 0)
457#define print_ts(k, v) avtext_print_ts(tfc, k, v, 0)
458#define print_duration_time(k, v, tb) avtext_print_time(tfc, k, v, tb, 1)
459#define print_duration_ts(k, v) avtext_print_ts(tfc, k, v, 1)
460#define print_val(k, v, u) avtext_print_unit_integer(tfc, k, v, AV_TEXTFORMAT_VALUE_FMT_INT, u)
461#define print_int_fmt(k, v, f, u) avtext_print_unit_integer(tfc, k, v, f, u)
462#define print_decibel(k, v) avtext_print_unit_double(tfc, k, v, AV_TEXTFORMAT_VALUE_FMT_DECIBEL, 0)
463
464static void print_integers(AVTextFormatContext *tfc, const char *key,
465 const void *data, int size, const char *format,
466 int columns, int bytes, int offset_add)
467{
468 AVBPrint bp;
469 unsigned offset = 0;
470
472 av_bprint_chars(&bp, '\n', 1);
473 while (size) {
474 av_bprintf(&bp, "%08x: ", offset);
475 for (int i = 0, l = FFMIN(size, columns); i < l; i++) {
476 if (bytes == 1) av_bprintf(&bp, format, *(const uint8_t*)data);
477 else if (bytes == 2) av_bprintf(&bp, format, AV_RN16(data));
478 else if (bytes == 4) av_bprintf(&bp, format, AV_RN32(data));
479 data = (const char*)data + bytes;
480 size--;
481 }
482 av_bprint_chars(&bp, '\n', 1);
483 offset += offset_add;
484 }
485 avtext_print_string(tfc, key, bp.str, 0);
486}
487
488#define REALLOCZ_ARRAY_STREAM(ptr, cur_n, new_n) \
489{ \
490 ret = av_reallocp_array(&(ptr), (new_n), sizeof(*(ptr))); \
491 if (ret < 0) \
492 goto end; \
493 memset( (ptr) + (cur_n), 0, ((new_n) - (cur_n)) * sizeof(*(ptr)) ); \
494}
495
496static inline int show_tags(AVTextFormatContext *tfc, AVDictionary *tags, int section_id)
497{
498 const AVDictionaryEntry *tag = NULL;
499 int ret = 0;
500
501 if (!tags)
502 return 0;
503 avtext_print_section_header(tfc, NULL, section_id);
504
505 while ((tag = av_dict_iterate(tags, tag))) {
506 if ((ret = print_str_validate(tag->key, tag->value)) < 0)
507 break;
508 }
510
511 return ret;
512}
513
515 const AVDownmixInfo *downmix_info)
516{
517 switch (downmix_info->preferred_downmix_type) {
519 print_str("preferred_downmix_type", "loro");
520 break;
522 print_str("preferred_downmix_type", "ltrt");
523 break;
525 print_str("preferred_downmix_type", "dplII");
526 break;
527 default:
528 print_str("preferred_downmix_type", "unknown");
529 break;
530 }
531 print_decibel("center_mix_level_db", downmix_info->center_mix_level);
532 print_decibel("center_mix_level_ltrt_db", downmix_info->center_mix_level_ltrt);
533 print_decibel("surround_mix_level_db", downmix_info->surround_mix_level);
534 print_decibel("surround_mix_level_ltrt_db", downmix_info->surround_mix_level_ltrt);
535 print_decibel("lfe_mix_level_db", downmix_info->lfe_mix_level);
536}
537
539{
540 double rotation = av_display_rotation_get(matrix);
541 if (isnan(rotation))
542 rotation = 0;
543 print_integers(tfc, "displaymatrix", matrix, 9, " %11d", 3, 4, 1);
544 print_int("rotation", rotation);
545}
546
549{
550 if (metadata->has_primaries) {
551 print_q("red_x", metadata->display_primaries[0][0], '/');
552 print_q("red_y", metadata->display_primaries[0][1], '/');
553 print_q("green_x", metadata->display_primaries[1][0], '/');
554 print_q("green_y", metadata->display_primaries[1][1], '/');
555 print_q("blue_x", metadata->display_primaries[2][0], '/');
556 print_q("blue_y", metadata->display_primaries[2][1], '/');
557
558 print_q("white_point_x", metadata->white_point[0], '/');
559 print_q("white_point_y", metadata->white_point[1], '/');
560 }
561
562 if (metadata->has_luminance) {
563 print_q("min_luminance", metadata->min_luminance, '/');
564 print_q("max_luminance", metadata->max_luminance, '/');
565 }
566}
567
570{
571 print_int("max_content", metadata->MaxCLL);
572 print_int("max_average", metadata->MaxFALL);
573}
574
576{
577 if (!dovi)
578 return;
579
580 {
581 const AVDOVIRpuDataHeader *hdr = av_dovi_get_header(dovi);
582 const AVDOVIDataMapping *mapping = av_dovi_get_mapping(dovi);
584 AVBPrint pbuf;
585
587
588 // header
589 print_int("rpu_type", hdr->rpu_type);
590 print_int("rpu_format", hdr->rpu_format);
591 print_int("vdr_rpu_profile", hdr->vdr_rpu_profile);
592 print_int("vdr_rpu_level", hdr->vdr_rpu_level);
593 print_int("chroma_resampling_explicit_filter_flag",
595 print_int("coef_data_type", hdr->coef_data_type);
596 print_int("coef_log2_denom", hdr->coef_log2_denom);
597 print_int("vdr_rpu_normalized_idc", hdr->vdr_rpu_normalized_idc);
598 print_int("bl_video_full_range_flag", hdr->bl_video_full_range_flag);
599 print_int("bl_bit_depth", hdr->bl_bit_depth);
600 print_int("el_bit_depth", hdr->el_bit_depth);
601 print_int("vdr_bit_depth", hdr->vdr_bit_depth);
602 print_int("spatial_resampling_filter_flag",
604 print_int("el_spatial_resampling_filter_flag",
606 print_int("disable_residual_flag", hdr->disable_residual_flag);
607
608 // data mapping values
609 print_int("vdr_rpu_id", mapping->vdr_rpu_id);
610 print_int("mapping_color_space", mapping->mapping_color_space);
611 print_int("mapping_chroma_format_idc",
613
614 print_int("nlq_method_idc", mapping->nlq_method_idc);
615 switch (mapping->nlq_method_idc) {
616 case AV_DOVI_NLQ_NONE:
617 print_str("nlq_method_idc_name", "none");
618 break;
620 print_str("nlq_method_idc_name", "linear_dz");
621 break;
622 default:
623 print_str("nlq_method_idc_name", "unknown");
624 break;
625 }
626
627 print_int("num_x_partitions", mapping->num_x_partitions);
628 print_int("num_y_partitions", mapping->num_y_partitions);
629
631
632 for (int c = 0; c < 3; c++) {
633 const AVDOVIReshapingCurve *curve = &mapping->curves[c];
635
636 print_list_fmt("pivots", "%"PRIu16, curve->num_pivots, 1, curve->pivots[idx]);
637
639 for (int i = 0; i < curve->num_pivots - 1; i++) {
640 AVBPrint piece_buf;
641
643 switch (curve->mapping_idc[i]) {
645 av_bprintf(&piece_buf, "Polynomial");
646 break;
648 av_bprintf(&piece_buf, "MMR");
649 break;
650 default:
651 av_bprintf(&piece_buf, "Unknown");
652 break;
653 }
654 av_bprintf(&piece_buf, " mapping");
655
657 print_int("mapping_idc", curve->mapping_idc[i]);
658 switch (curve->mapping_idc[i]) {
660 print_str("mapping_idc_name", "polynomial");
661 print_int("poly_order", curve->poly_order[i]);
662 print_list_fmt("poly_coef", "%"PRIi64,
663 curve->poly_order[i] + 1, 1,
664 curve->poly_coef[i][idx]);
665 break;
667 print_str("mapping_idc_name", "mmr");
668 print_int("mmr_order", curve->mmr_order[i]);
669 print_int("mmr_constant", curve->mmr_constant[i]);
670 print_list_fmt("mmr_coef", "%"PRIi64,
671 curve->mmr_order[i], 7,
672 curve->mmr_coef[i][idx][idx2]);
673 break;
674 default:
675 print_str("mapping_idc_name", "unknown");
676 break;
677 }
678
679 // SECTION_ID_FRAME_SIDE_DATA_PIECE
681 }
682
683 // SECTION_ID_FRAME_SIDE_DATA_PIECE_LIST
685
686 if (mapping->nlq_method_idc != AV_DOVI_NLQ_NONE) {
687 const AVDOVINLQParams *nlq = &mapping->nlq[c];
688 print_int("nlq_offset", nlq->nlq_offset);
689 print_int("vdr_in_max", nlq->vdr_in_max);
690
691 switch (mapping->nlq_method_idc) {
693 print_int("linear_deadzone_slope", nlq->linear_deadzone_slope);
694 print_int("linear_deadzone_threshold", nlq->linear_deadzone_threshold);
695 break;
696 }
697 }
698
699 // SECTION_ID_FRAME_SIDE_DATA_COMPONENT
701 }
702
703 // SECTION_ID_FRAME_SIDE_DATA_COMPONENT_LIST
705
706 // color metadata
707 print_int("dm_metadata_id", color->dm_metadata_id);
708 print_int("scene_refresh_flag", color->scene_refresh_flag);
709 print_list_fmt("ycc_to_rgb_matrix", "%d/%d",
710 FF_ARRAY_ELEMS(color->ycc_to_rgb_matrix), 1,
711 color->ycc_to_rgb_matrix[idx].num,
712 color->ycc_to_rgb_matrix[idx].den);
713 print_list_fmt("ycc_to_rgb_offset", "%d/%d",
714 FF_ARRAY_ELEMS(color->ycc_to_rgb_offset), 1,
715 color->ycc_to_rgb_offset[idx].num,
716 color->ycc_to_rgb_offset[idx].den);
717 print_list_fmt("rgb_to_lms_matrix", "%d/%d",
718 FF_ARRAY_ELEMS(color->rgb_to_lms_matrix), 1,
719 color->rgb_to_lms_matrix[idx].num,
720 color->rgb_to_lms_matrix[idx].den);
721 print_int("signal_eotf", color->signal_eotf);
722 print_int("signal_eotf_param0", color->signal_eotf_param0);
723 print_int("signal_eotf_param1", color->signal_eotf_param1);
724 print_int("signal_eotf_param2", color->signal_eotf_param2);
725 print_int("signal_bit_depth", color->signal_bit_depth);
726 print_int("signal_color_space", color->signal_color_space);
727 print_int("signal_chroma_format", color->signal_chroma_format);
728 print_int("signal_full_range_flag", color->signal_full_range_flag);
729 print_int("source_min_pq", color->source_min_pq);
730 print_int("source_max_pq", color->source_max_pq);
731 print_int("source_diagonal", color->source_diagonal);
732
733 av_bprint_finalize(&pbuf, NULL);
734 }
735}
736
738{
739 if (!metadata)
740 return;
741 print_int("application version", metadata->application_version);
742 print_int("num_windows", metadata->num_windows);
743 for (int n = 1; n < metadata->num_windows; n++) {
744 const AVHDRPlusColorTransformParams *params = &metadata->params[n];
745 print_q("window_upper_left_corner_x",
746 params->window_upper_left_corner_x,'/');
747 print_q("window_upper_left_corner_y",
748 params->window_upper_left_corner_y,'/');
749 print_q("window_lower_right_corner_x",
750 params->window_lower_right_corner_x,'/');
751 print_q("window_lower_right_corner_y",
752 params->window_lower_right_corner_y,'/');
753 print_int("center_of_ellipse_x",
754 params->center_of_ellipse_x ) ;
755 print_int("center_of_ellipse_y",
756 params->center_of_ellipse_y );
757 print_int("rotation_angle",
758 params->rotation_angle);
759 print_int("semimajor_axis_internal_ellipse",
760 params->semimajor_axis_internal_ellipse);
761 print_int("semimajor_axis_external_ellipse",
762 params->semimajor_axis_external_ellipse);
763 print_int("semiminor_axis_external_ellipse",
764 params->semiminor_axis_external_ellipse);
765 print_int("overlap_process_option",
766 params->overlap_process_option);
767 }
768 print_q("targeted_system_display_maximum_luminance",
769 metadata->targeted_system_display_maximum_luminance,'/');
770 if (metadata->targeted_system_display_actual_peak_luminance_flag) {
771 print_int("num_rows_targeted_system_display_actual_peak_luminance",
772 metadata->num_rows_targeted_system_display_actual_peak_luminance);
773 print_int("num_cols_targeted_system_display_actual_peak_luminance",
774 metadata->num_cols_targeted_system_display_actual_peak_luminance);
775 for (int i = 0; i < metadata->num_rows_targeted_system_display_actual_peak_luminance; i++) {
776 for (int j = 0; j < metadata->num_cols_targeted_system_display_actual_peak_luminance; j++) {
777 print_q("targeted_system_display_actual_peak_luminance",
778 metadata->targeted_system_display_actual_peak_luminance[i][j],'/');
779 }
780 }
781 }
782 for (int n = 0; n < metadata->num_windows; n++) {
783 const AVHDRPlusColorTransformParams *params = &metadata->params[n];
784 for (int i = 0; i < 3; i++) {
785 print_q("maxscl",params->maxscl[i],'/');
786 }
787 print_q("average_maxrgb",
788 params->average_maxrgb,'/');
789 print_int("num_distribution_maxrgb_percentiles",
790 params->num_distribution_maxrgb_percentiles);
791 for (int i = 0; i < params->num_distribution_maxrgb_percentiles; i++) {
792 print_int("distribution_maxrgb_percentage",
793 params->distribution_maxrgb[i].percentage);
794 print_q("distribution_maxrgb_percentile",
795 params->distribution_maxrgb[i].percentile,'/');
796 }
797 print_q("fraction_bright_pixels",
798 params->fraction_bright_pixels,'/');
799 }
800 if (metadata->mastering_display_actual_peak_luminance_flag) {
801 print_int("num_rows_mastering_display_actual_peak_luminance",
802 metadata->num_rows_mastering_display_actual_peak_luminance);
803 print_int("num_cols_mastering_display_actual_peak_luminance",
804 metadata->num_cols_mastering_display_actual_peak_luminance);
805 for (int i = 0; i < metadata->num_rows_mastering_display_actual_peak_luminance; i++) {
806 for (int j = 0; j < metadata->num_cols_mastering_display_actual_peak_luminance; j++) {
807 print_q("mastering_display_actual_peak_luminance",
808 metadata->mastering_display_actual_peak_luminance[i][j],'/');
809 }
810 }
811 }
812
813 for (int n = 0; n < metadata->num_windows; n++) {
814 const AVHDRPlusColorTransformParams *params = &metadata->params[n];
815 if (params->tone_mapping_flag) {
816 print_q("knee_point_x", params->knee_point_x,'/');
817 print_q("knee_point_y", params->knee_point_y,'/');
818 print_int("num_bezier_curve_anchors",
819 params->num_bezier_curve_anchors );
820 for (int i = 0; i < params->num_bezier_curve_anchors; i++) {
821 print_q("bezier_curve_anchors",
822 params->bezier_curve_anchors[i],'/');
823 }
824 }
825 if (params->color_saturation_mapping_flag) {
826 print_q("color_saturation_weight",
827 params->color_saturation_weight,'/');
828 }
829 }
830}
831
833{
834 if (!metadata)
835 return;
836 print_int("application_version", metadata->application_version);
837 print_int("minimum_application_version", metadata->minimum_application_version);
838 print_int("has_custom_hdr_reference_white_flag", metadata->has_custom_hdr_reference_white_flag);
839 print_int("has_adaptive_tone_map_flag", metadata->has_adaptive_tone_map_flag);
840
841 if (metadata->has_custom_hdr_reference_white_flag)
842 print_int("hdr_reference_white", metadata->hdr_reference_white);
843
844 if (!metadata->has_adaptive_tone_map_flag)
845 return;
846
847 print_int("baseline_hdr_headroom", metadata->baseline_hdr_headroom);
848 print_int("use_reference_white_tone_mapping_flag", metadata->use_reference_white_tone_mapping_flag);
849
850 if (metadata->use_reference_white_tone_mapping_flag)
851 return;
852
853 print_int("num_alternate_images", metadata->num_alternate_images);
854 print_int("gain_application_space_chromaticities_flag", metadata->gain_application_space_chromaticities_flag);
855 print_int("has_common_component_mix_params_flag", metadata->has_common_component_mix_params_flag);
856 print_int("has_common_curve_params_flag", metadata->has_common_curve_params_flag);
857
858 if (metadata->gain_application_space_chromaticities_flag == 3) {
859 for (int i = 0; i < 8; i++)
860 print_int("gain_application_space_chromaticities", metadata->gain_application_space_chromaticities[i]);
861 }
862
863 for (int a = 0; a < metadata->num_alternate_images; a++) {
864 print_int("alternate_hdr_headroom", metadata->alternate_hdr_headrooms[a]);
865
866 print_int("component_mixing_type", metadata->component_mixing_type[a]);
867 if (metadata->component_mixing_type[a] == 3) {
868 for (int k = 0; k < 6; k++) {
869 print_int("has_component_mixing_coefficient_flag", metadata->has_component_mixing_coefficient_flag[a][k]);
870 if (metadata->has_component_mixing_coefficient_flag[a][k])
871 print_int("component_mixing_coefficient", metadata->component_mixing_coefficient[a][k]);
872 }
873 }
874
875 print_int("gain_curve_num_control_points_minus_1", metadata->gain_curve_num_control_points_minus_1[a]);
876 print_int("gain_curve_use_pchip_slope_flag", metadata->gain_curve_use_pchip_slope_flag[a]);
877 for (int c = 0; c <= metadata->gain_curve_num_control_points_minus_1[a]; c++)
878 print_int("gain_curve_control_point_x", metadata->gain_curve_control_points_x[a][c]);
879 for (int c = 0; c <= metadata->gain_curve_num_control_points_minus_1[a]; c++)
880 print_int("gain_curve_control_point_y", metadata->gain_curve_control_points_y[a][c]);
881 if (!metadata->gain_curve_use_pchip_slope_flag[a]) {
882 for (int c = 0; c <= metadata->gain_curve_num_control_points_minus_1[a]; c++)
883 print_int("gain_curve_control_point_theta", metadata->gain_curve_control_points_theta[a][c]);
884 }
885 }
886}
887
889{
890 if (!metadata)
891 return;
892 print_int("system_start_code", metadata->system_start_code);
893 print_int("num_windows", metadata->num_windows);
894
895 for (int n = 0; n < metadata->num_windows; n++) {
897
898 print_q("minimum_maxrgb", params->minimum_maxrgb, '/');
899 print_q("average_maxrgb", params->average_maxrgb, '/');
900 print_q("variance_maxrgb", params->variance_maxrgb, '/');
901 print_q("maximum_maxrgb", params->maximum_maxrgb, '/');
902 }
903
904 for (int n = 0; n < metadata->num_windows; n++) {
906
907 print_int("tone_mapping_mode_flag", params->tone_mapping_mode_flag);
908 if (params->tone_mapping_mode_flag) {
909 print_int("tone_mapping_param_num", params->tone_mapping_param_num);
910 for (int i = 0; i < params->tone_mapping_param_num; i++) {
911 const AVHDRVividColorToneMappingParams *tm_params = &params->tm_params[i];
912
913 print_q("targeted_system_display_maximum_luminance",
915 print_int("base_enable_flag", tm_params->base_enable_flag);
916 if (tm_params->base_enable_flag) {
917 print_q("base_param_m_p", tm_params->base_param_m_p, '/');
918 print_q("base_param_m_m", tm_params->base_param_m_m, '/');
919 print_q("base_param_m_a", tm_params->base_param_m_a, '/');
920 print_q("base_param_m_b", tm_params->base_param_m_b, '/');
921 print_q("base_param_m_n", tm_params->base_param_m_n, '/');
922
923 print_int("base_param_k1", tm_params->base_param_k1);
924 print_int("base_param_k2", tm_params->base_param_k2);
925 print_int("base_param_k3", tm_params->base_param_k3);
926 print_int("base_param_Delta_enable_mode",
928 print_q("base_param_Delta", tm_params->base_param_Delta, '/');
929 }
930 print_int("3Spline_enable_flag", tm_params->three_Spline_enable_flag);
931 if (tm_params->three_Spline_enable_flag) {
932 print_int("3Spline_num", tm_params->three_Spline_num);
933
934 for (int j = 0; j < tm_params->three_Spline_num; j++) {
935 const AVHDRVivid3SplineParams *three_spline = &tm_params->three_spline[j];
936 print_int("3Spline_TH_mode", three_spline->th_mode);
937 if (three_spline->th_mode == 0 || three_spline->th_mode == 2)
938 print_q("3Spline_TH_enable_MB", three_spline->th_enable_mb, '/');
939 print_q("3Spline_TH_enable", three_spline->th_enable, '/');
940 print_q("3Spline_TH_Delta1", three_spline->th_delta1, '/');
941 print_q("3Spline_TH_Delta2", three_spline->th_delta2, '/');
942 print_q("3Spline_enable_Strength", three_spline->enable_strength, '/');
943 }
944 }
945 }
946 }
947
948 print_int("color_saturation_mapping_flag", params->color_saturation_mapping_flag);
949 if (params->color_saturation_mapping_flag) {
950 print_int("color_saturation_num", params->color_saturation_num);
951 for (int i = 0; i < params->color_saturation_num; i++) {
952 print_q("color_saturation_gain", params->color_saturation_gain[i], '/');
953 }
954 }
955 }
956}
957
960{
961 if (!env)
962 return;
963
964 print_q("ambient_illuminance", env->ambient_illuminance, '/');
965 print_q("ambient_light_x", env->ambient_light_x, '/');
966 print_q("ambient_light_y", env->ambient_light_y, '/');
967}
968
970 const AVFilmGrainParams *fgp)
971{
972 const char *color_range, *color_primaries, *color_trc, *color_space;
973 const char *const film_grain_type_names[] = {
974 [AV_FILM_GRAIN_PARAMS_NONE] = "none",
975 [AV_FILM_GRAIN_PARAMS_AV1] = "av1",
976 [AV_FILM_GRAIN_PARAMS_H274] = "h274",
977 };
978 const char *const component_names[] = { "Y", "Cb", "Cr" };
979
980 AVBPrint pbuf;
981 if (!fgp || fgp->type >= FF_ARRAY_ELEMS(film_grain_type_names))
982 return;
983
986 color_trc = av_color_transfer_name(fgp->color_trc);
987 color_space = av_color_space_name(fgp->color_space);
988
990 print_str("type", film_grain_type_names[fgp->type]);
991 print_fmt("seed", "%"PRIu64, fgp->seed);
992 print_int("width", fgp->width);
993 print_int("height", fgp->height);
994 print_int("subsampling_x", fgp->subsampling_x);
995 print_int("subsampling_y", fgp->subsampling_y);
996 print_str("color_range", color_range ? color_range : "unknown");
997 print_str("color_primaries", color_primaries ? color_primaries : "unknown");
998 print_str("color_trc", color_trc ? color_trc : "unknown");
999 print_str("color_space", color_space ? color_space : "unknown");
1000
1001 switch (fgp->type) {
1003 break;
1005 const AVFilmGrainAOMParams *aom = &fgp->codec.aom;
1006 const int num_ar_coeffs_y = 2 * aom->ar_coeff_lag * (aom->ar_coeff_lag + 1);
1007 const int num_ar_coeffs_uv = num_ar_coeffs_y + !!aom->num_y_points;
1008 print_int("chroma_scaling_from_luma", aom->chroma_scaling_from_luma);
1009 print_int("scaling_shift", aom->scaling_shift);
1010 print_int("ar_coeff_lag", aom->ar_coeff_lag);
1011 print_int("ar_coeff_shift", aom->ar_coeff_shift);
1012 print_int("grain_scale_shift", aom->grain_scale_shift);
1013 print_int("overlap_flag", aom->overlap_flag);
1014 print_int("limit_output_range", aom->limit_output_range);
1015
1017
1018 if (aom->num_y_points) {
1020
1021 print_int("bit_depth_luma", fgp->bit_depth_luma);
1022 print_list_fmt("y_points_value", "%"PRIu8, aom->num_y_points, 1, aom->y_points[idx][0]);
1023 print_list_fmt("y_points_scaling", "%"PRIu8, aom->num_y_points, 1, aom->y_points[idx][1]);
1024 print_list_fmt("ar_coeffs_y", "%"PRId8, num_ar_coeffs_y, 1, aom->ar_coeffs_y[idx]);
1025
1026 // SECTION_ID_FRAME_SIDE_DATA_COMPONENT
1028 }
1029
1030 for (unsigned uv = 0; uv < 2; uv++) {
1031 if (!aom->num_uv_points[uv] && !aom->chroma_scaling_from_luma)
1032 continue;
1033
1035
1036 print_int("bit_depth_chroma", fgp->bit_depth_chroma);
1037 print_list_fmt("uv_points_value", "%"PRIu8, aom->num_uv_points[uv], 1, aom->uv_points[uv][idx][0]);
1038 print_list_fmt("uv_points_scaling", "%"PRIu8, aom->num_uv_points[uv], 1, aom->uv_points[uv][idx][1]);
1039 print_list_fmt("ar_coeffs_uv", "%"PRId8, num_ar_coeffs_uv, 1, aom->ar_coeffs_uv[uv][idx]);
1040 print_int("uv_mult", aom->uv_mult[uv]);
1041 print_int("uv_mult_luma", aom->uv_mult_luma[uv]);
1042 print_int("uv_offset", aom->uv_offset[uv]);
1043
1044 // SECTION_ID_FRAME_SIDE_DATA_COMPONENT
1046 }
1047
1048 // SECTION_ID_FRAME_SIDE_DATA_COMPONENT_LIST
1050 break;
1051 }
1053 const AVFilmGrainH274Params *h274 = &fgp->codec.h274;
1054 print_int("model_id", h274->model_id);
1055 print_int("blending_mode_id", h274->blending_mode_id);
1056 print_int("log2_scale_factor", h274->log2_scale_factor);
1057
1059
1060 for (int c = 0; c < 3; c++) {
1061 if (!h274->component_model_present[c])
1062 continue;
1063
1065 print_int(c ? "bit_depth_chroma" : "bit_depth_luma", c ? fgp->bit_depth_chroma : fgp->bit_depth_luma);
1066
1068 for (int i = 0; i < h274->num_intensity_intervals[c]; i++) {
1069
1071 print_int("intensity_interval_lower_bound", h274->intensity_interval_lower_bound[c][i]);
1072 print_int("intensity_interval_upper_bound", h274->intensity_interval_upper_bound[c][i]);
1073 print_list_fmt("comp_model_value", "%"PRId16, h274->num_model_values[c], 1, h274->comp_model_value[c][i][idx]);
1074
1075 // SECTION_ID_FRAME_SIDE_DATA_PIECE
1077 }
1078
1079 // SECTION_ID_FRAME_SIDE_DATA_PIECE_LIST
1081
1082 // SECTION_ID_FRAME_SIDE_DATA_COMPONENT
1084 }
1085
1086 // SECTION_ID_FRAME_SIDE_DATA_COMPONENT_LIST
1088 break;
1089 }
1090 }
1091
1092 av_bprint_finalize(&pbuf, NULL);
1093}
1094
1096 int width,
1097 int height,
1098 const AVPacketSideData *sd,
1099 SectionID id_data)
1100{
1101 const char *name = av_packet_side_data_name(sd->type);
1102
1103 avtext_print_section_header(tfc, sd, id_data);
1104 print_str("side_data_type", name ? name : "unknown");
1105 if (sd->type == AV_PKT_DATA_DISPLAYMATRIX && sd->size >= 9*4) {
1106 print_displaymatrix(tfc, (const int32_t*)sd->data);
1107 } else if (sd->type == AV_PKT_DATA_STEREO3D) {
1108 const AVStereo3D *stereo = (AVStereo3D *)sd->data;
1109 print_str("type", av_stereo3d_type_name(stereo->type));
1110 print_int("inverted", !!(stereo->flags & AV_STEREO3D_FLAG_INVERT));
1111 print_str("view", av_stereo3d_view_name(stereo->view));
1112 print_str("primary_eye", av_stereo3d_primary_eye_name(stereo->primary_eye));
1113 print_int("baseline", stereo->baseline);
1114 print_q("horizontal_disparity_adjustment", stereo->horizontal_disparity_adjustment, '/');
1115 print_q("horizontal_field_of_view", stereo->horizontal_field_of_view, '/');
1116 } else if (sd->type == AV_PKT_DATA_SPHERICAL) {
1117 const AVSphericalMapping *spherical = (AVSphericalMapping *)sd->data;
1118 print_str("projection", av_spherical_projection_name(spherical->projection));
1119 if (spherical->projection == AV_SPHERICAL_CUBEMAP) {
1120 print_int("padding", spherical->padding);
1121 } else if (spherical->projection == AV_SPHERICAL_EQUIRECTANGULAR_TILE) {
1122 size_t l, t, r, b;
1124 &l, &t, &r, &b);
1125 print_int("bound_left", l);
1126 print_int("bound_top", t);
1127 print_int("bound_right", r);
1128 print_int("bound_bottom", b);
1129 }
1130
1131 print_int("yaw", (double) spherical->yaw / (1 << 16));
1132 print_int("pitch", (double) spherical->pitch / (1 << 16));
1133 print_int("roll", (double) spherical->roll / (1 << 16));
1134 } else if (sd->type == AV_PKT_DATA_SKIP_SAMPLES && sd->size == 10) {
1135 print_int("skip_samples", AV_RL32(sd->data));
1136 print_int("discard_padding", AV_RL32(sd->data + 4));
1137 print_int("skip_reason", AV_RL8(sd->data + 8));
1138 print_int("discard_reason", AV_RL8(sd->data + 9));
1139 } else if (sd->type == AV_PKT_DATA_MASTERING_DISPLAY_METADATA) {
1141 } else if (sd->type == AV_PKT_DATA_CONTENT_LIGHT_LEVEL) {
1145 tfc, (const AVAmbientViewingEnvironment *)sd->data);
1146 } else if (sd->type == AV_PKT_DATA_DYNAMIC_HDR10_PLUS) {
1149 } else if (sd->type == AV_PKT_DATA_DOVI_CONF) {
1151 const char *comp = "unknown";
1152 print_int("dv_version_major", dovi->dv_version_major);
1153 print_int("dv_version_minor", dovi->dv_version_minor);
1154 print_int("dv_profile", dovi->dv_profile);
1155 print_int("dv_level", dovi->dv_level);
1156 print_int("rpu_present_flag", dovi->rpu_present_flag);
1157 print_int("el_present_flag", dovi->el_present_flag);
1158 print_int("bl_present_flag", dovi->bl_present_flag);
1159 print_int("dv_bl_signal_compatibility_id", dovi->dv_bl_signal_compatibility_id);
1160 switch (dovi->dv_md_compression)
1161 {
1162 case AV_DOVI_COMPRESSION_NONE: comp = "none"; break;
1163 case AV_DOVI_COMPRESSION_LIMITED: comp = "limited"; break;
1164 case AV_DOVI_COMPRESSION_RESERVED: comp = "reserved"; break;
1165 case AV_DOVI_COMPRESSION_EXTENDED: comp = "extended"; break;
1166 }
1167 print_str("dv_md_compression", comp);
1168 } else if (sd->type == AV_PKT_DATA_AUDIO_SERVICE_TYPE) {
1169 enum AVAudioServiceType *t = (enum AVAudioServiceType *)sd->data;
1170 print_int("service_type", *t);
1171 } else if (sd->type == AV_PKT_DATA_MPEGTS_STREAM_ID) {
1172 print_int("id", *sd->data);
1173 } else if (sd->type == AV_PKT_DATA_CPB_PROPERTIES) {
1174 const AVCPBProperties *prop = (AVCPBProperties *)sd->data;
1175 print_int("max_bitrate", prop->max_bitrate);
1176 print_int("min_bitrate", prop->min_bitrate);
1177 print_int("avg_bitrate", prop->avg_bitrate);
1178 print_int("buffer_size", prop->buffer_size);
1179 print_int("vbv_delay", prop->vbv_delay);
1180 } else if (sd->type == AV_PKT_DATA_WEBVTT_IDENTIFIER ||
1182 if (do_show_data)
1183 avtext_print_data(tfc, "data", sd->data, sd->size);
1184 avtext_print_data_hash(tfc, "data_hash", sd->data, sd->size);
1185 } else if (sd->type == AV_PKT_DATA_FRAME_CROPPING && sd->size >= sizeof(uint32_t) * 4) {
1186 print_int("crop_top", AV_RL32(sd->data));
1187 print_int("crop_bottom", AV_RL32(sd->data + 4));
1188 print_int("crop_left", AV_RL32(sd->data + 8));
1189 print_int("crop_right", AV_RL32(sd->data + 12));
1190 } else if (sd->type == AV_PKT_DATA_AFD && sd->size > 0) {
1191 print_int("active_format", *sd->data);
1192 } else if (sd->type == AV_PKT_DATA_EXIF) {
1193 print_int("size", sd->size);
1194 } else if (sd->type == AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL && sd->size >= 8) {
1195 print_int("block_additional_id", AV_RB64(sd->data));
1196 if (do_show_data)
1197 avtext_print_data(tfc, "block_additional_data", sd->data + 8, sd->size - 8);
1198 }
1199}
1200
1201static void print_private_data(AVTextFormatContext *tfc, void *priv_data)
1202{
1203 const AVOption *opt = NULL;
1204 while (opt = av_opt_next(priv_data, opt)) {
1205 uint8_t *str;
1206 if (!(opt->flags & AV_OPT_FLAG_EXPORT)) continue;
1207 if (av_opt_get(priv_data, opt->name, 0, &str) >= 0) {
1208 print_str(opt->name, str);
1209 av_free(str);
1210 }
1211 }
1212}
1213
1215{
1216 const char *s = av_get_pix_fmt_name(pix_fmt);
1217 enum AVPixelFormat swapped_pix_fmt;
1218
1219 if (!s) {
1220 print_str_opt("pix_fmt", "unknown");
1221 } else if (!do_bitexact ||
1222 (swapped_pix_fmt = av_pix_fmt_swap_endianness(pix_fmt)) == AV_PIX_FMT_NONE) {
1223 print_str ("pix_fmt", s);
1224 } else {
1225 const char *s2 = av_get_pix_fmt_name(swapped_pix_fmt);
1226 char buf[128];
1227 size_t i = 0;
1228
1229 while (s[i] && s[i] == s2[i] && i < sizeof(buf) - 1) {
1230 buf[i] = s[i];
1231 i++;
1232 }
1233 buf[i] = '\0';
1234
1235 print_str ("pix_fmt", buf);
1236 }
1237}
1238
1240{
1241 const char *val = av_color_range_name(color_range);
1243 print_str_opt("color_range", "unknown");
1244 } else {
1245 print_str("color_range", val);
1246 }
1247}
1248
1249static void print_color_space(AVTextFormatContext *tfc, enum AVColorSpace color_space)
1250{
1251 const char *val = av_color_space_name(color_space);
1252 if (!val || color_space == AVCOL_SPC_UNSPECIFIED) {
1253 print_str_opt("color_space", "unknown");
1254 } else {
1255 print_str("color_space", val);
1256 }
1257}
1258
1260{
1263 print_str_opt("color_primaries", "unknown");
1264 } else {
1265 print_str("color_primaries", val);
1266 }
1267}
1268
1270{
1271 const char *val = av_color_transfer_name(color_trc);
1272 if (!val || color_trc == AVCOL_TRC_UNSPECIFIED) {
1273 print_str_opt("color_transfer", "unknown");
1274 } else {
1275 print_str("color_transfer", val);
1276 }
1277}
1278
1279static void print_chroma_location(AVTextFormatContext *tfc, enum AVChromaLocation chroma_location)
1280{
1281 const char *val = av_chroma_location_name(chroma_location);
1282 if (!val || chroma_location == AVCHROMA_LOC_UNSPECIFIED) {
1283 print_str_opt("chroma_location", "unspecified");
1284 } else {
1285 print_str("chroma_location", val);
1286 }
1287}
1288
1289static void print_alpha_mode(AVTextFormatContext *tfc, enum AVAlphaMode alpha_mode)
1290{
1291 const char *val = av_alpha_mode_name(alpha_mode);
1292 if (!val || alpha_mode == AVALPHA_MODE_UNSPECIFIED) {
1293 print_str_opt("alpha_mode", "unspecified");
1294 } else {
1295 print_str("alpha_mode", val);
1296 }
1297}
1298
1299static void clear_log(int need_lock)
1300{
1301 int i;
1302
1303 if (need_lock)
1305 for (i=0; i<log_buffer_size; i++) {
1306 av_freep(&log_buffer[i].context_name);
1307 av_freep(&log_buffer[i].parent_name);
1308 av_freep(&log_buffer[i].log_message);
1309 }
1310 log_buffer_size = 0;
1311 if(need_lock)
1313}
1314
1315static int show_log(AVTextFormatContext *tfc, int section_ids, int section_id, int log_level)
1316{
1317 int i;
1319 if (!log_buffer_size) {
1321 return 0;
1322 }
1323 avtext_print_section_header(tfc, NULL, section_ids);
1324
1325 for (i=0; i<log_buffer_size; i++) {
1326 if (log_buffer[i].log_level <= log_level) {
1327 avtext_print_section_header(tfc, NULL, section_id);
1328 print_str("context", log_buffer[i].context_name);
1329 print_int("level", log_buffer[i].log_level);
1330 print_int("category", log_buffer[i].category);
1331 if (log_buffer[i].parent_name) {
1332 print_str("parent_context", log_buffer[i].parent_name);
1333 print_int("parent_category", log_buffer[i].parent_category);
1334 } else {
1335 print_str_opt("parent_context", "N/A");
1336 print_str_opt("parent_category", "N/A");
1337 }
1338 print_str("message", log_buffer[i].log_message);
1340 }
1341 }
1342 clear_log(0);
1344
1346
1347 return 0;
1348}
1349
1350static void show_packet(AVTextFormatContext *tfc, InputFile *ifile, AVPacket *pkt, int packet_idx)
1351{
1352 AVStream *st = ifile->streams[pkt->stream_index].st;
1353 AVBPrint pbuf;
1354 const char *s;
1355
1357
1359
1361 if (s) print_str ("codec_type", s);
1362 else print_str_opt("codec_type", "unknown");
1363 print_int("stream_index", pkt->stream_index);
1364 print_ts ("pts", pkt->pts);
1365 print_time("pts_time", pkt->pts, &st->time_base);
1366 print_ts ("dts", pkt->dts);
1367 print_time("dts_time", pkt->dts, &st->time_base);
1368 print_duration_ts("duration", pkt->duration);
1369 print_duration_time("duration_time", pkt->duration, &st->time_base);
1371 if (pkt->pos != -1) print_fmt ("pos", "%"PRId64, pkt->pos);
1372 else print_str_opt("pos", "N/A");
1373 print_fmt("flags", "%c%c%c", pkt->flags & AV_PKT_FLAG_KEY ? 'K' : '_',
1374 pkt->flags & AV_PKT_FLAG_DISCARD ? 'D' : '_',
1375 pkt->flags & AV_PKT_FLAG_CORRUPT ? 'C' : '_');
1376 if (do_show_data)
1377 avtext_print_data(tfc, "data", pkt->data, pkt->size);
1378 avtext_print_data_hash(tfc, "data_hash", pkt->data, pkt->size);
1379
1380 if (pkt->side_data_elems) {
1381 size_t size;
1382 const uint8_t *side_metadata;
1383
1385 if (side_metadata && size && do_show_packet_tags) {
1386 AVDictionary *dict = NULL;
1387 if (av_packet_unpack_dictionary(side_metadata, size, &dict) >= 0)
1389 av_dict_free(&dict);
1390 }
1391
1393 for (int i = 0; i < pkt->side_data_elems; i++) {
1394 print_pkt_side_data(tfc, st->codecpar->width, st->codecpar->height, &pkt->side_data[i],
1397 }
1399 }
1400
1402
1403 av_bprint_finalize(&pbuf, NULL);
1404 fflush(stdout);
1405}
1406
1409{
1410 AVBPrint pbuf;
1411
1413
1415
1416 print_str ("media_type", "subtitle");
1417 print_ts ("pts", sub->pts);
1418 print_time("pts_time", sub->pts, &AV_TIME_BASE_Q);
1419 print_int ("format", sub->format);
1420 print_int ("start_display_time", sub->start_display_time);
1421 print_int ("end_display_time", sub->end_display_time);
1422 print_int ("num_rects", sub->num_rects);
1423
1425
1426 av_bprint_finalize(&pbuf, NULL);
1427 fflush(stdout);
1428}
1429
1430static void print_iamf_param_definition(AVTextFormatContext *tfc, const char *name,
1431 const AVIAMFParamDefinition *param, SectionID section_id);
1432
1434 const AVFrame *frame,
1435 const AVStream *stream)
1436{
1438
1439 for (int i = 0; i < frame->nb_side_data; i++) {
1440 const AVFrameSideData *sd = frame->side_data[i];
1441 const char *name;
1442
1445 print_str("side_data_type", name ? name : "unknown");
1446 if (sd->type == AV_FRAME_DATA_DOWNMIX_INFO) {
1448 } else if (sd->type == AV_FRAME_DATA_DISPLAYMATRIX && sd->size >= 9*4) {
1449 print_displaymatrix(tfc, (const int32_t*)sd->data);
1450 } else if (sd->type == AV_FRAME_DATA_AFD && sd->size > 0) {
1451 print_int("active_format", *sd->data);
1452 } else if (sd->type == AV_FRAME_DATA_GOP_TIMECODE && sd->size >= 8) {
1453 char tcbuf[AV_TIMECODE_STR_SIZE];
1455 print_str("timecode", tcbuf);
1456 } else if (sd->type == AV_FRAME_DATA_S12M_TIMECODE && sd->size == 16) {
1457 uint32_t *tc = (uint32_t*)sd->data;
1458 int m = FFMIN(tc[0],3);
1460 for (int j = 1; j <= m ; j++) {
1461 char tcbuf[AV_TIMECODE_STR_SIZE];
1462 av_timecode_make_smpte_tc_string2(tcbuf, stream->avg_frame_rate, tc[j], 0, 0);
1464 print_str("value", tcbuf);
1466 }
1470 } else if (sd->type == AV_FRAME_DATA_DYNAMIC_HDR_PLUS) {
1476 } else if (sd->type == AV_FRAME_DATA_CONTENT_LIGHT_LEVEL) {
1478 } else if (sd->type == AV_FRAME_DATA_ICC_PROFILE) {
1480 if (tag)
1481 print_str(tag->key, tag->value);
1482 print_int("size", sd->size);
1483 } else if (sd->type == AV_FRAME_DATA_DOVI_METADATA) {
1484 print_dovi_metadata(tfc, (const AVDOVIMetadata *)sd->data);
1485 } else if (sd->type == AV_FRAME_DATA_DYNAMIC_HDR_VIVID) {
1490 } else if (sd->type == AV_FRAME_DATA_FILM_GRAIN_PARAMS) {
1492 print_film_grain_params(tfc, fgp);
1493 } else if (sd->type == AV_FRAME_DATA_VIEW_ID) {
1494 print_int("view_id", *(int*)sd->data);
1495 } else if (sd->type == AV_FRAME_DATA_EXIF) {
1496 print_int("size", sd->size);
1497 } else if (sd->type == AV_FRAME_DATA_IAMF_MIX_GAIN_PARAM ||
1500 const AVIAMFParamDefinition *param = (AVIAMFParamDefinition *)sd->data;
1502 }
1504 }
1506}
1507
1510{
1511 FrameData *fd = frame->opaque_ref ? (FrameData*)frame->opaque_ref->data : NULL;
1512 AVBPrint pbuf;
1513 char val_str[128];
1514 const char *s;
1515
1517
1519
1521 if (s) print_str ("media_type", s);
1522 else print_str_opt("media_type", "unknown");
1523 print_int("stream_index", stream->index);
1524 print_int("key_frame", !!(frame->flags & AV_FRAME_FLAG_KEY));
1525 print_ts ("pts", frame->pts);
1526 print_time("pts_time", frame->pts, &stream->time_base);
1527 print_ts ("pkt_dts", frame->pkt_dts);
1528 print_time("pkt_dts_time", frame->pkt_dts, &stream->time_base);
1529 print_ts ("best_effort_timestamp", frame->best_effort_timestamp);
1530 print_time("best_effort_timestamp_time", frame->best_effort_timestamp, &stream->time_base);
1531 print_duration_ts ("duration", frame->duration);
1532 print_duration_time("duration_time", frame->duration, &stream->time_base);
1533 if (fd && fd->pkt_pos != -1) print_fmt ("pkt_pos", "%"PRId64, fd->pkt_pos);
1534 else print_str_opt("pkt_pos", "N/A");
1535 if (fd && fd->pkt_size != -1) print_int_fmt("pkt_size", fd->pkt_size, AV_TEXTFORMAT_VALUE_FMT_BYTE, unit_byte_str);
1536 else print_str_opt("pkt_size", "N/A");
1537
1538 switch (stream->codecpar->codec_type) {
1539 AVRational sar;
1540
1541 case AVMEDIA_TYPE_VIDEO:
1542 print_int("width", frame->width);
1543 print_int("height", frame->height);
1544 print_int("crop_top", frame->crop_top);
1545 print_int("crop_bottom", frame->crop_bottom);
1546 print_int("crop_left", frame->crop_left);
1547 print_int("crop_right", frame->crop_right);
1548 print_pixel_format(tfc, frame->format);
1550 if (sar.num) {
1551 print_q("sample_aspect_ratio", sar, ':');
1552 } else {
1553 print_str_opt("sample_aspect_ratio", "N/A");
1554 }
1555 print_fmt("pict_type", "%c", av_get_picture_type_char(frame->pict_type));
1556 print_int("interlaced_frame", !!(frame->flags & AV_FRAME_FLAG_INTERLACED));
1557 print_int("top_field_first", !!(frame->flags & AV_FRAME_FLAG_TOP_FIELD_FIRST));
1558 print_int("lossless", !!(frame->flags & AV_FRAME_FLAG_LOSSLESS));
1559 print_int("repeat_pict", frame->repeat_pict);
1560
1561 print_color_range(tfc, frame->color_range);
1562 print_color_space(tfc, frame->colorspace);
1563 print_primaries(tfc, frame->color_primaries);
1564 print_color_trc(tfc, frame->color_trc);
1565 print_chroma_location(tfc, frame->chroma_location);
1566 print_alpha_mode(tfc, frame->alpha_mode);
1567 break;
1568
1569 case AVMEDIA_TYPE_AUDIO:
1570 s = av_get_sample_fmt_name(frame->format);
1571 if (s) print_str ("sample_fmt", s);
1572 else print_str_opt("sample_fmt", "unknown");
1573 print_int("nb_samples", frame->nb_samples);
1574 print_int("channels", frame->ch_layout.nb_channels);
1575 if (frame->ch_layout.order != AV_CHANNEL_ORDER_UNSPEC) {
1576 av_channel_layout_describe(&frame->ch_layout, val_str, sizeof(val_str));
1577 print_str ("channel_layout", val_str);
1578 } else
1579 print_str_opt("channel_layout", "unknown");
1580 break;
1581 }
1583 show_tags(tfc, frame->metadata, SECTION_ID_FRAME_TAGS);
1584 if (do_show_log)
1586 if (frame->nb_side_data)
1587 print_frame_side_data(tfc, frame, stream);
1588
1590
1591 av_bprint_finalize(&pbuf, NULL);
1592 fflush(stdout);
1593}
1594
1596 InputFile *ifile,
1597 AVFrame *frame, const AVPacket *pkt,
1598 int *packet_new)
1599{
1601 AVCodecContext *dec_ctx = ifile->streams[pkt->stream_index].dec_ctx;
1602 AVCodecParameters *par = ifile->streams[pkt->stream_index].st->codecpar;
1603 AVSubtitle sub;
1604 int ret = 0, got_frame = 0;
1605
1606 clear_log(1);
1607 if (dec_ctx) {
1608 switch (par->codec_type) {
1609 case AVMEDIA_TYPE_VIDEO:
1610 case AVMEDIA_TYPE_AUDIO:
1611 if (*packet_new) {
1613 if (ret == AVERROR(EAGAIN)) {
1614 ret = 0;
1615 } else if (ret >= 0 || ret == AVERROR_EOF) {
1616 ret = 0;
1617 *packet_new = 0;
1618 }
1619 }
1620 if (ret >= 0) {
1622 if (ret >= 0) {
1623 got_frame = 1;
1624 } else if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) {
1625 ret = 0;
1626 }
1627 }
1628 break;
1629
1631 if (*packet_new)
1632 ret = avcodec_decode_subtitle2(dec_ctx, &sub, &got_frame, pkt);
1633 *packet_new = 0;
1634 break;
1635 default:
1636 *packet_new = 0;
1637 }
1638 } else {
1639 *packet_new = 0;
1640 }
1641
1642 if (ret < 0)
1643 return ret;
1644 if (got_frame) {
1645 int is_sub = (par->codec_type == AVMEDIA_TYPE_SUBTITLE);
1646 nb_streams_frames[pkt->stream_index]++;
1647 if (do_show_frames)
1648 if (is_sub)
1649 show_subtitle(tfc, &sub, ifile->streams[pkt->stream_index].st, fmt_ctx);
1650 else
1651 show_frame(tfc, frame, ifile->streams[pkt->stream_index].st, fmt_ctx);
1652
1653 if (!is_sub && do_analyze_frames) {
1654 for (int i = 0; i < frame->nb_side_data; i++) {
1655 if (frame->side_data[i]->type == AV_FRAME_DATA_A53_CC)
1656 streams_with_closed_captions[pkt->stream_index] = 1;
1657 else if (frame->side_data[i]->type == AV_FRAME_DATA_FILM_GRAIN_PARAMS)
1658 streams_with_film_grain[pkt->stream_index] = 1;
1659 }
1660 }
1661
1662 if (is_sub)
1663 avsubtitle_free(&sub);
1664 }
1665 return got_frame || *packet_new;
1666}
1667
1668static void log_read_interval(const ReadInterval *interval, void *log_ctx, int log_level)
1669{
1670 av_log(log_ctx, log_level, "id:%d", interval->id);
1671
1672 if (interval->has_start) {
1673 av_log(log_ctx, log_level, " start:%s%s", interval->start_is_offset ? "+" : "",
1674 av_ts2timestr(interval->start, &AV_TIME_BASE_Q));
1675 } else {
1676 av_log(log_ctx, log_level, " start:N/A");
1677 }
1678
1679 if (interval->has_end) {
1680 av_log(log_ctx, log_level, " end:%s", interval->end_is_offset ? "+" : "");
1681 if (interval->duration_frames)
1682 av_log(log_ctx, log_level, "#%"PRId64, interval->end);
1683 else
1684 av_log(log_ctx, log_level, "%s", av_ts2timestr(interval->end, &AV_TIME_BASE_Q));
1685 } else {
1686 av_log(log_ctx, log_level, " end:N/A");
1687 }
1688
1689 av_log(log_ctx, log_level, "\n");
1690}
1691
1693 const ReadInterval *interval, int64_t *cur_ts)
1694{
1696 AVPacket *pkt = NULL;
1697 AVFrame *frame = NULL;
1698 int ret = 0, i = 0, frame_count = 0;
1699 int64_t start = -INT64_MAX, end = interval->end;
1700 int has_start = 0, has_end = interval->has_end && !interval->end_is_offset;
1701
1702 av_log(NULL, AV_LOG_VERBOSE, "Processing read interval ");
1704
1705 if (interval->has_start) {
1706 int64_t target;
1707 if (interval->start_is_offset) {
1708 if (*cur_ts == AV_NOPTS_VALUE) {
1710 "Could not seek to relative position since current "
1711 "timestamp is not defined\n");
1712 ret = AVERROR(EINVAL);
1713 goto end;
1714 }
1715 target = *cur_ts + interval->start;
1716 } else {
1717 target = interval->start;
1718 }
1719
1720 av_log(NULL, AV_LOG_VERBOSE, "Seeking to read interval start point %s\n",
1721 av_ts2timestr(target, &AV_TIME_BASE_Q));
1722 if ((ret = avformat_seek_file(fmt_ctx, -1, -INT64_MAX, target, INT64_MAX, 0)) < 0) {
1723 av_log(NULL, AV_LOG_ERROR, "Could not seek to position %"PRId64": %s\n",
1724 interval->start, av_err2str(ret));
1725 goto end;
1726 }
1727 }
1728
1730 if (!frame) {
1731 ret = AVERROR(ENOMEM);
1732 goto end;
1733 }
1734 pkt = av_packet_alloc();
1735 if (!pkt) {
1736 ret = AVERROR(ENOMEM);
1737 goto end;
1738 }
1739 while (!av_read_frame(fmt_ctx, pkt)) {
1740 if (fmt_ctx->nb_streams > nb_streams) {
1746 nb_streams = fmt_ctx->nb_streams;
1747 }
1748 if (selected_streams[pkt->stream_index]) {
1749 AVRational tb = ifile->streams[pkt->stream_index].st->time_base;
1750 int64_t pts = pkt->pts != AV_NOPTS_VALUE ? pkt->pts : pkt->dts;
1751
1752 if (pts != AV_NOPTS_VALUE)
1753 *cur_ts = av_rescale_q(pts, tb, AV_TIME_BASE_Q);
1754
1755 if (!has_start && *cur_ts != AV_NOPTS_VALUE) {
1756 start = *cur_ts;
1757 has_start = 1;
1758 }
1759
1760 if (has_start && !has_end && interval->end_is_offset) {
1761 end = start + interval->end;
1762 has_end = 1;
1763 }
1764
1765 if (interval->end_is_offset && interval->duration_frames) {
1766 if (frame_count >= interval->end)
1767 break;
1768 } else if (has_end && *cur_ts != AV_NOPTS_VALUE && *cur_ts >= end) {
1769 break;
1770 }
1771
1772 frame_count++;
1773 if (do_read_packets) {
1774 if (do_show_packets)
1775 show_packet(tfc, ifile, pkt, i++);
1776 nb_streams_packets[pkt->stream_index]++;
1777 }
1778 if (do_read_frames) {
1779 int packet_new = 1;
1780 FrameData *fd;
1781
1782 pkt->opaque_ref = av_buffer_allocz(sizeof(*fd));
1783 if (!pkt->opaque_ref) {
1784 ret = AVERROR(ENOMEM);
1785 goto end;
1786 }
1787 fd = (FrameData*)pkt->opaque_ref->data;
1788 fd->pkt_pos = pkt->pos;
1789 fd->pkt_size = pkt->size;
1790
1791 while (process_frame(tfc, ifile, frame, pkt, &packet_new) > 0);
1792 }
1793 }
1795 }
1797 //Flush remaining frames that are cached in the decoder
1798 for (int i = 0; i < ifile->nb_streams; i++) {
1799 pkt->stream_index = i;
1800 if (do_read_frames) {
1801 while (process_frame(tfc, ifile, frame, pkt, &(int){1}) > 0);
1802 }
1803 }
1804
1805end:
1808 if (ret < 0) {
1809 av_log(NULL, AV_LOG_ERROR, "Could not read packets in interval ");
1811 }
1812 return ret;
1813}
1814
1815static void flush_buffers(InputFile *ifile)
1816{
1817 int i;
1818
1819 if (!do_read_frames)
1820 return;
1821 for (i = 0; i < ifile->nb_streams; i++) {
1822 if (ifile->streams[i].dec_ctx)
1824 }
1825}
1826
1828{
1830 int ret = 0;
1831 int64_t cur_ts = fmt_ctx->start_time;
1832
1833 if (read_intervals_nb == 0) {
1834 ReadInterval interval = (ReadInterval) { .has_start = 0, .has_end = 0 };
1835 ret = read_interval_packets(tfc, ifile, &interval, &cur_ts);
1836 } else {
1837 for (int i = 0; i < read_intervals_nb; i++) {
1838 /* flushing buffers can reset parts of the private context which may be
1839 * read by show_streams(), so only flush between each read_interval */
1840 if (i)
1841 flush_buffers(ifile);
1842 ret = read_interval_packets(tfc, ifile, &read_intervals[i], &cur_ts);
1843 if (ret < 0)
1844 break;
1845 }
1846 }
1847
1848 return ret;
1849}
1850
1851static void print_dispositions(AVTextFormatContext *tfc, uint32_t disposition, SectionID section_id)
1852{
1853 avtext_print_section_header(tfc, NULL, section_id);
1854 for (unsigned i = 0; i < sizeof(disposition) * CHAR_BIT; i++) {
1855 const char *disposition_str = av_disposition_to_string(1U << i);
1856
1857 if (disposition_str)
1858 print_int(disposition_str, !!(disposition & (1U << i)));
1859 }
1861}
1862
1863#define IN_PROGRAM 1
1864#define IN_STREAM_GROUP 2
1865
1866static int show_stream(AVTextFormatContext *tfc, AVFormatContext *fmt_ctx, int stream_idx, InputStream *ist, int container)
1867{
1868 AVStream *stream = ist->st;
1869 AVCodecParameters *par;
1871 char val_str[128];
1872 const char *s;
1873 AVRational sar, dar;
1874 AVBPrint pbuf;
1875 const AVCodecDescriptor *cd;
1876 const SectionID section_header[] = {
1880 };
1881 const SectionID section_disposition[] = {
1885 };
1886 const SectionID section_tags[] = {
1890 };
1891 int ret = 0;
1892 const char *profile = NULL;
1893
1894 av_assert0(container < FF_ARRAY_ELEMS(section_header));
1895
1897
1898 avtext_print_section_header(tfc, NULL, section_header[container]);
1899
1900 print_int("index", stream->index);
1901
1902 par = stream->codecpar;
1903 dec_ctx = ist->dec_ctx;
1904 if (cd = avcodec_descriptor_get(par->codec_id)) {
1905 print_str("codec_name", cd->name);
1906 if (!do_bitexact) {
1907 print_str("codec_long_name",
1908 cd->long_name ? cd->long_name : "unknown");
1909 }
1910 } else {
1911 print_str_opt("codec_name", "unknown");
1912 if (!do_bitexact) {
1913 print_str_opt("codec_long_name", "unknown");
1914 }
1915 }
1916
1918 print_str("profile", profile);
1919 else {
1920 if (par->profile != AV_PROFILE_UNKNOWN) {
1921 char profile_num[12];
1922 snprintf(profile_num, sizeof(profile_num), "%d", par->profile);
1923 print_str("profile", profile_num);
1924 } else
1925 print_str_opt("profile", "unknown");
1926 }
1927 if (par->level != AV_LEVEL_UNKNOWN)
1928 print_int("level", par->level);
1929 else
1930 print_int_opt("level", par->level);
1931
1933 if (s) print_str ("codec_type", s);
1934 else print_str_opt("codec_type", "unknown");
1935
1936 /* print AVI/FourCC tag */
1937 print_str("codec_tag_string", av_fourcc2str(par->codec_tag));
1938 print_fmt("codec_tag", "0x%04"PRIx32, par->codec_tag);
1939
1940 av_bprint_clear(&pbuf);
1941 if (!av_mime_codec_str(par, stream->avg_frame_rate, &pbuf))
1942 print_str("mime_codec_string", pbuf.str);
1943
1944 switch (par->codec_type) {
1945 case AVMEDIA_TYPE_VIDEO:
1946 print_int("width", par->width);
1947 print_int("height", par->height);
1948 if (dec_ctx) {
1949 print_int("coded_width", dec_ctx->coded_width);
1950 print_int("coded_height", dec_ctx->coded_height);
1951
1952 if (do_analyze_frames) {
1953 print_int("closed_captions", streams_with_closed_captions[stream->index]);
1954 print_int("film_grain", streams_with_film_grain[stream->index]);
1955 }
1956 }
1957 print_int("has_b_frames", par->video_delay);
1959 if (sar.num) {
1960 print_q("sample_aspect_ratio", sar, ':');
1961 av_reduce(&dar.num, &dar.den,
1962 (int64_t) par->width * sar.num,
1963 (int64_t) par->height * sar.den,
1964 1024*1024);
1965 print_q("display_aspect_ratio", dar, ':');
1966 } else {
1967 print_str_opt("sample_aspect_ratio", "N/A");
1968 print_str_opt("display_aspect_ratio", "N/A");
1969 }
1970 print_pixel_format(tfc, par->format);
1971
1972 print_color_range(tfc, par->color_range);
1973 print_color_space(tfc, par->color_space);
1974 print_color_trc(tfc, par->color_trc);
1977
1979 print_str("field_order", "progressive");
1980 else if (par->field_order == AV_FIELD_TT)
1981 print_str("field_order", "tt");
1982 else if (par->field_order == AV_FIELD_BB)
1983 print_str("field_order", "bb");
1984 else if (par->field_order == AV_FIELD_TB)
1985 print_str("field_order", "tb");
1986 else if (par->field_order == AV_FIELD_BT)
1987 print_str("field_order", "bt");
1988 else
1989 print_str_opt("field_order", "unknown");
1990
1991 if (dec_ctx && do_read_frames)
1992 print_int("refs", dec_ctx->refs);
1993 break;
1994
1995 case AVMEDIA_TYPE_AUDIO:
1997 if (s) print_str ("sample_fmt", s);
1998 else print_str_opt("sample_fmt", "unknown");
1999 print_val("sample_rate", par->sample_rate, unit_hertz_str);
2000 print_int("channels", par->ch_layout.nb_channels);
2001
2003 av_channel_layout_describe(&par->ch_layout, val_str, sizeof(val_str));
2004 print_str ("channel_layout", val_str);
2005 } else {
2006 print_str_opt("channel_layout", "unknown");
2007 }
2008
2009 print_int("bits_per_sample", av_get_bits_per_sample(par->codec_id));
2010
2011 print_int("initial_padding", par->initial_padding);
2012 break;
2013
2015 if (par->width)
2016 print_int("width", par->width);
2017 else
2018 print_str_opt("width", "N/A");
2019 if (par->height)
2020 print_int("height", par->height);
2021 else
2022 print_str_opt("height", "N/A");
2023 break;
2024 }
2025
2026 if (show_private_data) {
2027 if (dec_ctx && dec_ctx->codec->priv_class)
2028 print_private_data(tfc, dec_ctx->priv_data);
2029 if (fmt_ctx->iformat->priv_class)
2030 print_private_data(tfc, fmt_ctx->priv_data);
2031 }
2032
2033 if (fmt_ctx->iformat->flags & AVFMT_SHOW_IDS) print_fmt ("id", "0x%x", stream->id);
2034 else print_str_opt("id", "N/A");
2035 print_q("r_frame_rate", stream->r_frame_rate, '/');
2036 print_q("avg_frame_rate", stream->avg_frame_rate, '/');
2037 print_q("time_base", stream->time_base, '/');
2038 print_ts ("start_pts", stream->start_time);
2039 print_time("start_time", stream->start_time, &stream->time_base);
2040 print_ts ("duration_ts", stream->duration);
2041 print_time("duration", stream->duration, &stream->time_base);
2042 if (par->bit_rate > 0) print_val ("bit_rate", par->bit_rate, unit_bit_per_second_str);
2043 else print_str_opt("bit_rate", "N/A");
2044 if (dec_ctx && dec_ctx->rc_max_rate > 0)
2045 print_val ("max_bit_rate", dec_ctx->rc_max_rate, unit_bit_per_second_str);
2046 else
2047 print_str_opt("max_bit_rate", "N/A");
2048 if (dec_ctx && dec_ctx->bits_per_raw_sample > 0) print_fmt("bits_per_raw_sample", "%d", dec_ctx->bits_per_raw_sample);
2049 else print_str_opt("bits_per_raw_sample", "N/A");
2050 if (stream->nb_frames) print_fmt ("nb_frames", "%"PRId64, stream->nb_frames);
2051 else print_str_opt("nb_frames", "N/A");
2052 if (nb_streams_frames[stream_idx]) print_fmt ("nb_read_frames", "%"PRIu64, nb_streams_frames[stream_idx]);
2053 else print_str_opt("nb_read_frames", "N/A");
2054 if (nb_streams_packets[stream_idx]) print_fmt ("nb_read_packets", "%"PRIu64, nb_streams_packets[stream_idx]);
2055 else print_str_opt("nb_read_packets", "N/A");
2056 if (do_show_data)
2057 avtext_print_data(tfc, "extradata", par->extradata,
2058 par->extradata_size);
2059
2060 if (par->extradata_size > 0) {
2061 print_int("extradata_size", par->extradata_size);
2062 avtext_print_data_hash(tfc, "extradata_hash", par->extradata,
2063 par->extradata_size);
2064 }
2065
2066 /* Print disposition information */
2068 av_assert0(container < FF_ARRAY_ELEMS(section_disposition));
2069 print_dispositions(tfc, stream->disposition, section_disposition[container]);
2070 }
2071
2072 if (do_show_stream_tags) {
2073 av_assert0(container < FF_ARRAY_ELEMS(section_tags));
2074 ret = show_tags(tfc, stream->metadata, section_tags[container]);
2075 }
2076
2077 if (stream->codecpar->nb_coded_side_data) {
2079 for (int i = 0; i < stream->codecpar->nb_coded_side_data; i++) {
2080 print_pkt_side_data(tfc, stream->codecpar->width, stream->codecpar->height, &stream->codecpar->coded_side_data[i],
2083 }
2085 }
2086
2088 av_bprint_finalize(&pbuf, NULL);
2089 fflush(stdout);
2090
2091 return ret;
2092}
2093
2095{
2097 int ret = 0;
2098
2100 for (int i = 0; i < ifile->nb_streams; i++)
2101 if (selected_streams[i]) {
2102 ret = show_stream(tfc, fmt_ctx, i, &ifile->streams[i], 0);
2103 if (ret < 0)
2104 break;
2105 }
2107
2108 return ret;
2109}
2110
2111static int show_program(AVTextFormatContext *tfc, InputFile *ifile, AVProgram *program)
2112{
2114 int ret = 0;
2115
2117 print_int("program_id", program->id);
2118 print_int("program_num", program->program_num);
2119 print_int("nb_streams", program->nb_stream_indexes);
2120 print_int("pmt_pid", program->pmt_pid);
2121 print_int("pcr_pid", program->pcr_pid);
2123 ret = show_tags(tfc, program->metadata, SECTION_ID_PROGRAM_TAGS);
2124 if (ret < 0)
2125 goto end;
2126
2128 for (unsigned i = 0; i < program->nb_stream_indexes; i++) {
2129 if (selected_streams[program->stream_index[i]]) {
2130 ret = show_stream(tfc, fmt_ctx, program->stream_index[i], &ifile->streams[program->stream_index[i]], IN_PROGRAM);
2131 if (ret < 0)
2132 break;
2133 }
2134 }
2136
2137end:
2139 return ret;
2140}
2141
2143{
2145 int ret = 0;
2146
2148 for (unsigned i = 0; i < fmt_ctx->nb_programs; i++) {
2149 AVProgram *program = fmt_ctx->programs[i];
2150 if (!program)
2151 continue;
2152 ret = show_program(tfc, ifile, program);
2153 if (ret < 0)
2154 break;
2155 }
2157 return ret;
2158}
2159
2161 const AVStreamGroupTileGrid *tile_grid)
2162{
2164 print_int("nb_tiles", tile_grid->nb_tiles);
2165 print_int("coded_width", tile_grid->coded_width);
2166 print_int("coded_height", tile_grid->coded_height);
2167 print_int("horizontal_offset", tile_grid->horizontal_offset);
2168 print_int("vertical_offset", tile_grid->vertical_offset);
2169 print_int("width", tile_grid->width);
2170 print_int("height", tile_grid->height);
2172 for (unsigned i = 0; i < tile_grid->nb_tiles; i++) {
2174 print_int("stream_index", tile_grid->offsets[i].idx);
2175 print_int("tile_horizontal_offset", tile_grid->offsets[i].horizontal);
2176 print_int("tile_vertical_offset", tile_grid->offsets[i].vertical);
2178 }
2180 if (tile_grid->nb_coded_side_data) {
2182 for (int i = 0; i < tile_grid->nb_coded_side_data; i++) {
2183 print_pkt_side_data(tfc, tile_grid->width, tile_grid->height, &tile_grid->coded_side_data[i],
2186 }
2188 }
2190}
2191
2193 const AVIAMFParamDefinition *param, SectionID section_id)
2194{
2195 SectionID subsection_id, parameter_section_id;
2196 if (section_id == SECTION_ID_FRAME_SIDE_DATA)
2198 else {
2199 av_assert0(sections[section_id].children_ids[0] != -1);
2200 subsection_id = sections[section_id].children_ids[0];
2201 }
2202 av_assert0(sections[subsection_id].children_ids[0] != -1);
2203 parameter_section_id = sections[subsection_id].children_ids[0];
2204
2205 // When printing as part of side-data, skip opening a section
2206 if (section_id != SECTION_ID_FRAME_SIDE_DATA)
2207 avtext_print_section_header(tfc, "IAMF Param Definition", section_id);
2208
2209 if (name)
2210 print_str("name", name);
2211 print_int("nb_subblocks", param->nb_subblocks);
2212 print_int("type", param->type);
2213 print_int("parameter_id", param->parameter_id);
2214 print_int("parameter_rate", param->parameter_rate);
2215 print_int("duration", param->duration);
2216 print_int("constant_subblock_duration", param->constant_subblock_duration);
2217 if (param->nb_subblocks > 0)
2218 avtext_print_section_header(tfc, NULL, subsection_id);
2219 for (unsigned i = 0; i < param->nb_subblocks; i++) {
2220 const void *subblock = av_iamf_param_definition_get_subblock(param, i);
2221 switch(param->type) {
2223 const AVIAMFMixGain *mix = subblock;
2224 avtext_print_section_header(tfc, "IAMF Mix Gain Parameters", parameter_section_id);
2225 print_int("subblock_duration", mix->subblock_duration);
2226 print_int("animation_type", mix->animation_type);
2227 print_q("start_point_value", mix->start_point_value, '/');
2228 print_q("end_point_value", mix->end_point_value, '/');
2229 print_q("control_point_value", mix->control_point_value, '/');
2230 print_q("control_point_relative_time", mix->control_point_relative_time, '/');
2231 avtext_print_section_footer(tfc); // parameter_section_id
2232 break;
2233 }
2235 const AVIAMFDemixingInfo *demix = subblock;
2236 avtext_print_section_header(tfc, "IAMF Demixing Info", parameter_section_id);
2237 print_int("subblock_duration", demix->subblock_duration);
2238 print_int("dmixp_mode", demix->dmixp_mode);
2239 avtext_print_section_footer(tfc); // parameter_section_id
2240 break;
2241 }
2243 const AVIAMFReconGain *recon = subblock;
2244 avtext_print_section_header(tfc, "IAMF Recon Gain", parameter_section_id);
2245 print_int("subblock_duration", recon->subblock_duration);
2246 avtext_print_section_footer(tfc); // parameter_section_id
2247 break;
2248 }
2249 }
2250 }
2251 if (param->nb_subblocks > 0)
2252 avtext_print_section_footer(tfc); // subsection_id
2253
2254 if (section_id != SECTION_ID_FRAME_SIDE_DATA)
2255 avtext_print_section_footer(tfc); // section_id
2256}
2257
2259 const AVIAMFAudioElement *audio_element)
2260{
2261 AVBPrint pbuf;
2262
2264
2266 print_int("nb_layers", audio_element->nb_layers);
2267 print_int("audio_element_type", audio_element->audio_element_type);
2268 print_int("default_w", audio_element->default_w);
2270 for (unsigned i = 0; i < audio_element->nb_layers; i++) {
2271 const AVIAMFLayer *layer = audio_element->layers[i];
2272 char val_str[128];
2274 av_channel_layout_describe(&layer->ch_layout, val_str, sizeof(val_str));
2275 print_str("channel_layout", val_str);
2277 print_int("output_gain_flags", layer->output_gain_flags);
2278 print_q("output_gain", layer->output_gain, '/');
2279 } else if (audio_element->audio_element_type == AV_IAMF_AUDIO_ELEMENT_TYPE_SCENE) {
2280 print_int("ambisonics_mode", layer->ambisonics_mode);
2282 print_list_fmt("demixing_matrix", "%d/%d", layer->nb_demixing_matrix, 1, layer->demixing_matrix[idx].num,
2283 layer->demixing_matrix[idx].den);
2284 }
2285 avtext_print_section_footer(tfc); // SECTION_ID_STREAM_GROUP_SUBCOMPONENT
2286 }
2287 if (audio_element->demixing_info)
2288 print_iamf_param_definition(tfc, "demixing_info", audio_element->demixing_info,
2290 if (audio_element->recon_gain_info)
2291 print_iamf_param_definition(tfc, "recon_gain_info", audio_element->recon_gain_info,
2293 avtext_print_section_footer(tfc); // SECTION_ID_STREAM_GROUP_SUBCOMPONENTS
2294 avtext_print_section_footer(tfc); // SECTION_ID_STREAM_GROUP_COMPONENT
2295
2296 av_bprint_finalize(&pbuf, NULL);
2297}
2298
2300{
2302 print_int("nb_elements", submix->nb_elements);
2303 print_int("nb_layouts", submix->nb_layouts);
2304 print_q("default_mix_gain", submix->default_mix_gain, '/');
2306 for (unsigned i = 0; i < submix->nb_elements; i++) {
2307 const AVIAMFSubmixElement *element = submix->elements[i];
2309 print_int("stream_id", element->audio_element_id);
2310 print_q("default_mix_gain", element->default_mix_gain, '/');
2311 print_int("headphones_rendering_mode", element->headphones_rendering_mode);
2313 if (element->annotations) {
2314 const AVDictionaryEntry *annotation = NULL;
2316 while (annotation = av_dict_iterate(element->annotations, annotation))
2317 print_str(annotation->key, annotation->value);
2318 avtext_print_section_footer(tfc); // SECTION_ID_STREAM_GROUP_SUBPIECE
2319 }
2320 if (element->element_mix_config)
2321 print_iamf_param_definition(tfc, "element_mix_config", element->element_mix_config,
2323 avtext_print_section_footer(tfc); // SECTION_ID_STREAM_GROUP_SUBPIECES
2324 avtext_print_section_footer(tfc); // SECTION_ID_STREAM_GROUP_PIECE
2325 }
2326 if (submix->output_mix_config)
2327 print_iamf_param_definition(tfc, "output_mix_config", submix->output_mix_config,
2329 for (unsigned i = 0; i < submix->nb_layouts; i++) {
2330 const AVIAMFSubmixLayout *layout = submix->layouts[i];
2331 char val_str[128];
2333 av_channel_layout_describe(&layout->sound_system, val_str, sizeof(val_str));
2334 print_str("sound_system", val_str);
2335 print_q("integrated_loudness", layout->integrated_loudness, '/');
2336 print_q("digital_peak", layout->digital_peak, '/');
2337 print_q("true_peak", layout->true_peak, '/');
2338 print_q("dialogue_anchored_loudness", layout->dialogue_anchored_loudness, '/');
2339 print_q("album_anchored_loudness", layout->album_anchored_loudness, '/');
2340 avtext_print_section_footer(tfc); // SECTION_ID_STREAM_GROUP_PIECE
2341 }
2342 avtext_print_section_footer(tfc); // SECTION_ID_STREAM_GROUP_PIECES
2343 avtext_print_section_footer(tfc); // SECTION_ID_STREAM_GROUP_SUBCOMPONENT
2344}
2345
2347 const AVIAMFMixPresentation *mix_presentation)
2348{
2350 print_int("nb_submixes", mix_presentation->nb_submixes);
2352 if (mix_presentation->annotations) {
2353 const AVDictionaryEntry *annotation = NULL;
2355 while (annotation = av_dict_iterate(mix_presentation->annotations, annotation))
2356 print_str(annotation->key, annotation->value);
2357 avtext_print_section_footer(tfc); // SECTION_ID_STREAM_GROUP_SUBCOMPONENT
2358 }
2359 for (unsigned i = 0; i < mix_presentation->nb_submixes; i++)
2360 print_iamf_submix_params(tfc, mix_presentation->submixes[i]);
2361 avtext_print_section_footer(tfc); // SECTION_ID_STREAM_GROUP_SUBCOMPONENTS
2362 avtext_print_section_footer(tfc); // SECTION_ID_STREAM_GROUP_COMPONENT
2363}
2364
2376
2378{
2380 AVBPrint pbuf;
2381 int ret = 0;
2382
2385 print_int("index", stg->index);
2386 if (fmt_ctx->iformat->flags & AVFMT_SHOW_IDS) print_fmt ("id", "0x%"PRIx64, stg->id);
2387 else print_str_opt("id", "N/A");
2388 print_int("nb_streams", stg->nb_streams);
2390 print_str("type", av_x_if_null(avformat_stream_group_name(stg->type), "unknown"));
2391 else
2392 print_str_opt("type", "unknown");
2394 print_stream_group_params(tfc, stg);
2395
2396 /* Print disposition information */
2399
2402 if (ret < 0)
2403 goto end;
2404
2406 for (unsigned i = 0; i < stg->nb_streams; i++) {
2407 if (selected_streams[stg->streams[i]->index]) {
2408 ret = show_stream(tfc, fmt_ctx, stg->streams[i]->index, &ifile->streams[stg->streams[i]->index], IN_STREAM_GROUP);
2409 if (ret < 0)
2410 break;
2411 }
2412 }
2414
2415end:
2416 av_bprint_finalize(&pbuf, NULL);
2418 return ret;
2419}
2420
2422{
2424 int ret = 0;
2425
2427 for (unsigned i = 0; i < fmt_ctx->nb_stream_groups; i++) {
2428 AVStreamGroup *stg = fmt_ctx->stream_groups[i];
2429
2430 ret = show_stream_group(tfc, ifile, stg);
2431 if (ret < 0)
2432 break;
2433 }
2435 return ret;
2436}
2437
2439{
2441 int ret = 0;
2442
2444 for (unsigned i = 0; i < fmt_ctx->nb_chapters; i++) {
2445 AVChapter *chapter = fmt_ctx->chapters[i];
2446
2448 print_int("id", chapter->id);
2449 print_q ("time_base", chapter->time_base, '/');
2450 print_int("start", chapter->start);
2451 print_time("start_time", chapter->start, &chapter->time_base);
2452 print_int("end", chapter->end);
2453 print_time("end_time", chapter->end, &chapter->time_base);
2455 ret = show_tags(tfc, chapter->metadata, SECTION_ID_CHAPTER_TAGS);
2457 }
2459
2460 return ret;
2461}
2462
2464{
2466 int64_t size = fmt_ctx->pb ? avio_size(fmt_ctx->pb) : -1;
2467 int ret = 0;
2468
2470 print_str_validate("filename", fmt_ctx->url);
2471 print_int("nb_streams", fmt_ctx->nb_streams);
2472 print_int("nb_programs", fmt_ctx->nb_programs);
2473 print_int("nb_stream_groups", fmt_ctx->nb_stream_groups);
2474 print_str("format_name", fmt_ctx->iformat->name);
2475 if (!do_bitexact) {
2476 if (fmt_ctx->iformat->long_name) print_str ("format_long_name", fmt_ctx->iformat->long_name);
2477 else print_str_opt("format_long_name", "unknown");
2478 }
2479 print_time("start_time", fmt_ctx->start_time, &AV_TIME_BASE_Q);
2480 print_time("duration", fmt_ctx->duration, &AV_TIME_BASE_Q);
2482 else print_str_opt("size", "N/A");
2483 if (fmt_ctx->bit_rate > 0) print_val ("bit_rate", fmt_ctx->bit_rate, unit_bit_per_second_str);
2484 else print_str_opt("bit_rate", "N/A");
2485 print_int("probe_score", fmt_ctx->probe_score);
2487 ret = show_tags(tfc, fmt_ctx->metadata, SECTION_ID_FORMAT_TAGS);
2488
2490 fflush(stdout);
2491 return ret;
2492}
2493
2494static void show_error(AVTextFormatContext *tfc, int err)
2495{
2497 print_int("code", err);
2498 print_str("string", av_err2str(err));
2500}
2501
2502static int get_decoder_by_name(const char *codec_name, const AVCodec **codec)
2503{
2504 if (codec_name == NULL)
2505 return 0;
2506
2507 *codec = avcodec_find_decoder_by_name(codec_name);
2508 if (*codec == NULL) {
2510 "No codec could be found with name '%s'\n", codec_name);
2511 return AVERROR(EINVAL);
2512 }
2513 return 0;
2514}
2515
2517{
2518 int ret;
2519
2520#define GET_DECODER(type_) \
2521 ret = get_decoder_by_name(type_##_codec_name, &fmt_ctx->type_##_codec); \
2522 if (ret < 0) return ret;
2523
2524 GET_DECODER(audio);
2526 GET_DECODER(subtitle);
2527 GET_DECODER(video);
2528 return 0;
2529}
2530
2532{
2533 const AVCodec *codec = NULL;
2534 switch (stream->codecpar->codec_type) {
2535 case AVMEDIA_TYPE_VIDEO: codec = fmt_ctx->video_codec; break;
2536 case AVMEDIA_TYPE_AUDIO: codec = fmt_ctx->audio_codec; break;
2537 case AVMEDIA_TYPE_SUBTITLE: codec = fmt_ctx->subtitle_codec; break;
2538 case AVMEDIA_TYPE_DATA: codec = fmt_ctx->data_codec; break;
2539 }
2540
2541 if (codec != NULL)
2542 return codec;
2543
2544 if (stream->codecpar->codec_id == AV_CODEC_ID_PROBE) {
2546 "Failed to probe codec for input stream %d\n", stream->index);
2547 return NULL;
2548 }
2549
2550 codec = avcodec_find_decoder(stream->codecpar->codec_id);
2551 if (codec == NULL) {
2553 "Unsupported codec with id %d for input stream %d\n",
2554 stream->codecpar->codec_id, stream->index);
2555 return NULL;
2556 }
2557
2558 return codec;
2559}
2560
2561static int open_input_file(InputFile *ifile, const char *filename,
2562 const char *print_filename)
2563{
2564 int err;
2566 const AVDictionaryEntry *t = NULL;
2567 int scan_all_pmts_set = 0;
2568
2570 if (!fmt_ctx)
2571 return AVERROR(ENOMEM);
2572
2573 err = set_decoders(fmt_ctx);
2574 if (err < 0)
2575 return err;
2576 if (!av_dict_get(format_opts, "scan_all_pmts", NULL, AV_DICT_MATCH_CASE)) {
2577 av_dict_set(&format_opts, "scan_all_pmts", "1", AV_DICT_DONT_OVERWRITE);
2578 scan_all_pmts_set = 1;
2579 }
2580 if ((err = avformat_open_input(&fmt_ctx, filename,
2581 iformat, &format_opts)) < 0) {
2582 print_error(filename, err);
2583 return err;
2584 }
2585 if (print_filename) {
2586 av_freep(&fmt_ctx->url);
2587 fmt_ctx->url = av_strdup(print_filename);
2588 }
2589 ifile->fmt_ctx = fmt_ctx;
2590 if (scan_all_pmts_set)
2591 av_dict_set(&format_opts, "scan_all_pmts", NULL, AV_DICT_MATCH_CASE);
2592 while ((t = av_dict_iterate(format_opts, t)))
2593 av_log(NULL, AV_LOG_WARNING, "Option %s skipped - not known to demuxer.\n", t->key);
2594
2595 if (find_stream_info) {
2597 int orig_nb_streams = fmt_ctx->nb_streams;
2598
2600 if (err < 0)
2601 return err;
2602
2604
2605 for (int i = 0; i < orig_nb_streams; i++)
2606 av_dict_free(&opts[i]);
2607 av_freep(&opts);
2608
2609 if (err < 0) {
2610 print_error(filename, err);
2611 return err;
2612 }
2613 }
2614
2615 av_dump_format(fmt_ctx, 0, filename, 0);
2616
2617 ifile->streams = av_calloc(fmt_ctx->nb_streams, sizeof(*ifile->streams));
2618 if (!ifile->streams)
2619 exit(1);
2620 ifile->nb_streams = fmt_ctx->nb_streams;
2621
2622 /* bind a decoder to each input stream */
2623 for (unsigned i = 0; i < fmt_ctx->nb_streams; i++) {
2624 InputStream *ist = &ifile->streams[i];
2625 AVStream *stream = fmt_ctx->streams[i];
2626 const AVCodec *codec;
2627
2628 ist->st = stream;
2629
2630 codec = get_decoder_for_stream(fmt_ctx, stream);
2631 if (!codec)
2632 continue;
2633
2634 {
2636
2638 fmt_ctx, stream, codec, &opts, NULL);
2639 if (err < 0)
2640 exit(1);
2641
2642 ist->dec_ctx = avcodec_alloc_context3(codec);
2643 if (!ist->dec_ctx)
2644 exit(1);
2645
2646 err = avcodec_parameters_to_context(ist->dec_ctx, stream->codecpar);
2647 if (err < 0)
2648 exit(1);
2649
2650 if (do_show_log) {
2651 // For logging it is needed to disable at least frame threads as otherwise
2652 // the log information would need to be reordered and matches up to contexts and frames
2653 // That is in fact possible but not trivial
2654 av_dict_set(&codec_opts, "threads", "1", 0);
2655 }
2656
2657 av_dict_set(&opts, "flags", "+copy_opaque", AV_DICT_MULTIKEY);
2658
2659 ist->dec_ctx->pkt_timebase = stream->time_base;
2660
2661 if (avcodec_open2(ist->dec_ctx, codec, &opts) < 0) {
2662 av_log(NULL, AV_LOG_WARNING, "Could not open codec for input stream %d\n",
2663 stream->index);
2664 exit(1);
2665 }
2666
2667 if ((t = av_dict_iterate(opts, NULL))) {
2668 av_log(NULL, AV_LOG_ERROR, "Option %s for input stream %d not found\n",
2669 t->key, stream->index);
2671 }
2672 }
2673 }
2674
2675 ifile->fmt_ctx = fmt_ctx;
2676 return 0;
2677}
2678
2679static void close_input_file(InputFile *ifile)
2680{
2681
2682 /* close decoder for each stream */
2683 for (int i = 0; i < ifile->nb_streams; i++)
2685
2686 av_freep(&ifile->streams);
2687 ifile->nb_streams = 0;
2688
2690}
2691
2692static int probe_file(AVTextFormatContext *tfc, const char *filename,
2693 const char *print_filename)
2694{
2695 InputFile ifile = { 0 };
2696 int ret;
2697 int section_id;
2698
2702
2703 ret = open_input_file(&ifile, filename, print_filename);
2704 if (ret < 0)
2705 goto end;
2706
2707#define CHECK_END if (ret < 0) goto end
2708
2709 nb_streams = ifile.fmt_ctx->nb_streams;
2715
2716 for (unsigned i = 0; i < ifile.fmt_ctx->nb_streams; i++) {
2717 if (stream_specifier) {
2719 ifile.fmt_ctx->streams[i],
2721 CHECK_END;
2722 else
2723 selected_streams[i] = ret;
2724 ret = 0;
2725 } else {
2726 selected_streams[i] = 1;
2727 }
2728 if (!selected_streams[i])
2730 }
2731
2735 section_id = SECTION_ID_PACKETS_AND_FRAMES;
2736 else if (do_show_packets && !do_show_frames)
2737 section_id = SECTION_ID_PACKETS;
2738 else // (!do_show_packets && do_show_frames)
2739 section_id = SECTION_ID_FRAMES;
2741 avtext_print_section_header(tfc, NULL, section_id);
2742 ret = read_packets(tfc, &ifile);
2745 CHECK_END;
2746 }
2747
2748 if (do_show_programs) {
2749 ret = show_programs(tfc, &ifile);
2750 CHECK_END;
2751 }
2752
2754 ret = show_stream_groups(tfc, &ifile);
2755 CHECK_END;
2756 }
2757
2758 if (do_show_streams) {
2759 ret = show_streams(tfc, &ifile);
2760 CHECK_END;
2761 }
2762 if (do_show_chapters) {
2763 ret = show_chapters(tfc, &ifile);
2764 CHECK_END;
2765 }
2766 if (do_show_format) {
2767 ret = show_format(tfc, &ifile);
2768 CHECK_END;
2769 }
2770
2771end:
2772 if (ifile.fmt_ctx)
2773 close_input_file(&ifile);
2783
2784 return ret;
2785}
2786
2787static void show_usage(void)
2788{
2789 av_log(NULL, AV_LOG_INFO, "Simple multimedia streams analyzer\n");
2790 av_log(NULL, AV_LOG_INFO, "usage: %s [OPTIONS] INPUT_FILE\n", program_name);
2791 av_log(NULL, AV_LOG_INFO, "\n");
2792}
2793
2795{
2796 AVBPrint pbuf;
2798
2800 print_str("version", FFMPEG_VERSION);
2801 print_fmt("copyright", "Copyright (c) %d-%d the FFmpeg developers",
2802 program_birth_year, CONFIG_THIS_YEAR);
2803 print_str("compiler_ident", CC_IDENT);
2804 print_str("configuration", FFMPEG_CONFIGURATION);
2806
2807 av_bprint_finalize(&pbuf, NULL);
2808}
2809
2810#define SHOW_LIB_VERSION(libname, LIBNAME) \
2811 do { \
2812 if (CONFIG_##LIBNAME) { \
2813 unsigned int version = libname##_version(); \
2814 avtext_print_section_header(tfc, NULL, SECTION_ID_LIBRARY_VERSION); \
2815 print_str("name", "lib" #libname); \
2816 print_int("major", LIB##LIBNAME##_VERSION_MAJOR); \
2817 print_int("minor", LIB##LIBNAME##_VERSION_MINOR); \
2818 print_int("micro", LIB##LIBNAME##_VERSION_MICRO); \
2819 print_int("version", version); \
2820 print_str("ident", LIB##LIBNAME##_IDENT); \
2821 avtext_print_section_footer(tfc); \
2822 } \
2823 } while (0)
2824
2826{
2828 SHOW_LIB_VERSION(avutil, AVUTIL);
2829 SHOW_LIB_VERSION(avcodec, AVCODEC);
2830 SHOW_LIB_VERSION(avformat, AVFORMAT);
2831 SHOW_LIB_VERSION(avdevice, AVDEVICE);
2832 SHOW_LIB_VERSION(avfilter, AVFILTER);
2833 SHOW_LIB_VERSION(swscale, SWSCALE);
2834 SHOW_LIB_VERSION(swresample, SWRESAMPLE);
2836}
2837
2838#define PRINT_PIX_FMT_FLAG(flagname, name) \
2839 do { \
2840 print_int(name, !!(pixdesc->flags & AV_PIX_FMT_FLAG_##flagname)); \
2841 } while (0)
2842
2844{
2845 const AVPixFmtDescriptor *pixdesc = NULL;
2846 int i, n;
2847
2849 while (pixdesc = av_pix_fmt_desc_next(pixdesc)) {
2851 print_str("name", pixdesc->name);
2852 print_int("nb_components", pixdesc->nb_components);
2853 if ((pixdesc->nb_components >= 3) && !(pixdesc->flags & AV_PIX_FMT_FLAG_RGB)) {
2854 print_int ("log2_chroma_w", pixdesc->log2_chroma_w);
2855 print_int ("log2_chroma_h", pixdesc->log2_chroma_h);
2856 } else {
2857 print_str_opt("log2_chroma_w", "N/A");
2858 print_str_opt("log2_chroma_h", "N/A");
2859 }
2860 n = av_get_bits_per_pixel(pixdesc);
2861 if (n) print_int ("bits_per_pixel", n);
2862 else print_str_opt("bits_per_pixel", "N/A");
2865 PRINT_PIX_FMT_FLAG(BE, "big_endian");
2866 PRINT_PIX_FMT_FLAG(PAL, "palette");
2867 PRINT_PIX_FMT_FLAG(BITSTREAM, "bitstream");
2868 PRINT_PIX_FMT_FLAG(HWACCEL, "hwaccel");
2869 PRINT_PIX_FMT_FLAG(PLANAR, "planar");
2870 PRINT_PIX_FMT_FLAG(RGB, "rgb");
2871 PRINT_PIX_FMT_FLAG(ALPHA, "alpha");
2873 }
2874 if (do_show_pixel_format_components && (pixdesc->nb_components > 0)) {
2876 for (i = 0; i < pixdesc->nb_components; i++) {
2878 print_int("index", i + 1);
2879 print_int("bit_depth", pixdesc->comp[i].depth);
2881 }
2883 }
2885 }
2887}
2888
2889static int opt_show_optional_fields(void *optctx, const char *opt, const char *arg)
2890{
2894
2896 double num;
2897 int ret = parse_number("show_optional_fields", arg, OPT_TYPE_INT,
2899 if (ret < 0)
2900 return ret;
2902 }
2903 return 0;
2904}
2905
2906static int opt_format(void *optctx, const char *opt, const char *arg)
2907{
2909 if (!iformat) {
2910 av_log(NULL, AV_LOG_ERROR, "Unknown input format: %s\n", arg);
2911 return AVERROR(EINVAL);
2912 }
2913 return 0;
2914}
2915
2916static inline void mark_section_show_entries(SectionID section_id,
2917 int show_all_entries, AVDictionary *entries,
2918 int explicitly_selected)
2919{
2920 EntrySelection *selection = &selected_entries[section_id];
2921
2922 selection->show_all_entries = show_all_entries;
2923 selection->explicitly_selected |= explicitly_selected;
2924 if (show_all_entries) {
2925 const AVTextFormatSection *section = &sections[section_id];
2926 for (const int *id = section->children_ids; *id != -1; id++)
2927 mark_section_show_entries(*id, show_all_entries, entries, explicitly_selected);
2928 } else {
2929 av_dict_copy(&selection->entries_to_show, entries, 0);
2930 }
2931}
2932
2933static int match_section(const char *section_name,
2934 int show_all_entries, AVDictionary *entries)
2935{
2936 int ret = 0;
2937
2938 for (unsigned i = 0; i < FF_ARRAY_ELEMS(sections); i++) {
2939 const struct AVTextFormatSection *section = &sections[i];
2940 if (!strcmp(section_name, section->name) ||
2941 (section->unique_name && !strcmp(section_name, section->unique_name))) {
2943 "'%s' matches section with unique name '%s'\n", section_name,
2944 (char *)av_x_if_null(section->unique_name, section->name));
2945 ret++;
2946 mark_section_show_entries(section->id, show_all_entries, entries,
2947 !section->unique_name ||
2948 !strcmp(section_name, section->unique_name));
2949 }
2950 }
2951 return ret;
2952}
2953
2954static int opt_show_entries(void *optctx, const char *opt, const char *arg)
2955{
2956 const char *p = arg;
2957 int ret = 0;
2958
2959 while (*p) {
2960 AVDictionary *entries = NULL;
2961 char *section_name = av_get_token(&p, "=:");
2962 int show_all_entries = 0;
2963
2964 if (!section_name) {
2966 "Missing section name for option '%s'\n", opt);
2967 return AVERROR(EINVAL);
2968 }
2969
2970 if (*p == '=') {
2971 p++;
2972 while (*p && *p != ':') {
2973 char *entry = av_get_token(&p, ",:");
2974 if (!entry)
2975 break;
2977 "Adding '%s' to the entries to show in section '%s'\n",
2978 entry, section_name);
2980 if (*p == ',')
2981 p++;
2982 }
2983 } else {
2984 show_all_entries = 1;
2985 }
2986
2987 ret = match_section(section_name, show_all_entries, entries);
2988 if (ret == 0) {
2989 av_log(NULL, AV_LOG_ERROR, "No match for section '%s'\n", section_name);
2990 ret = AVERROR(EINVAL);
2991 }
2992 av_dict_free(&entries);
2993 av_free(section_name);
2994
2995 if (ret <= 0)
2996 break;
2997 if (*p)
2998 p++;
2999 }
3000
3001 return ret;
3002}
3003
3004static int opt_input_file(void *optctx, const char *arg)
3005{
3006 if (input_filename) {
3008 "Argument '%s' provided as input filename, but '%s' was already specified.\n",
3010 return AVERROR(EINVAL);
3011 }
3012 if (!strcmp(arg, "-"))
3013 arg = "fd:";
3015 if (!input_filename)
3016 return AVERROR(ENOMEM);
3017
3018 return 0;
3019}
3020
3021static int opt_input_file_i(void *optctx, const char *opt, const char *arg)
3022{
3023 opt_input_file(optctx, arg);
3024 return 0;
3025}
3026
3027static int opt_output_file_o(void *optctx, const char *opt, const char *arg)
3028{
3029 if (output_filename) {
3031 "Argument '%s' provided as output filename, but '%s' was already specified.\n",
3033 return AVERROR(EINVAL);
3034 }
3035 if (!strcmp(arg, "-"))
3036 arg = "fd:";
3038 if (!output_filename)
3039 return AVERROR(ENOMEM);
3040
3041 return 0;
3042}
3043
3044static int opt_print_filename(void *optctx, const char *opt, const char *arg)
3045{
3048 return print_input_filename ? 0 : AVERROR(ENOMEM);
3049}
3050
3061
3062/**
3063 * Parse interval specification, according to the format:
3064 * INTERVAL ::= [START|+START_OFFSET][%[END|+END_OFFSET]]
3065 * INTERVALS ::= INTERVAL[,INTERVALS]
3066*/
3067static int parse_read_interval(const char *interval_spec,
3068 ReadInterval *interval)
3069{
3070 int ret = 0;
3071 char *next, *p, *spec = av_strdup(interval_spec);
3072 if (!spec)
3073 return AVERROR(ENOMEM);
3074
3075 if (!*spec) {
3076 av_log(NULL, AV_LOG_ERROR, "Invalid empty interval specification\n");
3077 ret = AVERROR(EINVAL);
3078 goto end;
3079 }
3080
3081 p = spec;
3082 next = strchr(spec, '%');
3083 if (next)
3084 *next++ = 0;
3085
3086 /* parse first part */
3087 if (*p) {
3088 interval->has_start = 1;
3089
3090 if (*p == '+') {
3091 interval->start_is_offset = 1;
3092 p++;
3093 } else {
3094 interval->start_is_offset = 0;
3095 }
3096
3097 ret = av_parse_time(&interval->start, p, 1);
3098 if (ret < 0) {
3099 av_log(NULL, AV_LOG_ERROR, "Invalid interval start specification '%s'\n", p);
3100 goto end;
3101 }
3102 } else {
3103 interval->has_start = 0;
3104 }
3105
3106 /* parse second part */
3107 p = next;
3108 if (p && *p) {
3109 int64_t us;
3110 interval->has_end = 1;
3111
3112 if (*p == '+') {
3113 interval->end_is_offset = 1;
3114 p++;
3115 } else {
3116 interval->end_is_offset = 0;
3117 }
3118
3119 if (interval->end_is_offset && *p == '#') {
3120 long long int lli;
3121 char *tail;
3122 interval->duration_frames = 1;
3123 p++;
3124 lli = strtoll(p, &tail, 10);
3125 if (*tail || lli < 0) {
3127 "Invalid or negative value '%s' for duration number of frames\n", p);
3128 goto end;
3129 }
3130 interval->end = lli;
3131 } else {
3132 interval->duration_frames = 0;
3133 ret = av_parse_time(&us, p, 1);
3134 if (ret < 0) {
3135 av_log(NULL, AV_LOG_ERROR, "Invalid interval end/duration specification '%s'\n", p);
3136 goto end;
3137 }
3138 interval->end = us;
3139 }
3140 } else {
3141 interval->has_end = 0;
3142 }
3143
3144end:
3145 av_free(spec);
3146 return ret;
3147}
3148
3149static int parse_read_intervals(const char *intervals_spec)
3150{
3151 int ret, n, i;
3152 char *p, *spec = av_strdup(intervals_spec);
3153 if (!spec)
3154 return AVERROR(ENOMEM);
3155
3156 /* preparse specification, get number of intervals */
3157 for (n = 0, p = spec; *p; p++)
3158 if (*p == ',')
3159 n++;
3160 n++;
3161
3163 if (!read_intervals) {
3164 ret = AVERROR(ENOMEM);
3165 goto end;
3166 }
3168
3169 /* parse intervals */
3170 p = spec;
3171 for (i = 0; p; i++) {
3172 char *next;
3173
3175 next = strchr(p, ',');
3176 if (next)
3177 *next++ = 0;
3178
3179 read_intervals[i].id = i;
3181 if (ret < 0) {
3182 av_log(NULL, AV_LOG_ERROR, "Error parsing read interval #%d '%s'\n",
3183 i, p);
3184 goto end;
3185 }
3186 av_log(NULL, AV_LOG_VERBOSE, "Parsed log interval ");
3188 p = next;
3189 }
3191
3192end:
3193 av_free(spec);
3194 return ret;
3195}
3196
3197static int opt_read_intervals(void *optctx, const char *opt, const char *arg)
3198{
3199 return parse_read_intervals(arg);
3200}
3201
3202static int opt_pretty(void *optctx, const char *opt, const char *arg)
3203{
3204 show_value_unit = 1;
3205 use_value_prefix = 1;
3208 return 0;
3209}
3210
3211static void print_section(SectionID id, int level)
3212{
3213 const int *pid;
3214 const struct AVTextFormatSection *section = &sections[id];
3215 printf("%c%c%c%c",
3216 section->flags & AV_TEXTFORMAT_SECTION_FLAG_IS_WRAPPER ? 'W' : '.',
3217 section->flags & AV_TEXTFORMAT_SECTION_FLAG_IS_ARRAY ? 'A' : '.',
3219 section->flags & AV_TEXTFORMAT_SECTION_FLAG_HAS_TYPE ? 'T' : '.');
3220 printf("%*c %s", level * 4, ' ', section->name);
3221 if (section->unique_name)
3222 printf("/%s", section->unique_name);
3223 printf("\n");
3224
3225 for (pid = section->children_ids; *pid != -1; pid++)
3226 print_section(*pid, level+1);
3227}
3228
3229static int opt_sections(void *optctx, const char *opt, const char *arg)
3230{
3231 printf("Sections:\n"
3232 "W... = Section is a wrapper (contains other sections, no local entries)\n"
3233 ".A.. = Section contains an array of elements of the same type\n"
3234 "..V. = Section may contain a variable number of fields with variable keys\n"
3235 "...T = Section contain a unique type\n"
3236 "FLAGS NAME/UNIQUE_NAME\n"
3237 "----\n");
3239 return 0;
3240}
3241
3242static int opt_codec(void *optctx, const char *opt, const char *arg)
3243{
3244 const char *spec = strchr(opt, ':');
3245 const char **name;
3246 if (!spec) {
3248 "No media specifier was specified for '%s' in option '%s'. Use -%s:<media_spec> "
3249 "where <media_spec> can be one of: 'a' (audio), 'v' (video), 's' (subtitle), 'd' (data)\n",
3250 arg, opt, opt);
3251 return AVERROR(EINVAL);
3252 }
3253 spec++;
3254
3255 switch (spec[0]) {
3256 case 'a' : name = &audio_codec_name; break;
3257 case 'd' : name = &data_codec_name; break;
3258 case 's' : name = &subtitle_codec_name; break;
3259 case 'v' : name = &video_codec_name; break;
3260 default:
3262 "Invalid media specifier '%s' in option '%s'. "
3263 "Must be one of: 'a' (audio), 'v' (video), 's' (subtitle), 'd' (data)\n", spec, opt);
3264 return AVERROR(EINVAL);
3265 }
3266
3267 av_freep(name);
3268 *name = av_strdup(arg);
3269 return *name ? 0 : AVERROR(ENOMEM);
3270}
3271
3272static int opt_show_versions(void *optctx, const char *opt, const char *arg)
3273{
3276 return 0;
3277}
3278
3279#define DEFINE_OPT_SHOW_SECTION(section, target_section_id) \
3280 static int opt_show_##section(void *optctx, const char *opt, const char *arg) \
3281 { \
3282 mark_section_show_entries(SECTION_ID_##target_section_id, 1, NULL, 1); \
3283 return 0; \
3284 }
3285
3286DEFINE_OPT_SHOW_SECTION(chapters, CHAPTERS)
3290DEFINE_OPT_SHOW_SECTION(library_versions, LIBRARY_VERSIONS)
3291DEFINE_OPT_SHOW_SECTION(packets, PACKETS)
3293DEFINE_OPT_SHOW_SECTION(program_version, PROGRAM_VERSION)
3294DEFINE_OPT_SHOW_SECTION(streams, STREAMS)
3295DEFINE_OPT_SHOW_SECTION(programs, PROGRAMS)
3296DEFINE_OPT_SHOW_SECTION(stream_groups, STREAM_GROUPS)
3297
3298static const OptionDef real_options[] = {
3300 { "f", OPT_TYPE_FUNC, OPT_FUNC_ARG, {.func_arg = opt_format}, "force format", "format" },
3301 { "unit", OPT_TYPE_BOOL, 0, {&show_value_unit}, "show unit of the displayed values" },
3302 { "prefix", OPT_TYPE_BOOL, 0, {&use_value_prefix}, "use SI prefixes for the displayed values" },
3303 { "byte_binary_prefix", OPT_TYPE_BOOL, 0, {&use_byte_value_binary_prefix},
3304 "use binary prefixes for byte units" },
3305 { "sexagesimal", OPT_TYPE_BOOL, 0, {&use_value_sexagesimal_format},
3306 "use sexagesimal format HOURS:MM:SS.MICROSECONDS for time units" },
3307 { "pretty", OPT_TYPE_FUNC, 0, {.func_arg = opt_pretty},
3308 "prettify the format of displayed values, make it more human readable" },
3309 { "output_format", OPT_TYPE_STRING, 0, { &output_format },
3310 "set the output printing format (available formats are: default, compact, csv, flat, ini, json, xml)", "format" },
3311 { "print_format", OPT_TYPE_STRING, 0, { &output_format }, "alias for -output_format (deprecated)" },
3312 { "of", OPT_TYPE_STRING, 0, { &output_format }, "alias for -output_format", "format" },
3313 { "select_streams", OPT_TYPE_STRING, 0, { &stream_specifier }, "select the specified streams", "stream_specifier" },
3314 { "sections", OPT_TYPE_FUNC, OPT_EXIT, {.func_arg = opt_sections}, "print sections structure and section information, and exit" },
3315 { "data_dump_format", OPT_TYPE_STRING, 0, { &data_dump_format }, "set data dump format (available formats are: xxd, base64)" },
3316 { "show_data", OPT_TYPE_BOOL, 0, { &do_show_data }, "show packets data" },
3317 { "show_data_hash", OPT_TYPE_STRING, 0, { &show_data_hash }, "show packets data hash" },
3318 { "show_error", OPT_TYPE_FUNC, 0, { .func_arg = &opt_show_error }, "show probing error" },
3319 { "show_format", OPT_TYPE_FUNC, 0, { .func_arg = &opt_show_format }, "show format/container info" },
3320 { "show_frames", OPT_TYPE_FUNC, 0, { .func_arg = &opt_show_frames }, "show frames info" },
3321 { "show_entries", OPT_TYPE_FUNC, OPT_FUNC_ARG, {.func_arg = opt_show_entries},
3322 "show a set of specified entries", "entry_list" },
3323#if HAVE_THREADS
3324 { "show_log", OPT_TYPE_INT, 0, { &do_show_log }, "show log" },
3325#endif
3326 { "show_packets", OPT_TYPE_FUNC, 0, { .func_arg = &opt_show_packets }, "show packets info" },
3327 { "show_programs", OPT_TYPE_FUNC, 0, { .func_arg = &opt_show_programs }, "show programs info" },
3328 { "show_stream_groups", OPT_TYPE_FUNC, 0, { .func_arg = &opt_show_stream_groups }, "show stream groups info" },
3329 { "show_streams", OPT_TYPE_FUNC, 0, { .func_arg = &opt_show_streams }, "show streams info" },
3330 { "show_chapters", OPT_TYPE_FUNC, 0, { .func_arg = &opt_show_chapters }, "show chapters info" },
3331 { "count_frames", OPT_TYPE_BOOL, 0, { &do_count_frames }, "count the number of frames per stream" },
3332 { "count_packets", OPT_TYPE_BOOL, 0, { &do_count_packets }, "count the number of packets per stream" },
3333 { "show_program_version", OPT_TYPE_FUNC, 0, { .func_arg = &opt_show_program_version }, "show ffprobe version" },
3334 { "show_library_versions", OPT_TYPE_FUNC, 0, { .func_arg = &opt_show_library_versions }, "show library versions" },
3335 { "show_versions", OPT_TYPE_FUNC, 0, { .func_arg = &opt_show_versions }, "show program and library versions" },
3336 { "show_pixel_formats", OPT_TYPE_FUNC, 0, { .func_arg = &opt_show_pixel_formats }, "show pixel format descriptions" },
3337 { "show_optional_fields", OPT_TYPE_FUNC, OPT_FUNC_ARG, { .func_arg = &opt_show_optional_fields }, "show optional fields" },
3338 { "show_private_data", OPT_TYPE_BOOL, 0, { &show_private_data }, "show private data" },
3339 { "private", OPT_TYPE_BOOL, 0, { &show_private_data }, "same as show_private_data" },
3340 { "analyze_frames", OPT_TYPE_BOOL, 0, { &do_analyze_frames }, "analyze frames to provide additional stream-level information" },
3341 { "bitexact", OPT_TYPE_BOOL, 0, {&do_bitexact}, "force bitexact output" },
3342 { "read_intervals", OPT_TYPE_FUNC, OPT_FUNC_ARG, {.func_arg = opt_read_intervals}, "set read intervals", "read_intervals" },
3343 { "i", OPT_TYPE_FUNC, OPT_FUNC_ARG, {.func_arg = opt_input_file_i}, "read specified file", "input_file"},
3344 { "o", OPT_TYPE_FUNC, OPT_FUNC_ARG, {.func_arg = opt_output_file_o}, "write to specified output", "output_file"},
3345 { "print_filename", OPT_TYPE_FUNC, OPT_FUNC_ARG, {.func_arg = opt_print_filename}, "override the printed input filename", "print_file"},
3346 { "find_stream_info", OPT_TYPE_BOOL, OPT_INPUT | OPT_EXPERT, { &find_stream_info },
3347 "read and decode the streams to fill missing information with heuristics" },
3348 { "c", OPT_TYPE_FUNC, OPT_FUNC_ARG, { .func_arg = opt_codec}, "force decoder", "decoder_name" },
3349 { "codec", OPT_TYPE_FUNC, OPT_FUNC_ARG, { .func_arg = opt_codec}, "alias for -c (force decoder)", "decoder_name" },
3350 { NULL, },
3351};
3352
3353static inline int check_section_show_entries(int section_id, int require_explicit)
3354{
3355 const EntrySelection *selection = &selected_entries[section_id];
3356
3357 /* A shared stream section must not implicitly enable programs or groups. */
3358 if (section_id == SECTION_ID_PROGRAM_STREAMS ||
3359 section_id == SECTION_ID_STREAM_GROUP_STREAMS)
3360 require_explicit = 1;
3361
3362 if ((!require_explicit || selection->explicitly_selected) &&
3363 (selection->show_all_entries || selection->entries_to_show))
3364 return 1;
3365
3366 const AVTextFormatSection *section = &sections[section_id];
3367 for (const int *id = section->children_ids; *id != -1; id++)
3368 if (check_section_show_entries(*id, require_explicit))
3369 return 1;
3370 return 0;
3371}
3372
3373#define SET_DO_SHOW(id, varname) do { \
3374 if (check_section_show_entries(SECTION_ID_##id, 0)) \
3375 do_show_##varname = 1; \
3376 } while (0)
3377
3378int main(int argc, char **argv)
3379{
3380 const AVTextFormatter *f;
3381 AVTextFormatContext *tctx;
3382 AVTextWriterContext *wctx;
3383 char *buf;
3384 char *f_name = NULL, *f_args = NULL;
3385 int ret, input_ret;
3387
3388 init_dynload();
3389
3390 setvbuf(stderr, NULL, _IONBF, 0); /* win32 runtime needs this */
3391
3393
3395 parse_loglevel(argc, argv, options);
3397#if CONFIG_AVDEVICE
3399#endif
3400
3401 show_banner(argc, argv, options);
3402 ret = parse_options(NULL, argc, argv, options, opt_input_file);
3403 if (ret < 0) {
3404 ret = (ret == AVERROR_EXIT) ? 0 : ret;
3405 goto end;
3406 }
3407
3408 if (do_show_log)
3410
3411 /* mark things to show, based on -show_entries */
3412 SET_DO_SHOW(CHAPTERS, chapters);
3414 SET_DO_SHOW(FORMAT, format);
3415 SET_DO_SHOW(FRAMES, frames);
3416 SET_DO_SHOW(LIBRARY_VERSIONS, library_versions);
3417 SET_DO_SHOW(PACKETS, packets);
3418 SET_DO_SHOW(PIXEL_FORMATS, pixel_formats);
3419 SET_DO_SHOW(PIXEL_FORMAT_FLAGS, pixel_format_flags);
3420 SET_DO_SHOW(PIXEL_FORMAT_COMPONENTS, pixel_format_components);
3421 SET_DO_SHOW(PROGRAM_VERSION, program_version);
3422 SET_DO_SHOW(PROGRAMS, programs);
3423 SET_DO_SHOW(STREAM_GROUP_DISPOSITION, stream_group_disposition);
3424 SET_DO_SHOW(STREAM_GROUPS, stream_groups);
3425 SET_DO_SHOW(STREAM_GROUP_COMPONENTS, stream_group_components);
3426 SET_DO_SHOW(STREAMS, streams);
3427 SET_DO_SHOW(STREAM_DISPOSITION, stream_disposition);
3428 SET_DO_SHOW(PROGRAM_STREAM_DISPOSITION, stream_disposition);
3429 SET_DO_SHOW(STREAM_GROUP_STREAM_DISPOSITION, stream_disposition);
3430
3431 SET_DO_SHOW(CHAPTER_TAGS, chapter_tags);
3432 SET_DO_SHOW(FORMAT_TAGS, format_tags);
3433 SET_DO_SHOW(FRAME_TAGS, frame_tags);
3434 SET_DO_SHOW(PROGRAM_TAGS, program_tags);
3435 SET_DO_SHOW(STREAM_GROUP_TAGS, stream_group_tags);
3436 SET_DO_SHOW(STREAM_TAGS, stream_tags);
3437 SET_DO_SHOW(PROGRAM_STREAM_TAGS, stream_tags);
3438 SET_DO_SHOW(STREAM_GROUP_STREAM_TAGS, stream_tags);
3439 SET_DO_SHOW(PACKET_TAGS, packet_tags);
3440
3443 "-bitexact and -show_program_version or -show_library_versions "
3444 "options are incompatible\n");
3445 ret = AVERROR(EINVAL);
3446 goto end;
3447 }
3448
3449 if (!output_format)
3450 output_format = av_strdup("default");
3451 if (!output_format) {
3452 ret = AVERROR(ENOMEM);
3453 goto end;
3454 }
3455 f_name = av_strtok(output_format, "=", &buf);
3456 if (!f_name) {
3458 "No name specified for the output format\n");
3459 ret = AVERROR(EINVAL);
3460 goto end;
3461 }
3462 f_args = buf;
3463
3465 if (!f) {
3466 av_log(NULL, AV_LOG_ERROR, "Unknown output format with name '%s'\n", f_name);
3467 ret = AVERROR(EINVAL);
3468 goto end;
3469 }
3471 av_log(NULL, AV_LOG_ERROR, "Output format '%s' can only draw filter graphs\n", f_name);
3472 ret = AVERROR(EINVAL);
3473 goto end;
3474 }
3475
3476 if (data_dump_format) {
3477 if (!strcmp(data_dump_format, "xxd")) {
3478 data_dump_format_id = AV_TEXTFORMAT_DATADUMP_XXD;
3479 } else if (!strcmp(data_dump_format, "base64")) {
3480 data_dump_format_id = AV_TEXTFORMAT_DATADUMP_BASE64;
3481 } else {
3482 av_log(NULL, AV_LOG_ERROR, "Unknown data dump format with name '%s'\n", data_dump_format);
3483 ret = AVERROR(EINVAL);
3484 goto end;
3485 }
3486 }
3487
3488 if (output_filename) {
3490 } else
3491 ret = avtextwriter_create_stdout(&wctx);
3492
3493 if (ret < 0)
3494 goto end;
3495
3496 AVTextFormatOptions tf_options = {
3497 .is_key_selected = is_key_selected_callback,
3498 .show_optional_fields = show_optional_fields,
3499 .show_value_unit = show_value_unit,
3500 .use_value_prefix = use_value_prefix,
3501 .use_byte_value_binary_prefix = use_byte_value_binary_prefix,
3502 .use_value_sexagesimal_format = use_value_sexagesimal_format,
3503 .data_dump_format = data_dump_format_id,
3504 };
3505
3506 if ((ret = avtext_context_open(&tctx, f, wctx, f_args, sections, FF_ARRAY_ELEMS(sections), tf_options, show_data_hash)) >= 0) {
3507 if (f == &avtextformatter_xml)
3509
3511
3518
3519 if (!input_filename &&
3522 show_usage();
3523 av_log(NULL, AV_LOG_ERROR, "You have to specify one input file.\n");
3524 av_log(NULL, AV_LOG_ERROR, "Use -h to get full help or, even better, run 'man %s'.\n", program_name);
3525 ret = AVERROR(EINVAL);
3526 } else if (input_filename) {
3528 if (ret < 0 && do_show_error)
3529 show_error(tctx, ret);
3530 }
3531
3532 input_ret = ret;
3533
3535
3536 ret = avtextwriter_context_close(&wctx);
3537 if (ret < 0)
3538 av_log(NULL, AV_LOG_ERROR, "Writing output failed (closing writer): %s\n", av_err2str(ret));
3539
3540 ret = avtext_context_close(&tctx);
3541 if (ret < 0)
3542 av_log(NULL, AV_LOG_ERROR, "Writing output failed (closing formatter): %s\n", av_err2str(ret));
3543
3544 ret = FFMIN(ret, input_ret);
3545 }
3546
3547end:
3553
3554 uninit_opts();
3555 for (size_t i = 0; i < FF_ARRAY_ELEMS(selected_entries); ++i)
3556 av_dict_free(&selected_entries[i].entries_to_show);
3557
3559
3560 return ret < 0;
3561}
SwsAArch64OpImplParams params
Definition ops.c:51
static double val(void *priv, double ch)
Definition aeval.c:77
static const char *const format[]
Definition af_aiir.c:445
#define entry
static int frames
static AVDictionary * opts
int32_t
simple assert() macros that are a bit more flexible than ISO C assert().
#define av_assert0(cond)
assert() equivalent, that is always enabled.
Definition avassert.h:42
Libavcodec external API header.
Main libavdevice API header.
Main libavformat public API header.
@ AV_STREAM_GROUP_PARAMS_NONE
Definition avformat.h:1150
@ AV_STREAM_GROUP_PARAMS_IAMF_MIX_PRESENTATION
Definition avformat.h:1152
@ AV_STREAM_GROUP_PARAMS_TILE_GRID
Definition avformat.h:1153
@ AV_STREAM_GROUP_PARAMS_IAMF_AUDIO_ELEMENT
Definition avformat.h:1151
#define AVFMT_SHOW_IDS
Show format stream IDs numbers.
Definition avformat.h:498
const char * av_disposition_to_string(int disposition)
Definition options.c:590
int64_t avio_size(AVIOContext *s)
Get the filesize.
Definition aviobuf.c:326
int avtext_context_open(AVTextFormatContext **ptctx, const AVTextFormatter *formatter, AVTextWriterContext *writer_context, const char *args, const AVTextFormatSection *sections, int nb_sections, AVTextFormatOptions options, char *show_data_hash)
void avtext_print_data(AVTextFormatContext *tctx, const char *key, const uint8_t *data, int size)
int avtext_print_string(AVTextFormatContext *tctx, const char *key, const char *val, int flags)
int avtext_context_close(AVTextFormatContext **ptctx)
void avtext_print_data_hash(AVTextFormatContext *tctx, const char *key, const uint8_t *data, int size)
void avtext_print_section_header(AVTextFormatContext *tctx, const void *data, int section_id)
void avtext_print_section_footer(AVTextFormatContext *tctx)
const AVTextFormatter * avtext_get_formatter_by_name(const char *name)
int avtextwriter_context_close(AVTextWriterContext **pwctx)
AVTextFormatDataDump
@ AV_TEXTFORMAT_DATADUMP_BASE64
@ AV_TEXTFORMAT_DATADUMP_XXD
#define AV_TEXTFORMAT_SECTION_FLAG_HAS_TYPE
For these sections the element_name field is mandatory.
#define AV_TEXTFORMAT_SECTION_FLAG_IS_WRAPPER
the section only contains other sections, but has no data at its own level
#define AV_TEXTFORMAT_SECTION_FLAG_HAS_VARIABLE_FIELDS
the section may contain a variable number of fields with variable keys.
@ AV_TEXTFORMAT_VALUE_FMT_BYTE
#define AV_TEXTFORMAT_SECTION_FLAG_IS_ARRAY
the section contains an array of elements of the same type
#define AV_TEXTFORMAT_FLAG_SUPPORTS_MIXED_ARRAY_CONTENT
#define AV_TEXTFORMAT_SECTION_FLAG_NUMBERING_BY_TYPE
the items in this array section should be numbered individually by type
#define AV_TEXTFORMAT_FLAG_IS_DIAGRAM_FORMATTER
const AVTextFormatter avtextformatter_xml
Definition tf_xml.c:202
int avtextwriter_create_stdout(AVTextWriterContext **pwctx)
Definition tw_stdout.c:71
int avtextwriter_create_file(AVTextWriterContext **pwctx, const char *output_filename)
Definition tw_avio.c:79
Convenience header that includes libavutil's core.
void av_bprintf(AVBPrint *buf, const char *fmt,...)
Definition bprint.c:121
void av_bprint_init(AVBPrint *buf, unsigned size_init, unsigned size_max)
Definition bprint.c:68
AVBPrint public header.
#define AV_BPRINT_SIZE_UNLIMITED
#define AV_BPRINT_SIZE_AUTOMATIC
static int FUNC metadata(CodedBitstreamContext *ctx, RWContext *rw, APVRawMetadata *current)
#define i(width, name, range_min, range_max)
Definition cbs_h264.c:63
#define f(width, name)
Definition cbs_vp8.c:236
#define s(width, name)
Definition cbs_vp9.c:198
Public libavutil channel layout APIs header.
void show_help_children(const AVClass *class, int flags)
Show help for all options with given flags in class and all its children.
Definition cmdutils.c:138
void init_dynload(void)
Initialize dynamic library loading.
Definition cmdutils.c:73
void parse_loglevel(int argc, char **argv, const OptionDef *options)
Find the '-loglevel' option in the command line args and apply it.
Definition cmdutils.c:554
void show_help_options(const OptionDef *options, const char *msg, int req_flags, int rej_flags)
Print help for all options matching specified flags.
Definition cmdutils.c:105
void log_callback_help(void *ptr, int level, const char *fmt, va_list vl)
Trivial log callback.
Definition cmdutils.c:68
AVDictionary * format_opts
Definition cmdutils.c:56
int parse_options(void *optctx, int argc, char **argv, const OptionDef *options, int(*parse_arg_function)(void *, const char *))
Parse the command line arguments.
Definition cmdutils.c:418
int filter_codec_opts(const AVDictionary *opts, enum AVCodecID codec_id, AVFormatContext *s, AVStream *st, const AVCodec *codec, AVDictionary **dst, AVDictionary **opts_used)
Filter out options for given codec.
Definition cmdutils.c:1421
AVDictionary * codec_opts
Definition cmdutils.c:56
void uninit_opts(void)
Uninitialize the cmdutils option system, in particular free the *_opts contexts and their contents.
Definition cmdutils.c:60
int setup_find_stream_info_opts(AVFormatContext *s, AVDictionary *local_codec_opts, AVDictionary ***dst)
Setup AVCodecContext options for avformat_find_stream_info().
Definition cmdutils.c:1489
int parse_number(const char *context, const char *numstr, enum OptionType type, double min, double max, double *dst)
Parse a string and return its corresponding value as a double.
Definition cmdutils.c:82
const char program_name[]
program name, defined by the program for show_version().
Definition ffmpeg.c:89
#define OPT_FUNC_ARG
Definition cmdutils.h:205
#define OPT_INPUT
Definition cmdutils.h:237
static void print_error(const char *filename, int err)
Print an error message to stderr, indicating filename and a human readable description of the error c...
Definition cmdutils.h:472
@ OPT_TYPE_BOOL
Definition cmdutils.h:82
@ OPT_TYPE_STRING
Definition cmdutils.h:83
@ OPT_TYPE_INT
Definition cmdutils.h:84
@ OPT_TYPE_FUNC
Definition cmdutils.h:81
void show_banner(int argc, char **argv, const OptionDef *options)
Print the program banner to stderr.
Definition opt_common.c:240
#define OPT_EXPERT
Definition cmdutils.h:211
#define OPT_EXIT
Definition cmdutils.h:207
const int program_birth_year
program birth year, defined by the program for show_banner()
Definition ffmpeg.c:90
int avcodec_parameters_to_context(AVCodecContext *codec, const AVCodecParameters *par)
Definition codec_par.c:206
#define NULL
Definition coverity.c:32
long long int64_t
Definition coverity.c:34
static const AVColorPrimariesDesc color_primaries[AVCOL_PRI_NB]
Definition csp.c:76
__device__ int printf(const char *,...)
static AVFormatContext * fmt_ctx
static AVCodecContext * dec_ctx
#define AV_PROFILE_UNKNOWN
Definition defs.h:65
#define AV_LEVEL_UNKNOWN
Definition defs.h:223
@ AV_FIELD_TT
Top coded_first, top displayed first.
Definition defs.h:228
@ AV_FIELD_BB
Bottom coded first, bottom displayed first.
Definition defs.h:229
@ AV_FIELD_PROGRESSIVE
Definition defs.h:227
@ AV_FIELD_BT
Bottom coded first, top displayed first.
Definition defs.h:231
@ AV_FIELD_TB
Top coded first, bottom displayed first.
Definition defs.h:230
AVAudioServiceType
Definition defs.h:249
static AVPacket * pkt
static enum AVPixelFormat pix_fmt
static AVFrame * frame
Public dictionary API.
Display matrix.
DOVI configuration.
static av_always_inline AVDOVIColorMetadata * av_dovi_get_color(const AVDOVIMetadata *data)
Definition dovi_meta.h:375
static av_always_inline AVDOVIRpuDataHeader * av_dovi_get_header(const AVDOVIMetadata *data)
Definition dovi_meta.h:363
@ AV_DOVI_COMPRESSION_EXTENDED
Definition dovi_meta.h:71
@ AV_DOVI_COMPRESSION_LIMITED
Definition dovi_meta.h:69
@ AV_DOVI_COMPRESSION_NONE
Definition dovi_meta.h:68
@ AV_DOVI_COMPRESSION_RESERVED
Definition dovi_meta.h:70
@ AV_DOVI_MAPPING_MMR
Definition dovi_meta.h:109
@ AV_DOVI_MAPPING_POLYNOMIAL
Definition dovi_meta.h:108
@ AV_DOVI_NLQ_NONE
Definition dovi_meta.h:131
@ AV_DOVI_NLQ_LINEAR_DZ
Definition dovi_meta.h:132
static av_always_inline AVDOVIDataMapping * av_dovi_get_mapping(const AVDOVIMetadata *data)
Definition dovi_meta.h:369
int main
Definition dovi_rpuenc.c:38
audio downmix medatata
@ ALPHA
Definition drawutils.c:33
enum AVCodecID id
Definition dts2pts.c:607
static void comp(unsigned char *dst, ptrdiff_t dst_stride, unsigned char *src, ptrdiff_t src_stride, int add)
Definition eamad.c:79
const char * key
static int opt_format(void *optctx, const char *opt, const char *arg)
Definition ffplay.c:4572
static int find_stream_info
Definition ffplay.c:425
static int opt_codec(void *optctx, const char *opt, const char *arg)
Definition ffplay.c:4630
static int opt_input_file(void *optctx, const char *filename)
Definition ffplay.c:4613
static const char * video_codec_name
Definition ffplay.c:417
static const char * input_filename
Definition ffplay.c:378
static const char * audio_codec_name
Definition ffplay.c:415
static const char * subtitle_codec_name
Definition ffplay.c:416
static void show_usage(void)
Definition ffprobe.c:2787
static char * stream_specifier
Definition ffprobe.c:146
static void log_callback(void *ptr, int level, const char *fmt, va_list vl)
Definition ffprobe.c:382
#define print_list_fmt(k, f, n, m,...)
Definition ffprobe.c:438
static void print_pixel_format(AVTextFormatContext *tfc, enum AVPixelFormat pix_fmt)
Definition ffprobe.c:1214
SectionID
Definition ffprobe.c:165
@ SECTION_ID_FRAME_SIDE_DATA
Definition ffprobe.c:176
@ SECTION_ID_STREAM_TAGS
Definition ffprobe.c:230
@ SECTION_ID_STREAM_GROUP_PIECES
Definition ffprobe.c:213
@ SECTION_ID_PROGRAM_STREAM
Definition ffprobe.c:202
@ SECTION_ID_PACKET
Definition ffprobe.c:187
@ SECTION_ID_STREAM_GROUP_SUBPIECES
Definition ffprobe.c:215
@ SECTION_ID_PROGRAM_VERSION
Definition ffprobe.c:204
@ SECTION_ID_STREAM_GROUP_PIECE
Definition ffprobe.c:214
@ SECTION_ID_STREAM_GROUP_STREAM_TAGS
Definition ffprobe.c:207
@ SECTION_ID_PIXEL_FORMAT_FLAGS
Definition ffprobe.c:194
@ SECTION_ID_STREAM_GROUP_STREAM
Definition ffprobe.c:222
@ SECTION_ID_STREAM_GROUP_BLOCK
Definition ffprobe.c:218
@ SECTION_ID_STREAM_GROUP_STREAM_DISPOSITION
Definition ffprobe.c:206
@ SECTION_ID_FRAME_SIDE_DATA_COMPONENT_LIST
Definition ffprobe.c:179
@ SECTION_ID_PROGRAM_TAGS
Definition ffprobe.c:203
@ SECTION_ID_PIXEL_FORMATS
Definition ffprobe.c:197
@ SECTION_ID_FRAME_SIDE_DATA_PIECE_LIST
Definition ffprobe.c:181
@ SECTION_ID_STREAM_GROUP_SUBPIECE
Definition ffprobe.c:216
@ SECTION_ID_STREAM
Definition ffprobe.c:227
@ SECTION_ID_LIBRARY_VERSION
Definition ffprobe.c:185
@ SECTION_ID_FRAMES
Definition ffprobe.c:173
@ SECTION_ID_STREAM_SIDE_DATA
Definition ffprobe.c:232
@ SECTION_ID_PACKETS_AND_FRAMES
Definition ffprobe.c:190
@ SECTION_ID_STREAM_GROUP_STREAMS
Definition ffprobe.c:221
@ SECTION_ID_PACKET_SIDE_DATA_LIST
Definition ffprobe.c:191
@ SECTION_ID_PROGRAM_STREAM_DISPOSITION
Definition ffprobe.c:198
@ SECTION_ID_FRAME_SIDE_DATA_TIMECODE_LIST
Definition ffprobe.c:177
@ SECTION_ID_FRAME_SIDE_DATA_PIECE
Definition ffprobe.c:182
@ SECTION_ID_PACKETS
Definition ffprobe.c:189
@ SECTION_ID_FRAME_TAGS
Definition ffprobe.c:174
@ SECTION_ID_LIBRARY_VERSIONS
Definition ffprobe.c:186
@ SECTION_ID_STREAM_SIDE_DATA_LIST
Definition ffprobe.c:231
@ SECTION_ID_PROGRAMS
Definition ffprobe.c:205
@ SECTION_ID_STREAM_GROUP_SUBCOMPONENTS
Definition ffprobe.c:211
@ SECTION_ID_PROGRAM_STREAM_TAGS
Definition ffprobe.c:199
@ SECTION_ID_FORMAT_TAGS
Definition ffprobe.c:171
@ SECTION_ID_CHAPTERS
Definition ffprobe.c:168
@ SECTION_ID_FRAME_SIDE_DATA_TIMECODE
Definition ffprobe.c:178
@ SECTION_ID_FRAME_LOGS
Definition ffprobe.c:184
@ SECTION_ID_STREAM_GROUP_TAGS
Definition ffprobe.c:224
@ SECTION_ID_PIXEL_FORMAT_COMPONENTS
Definition ffprobe.c:196
@ SECTION_ID_FORMAT
Definition ffprobe.c:170
@ SECTION_ID_STREAM_GROUP_COMPONENT
Definition ffprobe.c:210
@ SECTION_ID_PACKET_TAGS
Definition ffprobe.c:188
@ SECTION_ID_PIXEL_FORMAT_COMPONENT
Definition ffprobe.c:195
@ SECTION_ID_SUBTITLE
Definition ffprobe.c:233
@ SECTION_ID_STREAM_GROUP
Definition ffprobe.c:208
@ SECTION_ID_PIXEL_FORMAT
Definition ffprobe.c:193
@ SECTION_ID_FRAME_SIDE_DATA_LIST
Definition ffprobe.c:175
@ SECTION_ID_FRAME_SIDE_DATA_COMPONENT
Definition ffprobe.c:180
@ SECTION_ID_STREAMS
Definition ffprobe.c:229
@ SECTION_ID_CHAPTER_TAGS
Definition ffprobe.c:167
@ SECTION_ID_STREAM_GROUP_SUBCOMPONENT
Definition ffprobe.c:212
@ SECTION_ID_STREAM_GROUP_SIDE_DATA
Definition ffprobe.c:220
@ SECTION_ID_ERROR
Definition ffprobe.c:169
@ SECTION_ID_STREAM_GROUPS
Definition ffprobe.c:225
@ SECTION_ID_STREAM_GROUP_SIDE_DATA_LIST
Definition ffprobe.c:219
@ SECTION_ID_FRAME_LOG
Definition ffprobe.c:183
@ SECTION_ID_FRAME
Definition ffprobe.c:172
@ SECTION_ID_STREAM_GROUP_BLOCKS
Definition ffprobe.c:217
@ SECTION_ID_PACKET_SIDE_DATA
Definition ffprobe.c:192
@ SECTION_ID_STREAM_DISPOSITION
Definition ffprobe.c:228
@ SECTION_ID_ROOT
Definition ffprobe.c:226
@ SECTION_ID_STREAM_GROUP_COMPONENTS
Definition ffprobe.c:209
@ SECTION_ID_STREAM_GROUP_DISPOSITION
Definition ffprobe.c:223
@ SECTION_ID_CHAPTER
Definition ffprobe.c:166
@ SECTION_ID_PROGRAM_STREAMS
Definition ffprobe.c:201
@ SECTION_ID_PROGRAM
Definition ffprobe.c:200
static void ffprobe_show_program_version(AVTextFormatContext *tfc)
Definition ffprobe.c:2794
static void print_context_light_level(AVTextFormatContext *tfc, const AVContentLightMetadata *metadata)
Definition ffprobe.c:568
static void ffprobe_show_library_versions(AVTextFormatContext *tfc)
Definition ffprobe.c:2825
static void print_iamf_param_definition(AVTextFormatContext *tfc, const char *name, const AVIAMFParamDefinition *param, SectionID section_id)
Definition ffprobe.c:2192
static int use_byte_value_binary_prefix
Definition ffprobe.c:131
static int do_show_frame_tags
Definition ffprobe.c:123
#define CHECK_END
static int do_show_pixel_format_flags
Definition ffprobe.c:117
#define SHOW_LIB_VERSION(libname, LIBNAME)
Definition ffprobe.c:2810
static const OptionDef real_options[]
Definition ffprobe.c:3298
static ReadInterval * read_intervals
Definition ffprobe.c:158
static const char * print_input_filename
Definition ffprobe.c:345
#define print_ts(k, v)
Definition ffprobe.c:457
static int do_show_chapter_tags
Definition ffprobe.c:121
#define print_int(k, v)
Definition ffprobe.c:450
static char * show_data_hash
Definition ffprobe.c:147
static void print_color_trc(AVTextFormatContext *tfc, enum AVColorTransferCharacteristic color_trc)
Definition ffprobe.c:1269
static void print_stream_group_params(AVTextFormatContext *tfc, AVStreamGroup *stg)
Definition ffprobe.c:2365
static const char unit_byte_str[]
Definition ffprobe.c:350
static int do_show_stream_group_components
Definition ffprobe.c:109
static LogBuffer * log_buffer
Definition ffprobe.c:371
#define SHOW_OPTIONAL_FIELDS_AUTO
Definition ffprobe.c:140
#define print_int_opt(k, v)
Definition ffprobe.c:451
static int opt_format(void *optctx, const char *opt, const char *arg)
Definition ffprobe.c:2906
static void print_alpha_mode(AVTextFormatContext *tfc, enum AVAlphaMode alpha_mode)
Definition ffprobe.c:1289
static int show_value_unit
Definition ffprobe.c:129
static int opt_read_intervals(void *optctx, const char *opt, const char *arg)
Definition ffprobe.c:3197
static int * streams_with_closed_captions
Definition ffprobe.c:357
static const char * get_raw_string_type(const void *data)
Definition ffprobe.c:248
#define GET_DECODER(type_)
static void print_color_range(AVTextFormatContext *tfc, enum AVColorRange color_range)
Definition ffprobe.c:1239
static void print_displaymatrix(AVTextFormatContext *tfc, const int32_t matrix[9])
Definition ffprobe.c:538
static void print_chroma_location(AVTextFormatContext *tfc, enum AVChromaLocation chroma_location)
Definition ffprobe.c:1279
static int opt_codec(void *optctx, const char *opt, const char *arg)
Definition ffprobe.c:3242
static int show_programs(AVTextFormatContext *tfc, InputFile *ifile)
Definition ffprobe.c:2142
static void show_error(AVTextFormatContext *tfc, int err)
Definition ffprobe.c:2494
static EntrySelection selected_entries[FF_ARRAY_ELEMS(sections)]
Definition ffprobe.c:339
static void print_color_space(AVTextFormatContext *tfc, enum AVColorSpace color_space)
Definition ffprobe.c:1249
static int do_show_frames
Definition ffprobe.c:105
static uint64_t * nb_streams_packets
Definition ffprobe.c:354
static void print_tile_grid_params(AVTextFormatContext *tfc, const AVStreamGroup *stg, const AVStreamGroupTileGrid *tile_grid)
Definition ffprobe.c:2160
static int do_show_program_tags
Definition ffprobe.c:124
static int do_show_format
Definition ffprobe.c:104
static int parse_read_interval(const char *interval_spec, ReadInterval *interval)
Parse interval specification, according to the format: INTERVAL ::= [START|+START_OFFSET][%[END|+END_...
Definition ffprobe.c:3067
static int show_stream_groups(AVTextFormatContext *tfc, InputFile *ifile)
Definition ffprobe.c:2421
static int read_interval_packets(AVTextFormatContext *tfc, InputFile *ifile, const ReadInterval *interval, int64_t *cur_ts)
Definition ffprobe.c:1692
static int do_show_packets
Definition ffprobe.c:106
static const char unit_hertz_str[]
Definition ffprobe.c:349
#define print_int_fmt(k, v, f, u)
Definition ffprobe.c:461
static int do_show_data
Definition ffprobe.c:113
static int show_tags(AVTextFormatContext *tfc, AVDictionary *tags, int section_id)
Definition ffprobe.c:496
static int opt_pretty(void *optctx, const char *opt, const char *arg)
Definition ffprobe.c:3202
static av_always_inline int process_frame(AVTextFormatContext *tfc, InputFile *ifile, AVFrame *frame, const AVPacket *pkt, int *packet_new)
Definition ffprobe.c:1595
#define print_str_validate(k, v)
Definition ffprobe.c:455
static const char * get_stream_group_type(const void *data)
Definition ffprobe.c:253
#define IN_STREAM_GROUP
Definition ffprobe.c:1864
static int do_count_packets
Definition ffprobe.c:99
static int opt_show_optional_fields(void *optctx, const char *opt, const char *arg)
Definition ffprobe.c:2889
static int show_stream_group(AVTextFormatContext *tfc, InputFile *ifile, AVStreamGroup *stg)
Definition ffprobe.c:2377
static int show_stream(AVTextFormatContext *tfc, AVFormatContext *fmt_ctx, int stream_idx, InputStream *ist, int container)
Definition ffprobe.c:1866
static const AVInputFormat * iformat
Definition ffprobe.c:346
static const char unit_bit_per_second_str[]
Definition ffprobe.c:351
static const AVTextFormatSection sections[]
Definition ffprobe.c:259
static void print_dovi_metadata(AVTextFormatContext *tfc, const AVDOVIMetadata *dovi)
Definition ffprobe.c:575
#define print_str(k, v)
Definition ffprobe.c:453
static void show_frame(AVTextFormatContext *tfc, AVFrame *frame, AVStream *stream, AVFormatContext *fmt_ctx)
Definition ffprobe.c:1508
static void flush_buffers(InputFile *ifile)
Definition ffprobe.c:1815
static void print_iamf_submix_params(AVTextFormatContext *tfc, const AVIAMFSubmix *submix)
Definition ffprobe.c:2299
static void mark_section_show_entries(SectionID section_id, int show_all_entries, AVDictionary *entries, int explicitly_selected)
Definition ffprobe.c:2916
static void ffprobe_show_pixel_formats(AVTextFormatContext *tfc)
Definition ffprobe.c:2843
#define print_duration_ts(k, v)
Definition ffprobe.c:459
static void show_packet(AVTextFormatContext *tfc, InputFile *ifile, AVPacket *pkt, int packet_idx)
Definition ffprobe.c:1350
static char * data_dump_format
Definition ffprobe.c:148
static int do_count_frames
Definition ffprobe.c:98
static int show_format(AVTextFormatContext *tfc, InputFile *ifile)
Definition ffprobe.c:2463
static char * output_format
Definition ffprobe.c:145
static int do_show_error
Definition ffprobe.c:103
void show_help_default(const char *opt, const char *arg)
Per-fftool specific help handler.
Definition ffprobe.c:3051
#define print_str_opt(k, v)
Definition ffprobe.c:454
static uint64_t * nb_streams_frames
Definition ffprobe.c:355
static int read_packets(AVTextFormatContext *tfc, InputFile *ifile)
Definition ffprobe.c:1827
static void print_film_grain_params(AVTextFormatContext *tfc, const AVFilmGrainParams *fgp)
Definition ffprobe.c:969
static void print_integers(AVTextFormatContext *tfc, const char *key, const void *data, int size, const char *format, int columns, int bytes, int offset_add)
Definition ffprobe.c:464
static int do_show_pixel_format_components
Definition ffprobe.c:118
#define print_val(k, v, u)
Definition ffprobe.c:460
static int show_chapters(AVTextFormatContext *tfc, InputFile *ifile)
Definition ffprobe.c:2438
static int opt_input_file(void *optctx, const char *arg)
Definition ffprobe.c:3004
static int do_show_packet_tags
Definition ffprobe.c:127
#define DEFINE_OPT_SHOW_SECTION(section, target_section_id)
Definition ffprobe.c:3279
static void print_mastering_display_metadata(AVTextFormatContext *tfc, const AVMasteringDisplayMetadata *metadata)
Definition ffprobe.c:547
static int read_intervals_nb
Definition ffprobe.c:159
static void log_read_interval(const ReadInterval *interval, void *log_ctx, int log_level)
Definition ffprobe.c:1668
static void print_primaries(AVTextFormatContext *tfc, enum AVColorPrimaries color_primaries)
Definition ffprobe.c:1259
static const char * get_packet_side_data_type(const void *data)
Definition ffprobe.c:236
#define SET_DO_SHOW(id, varname)
Definition ffprobe.c:3373
#define print_q(k, v, s)
Definition ffprobe.c:452
static void print_ambient_viewing_environment(AVTextFormatContext *tfc, const AVAmbientViewingEnvironment *env)
Definition ffprobe.c:958
static void print_iamf_audio_element_params(AVTextFormatContext *tfc, const AVStreamGroup *stg, const AVIAMFAudioElement *audio_element)
Definition ffprobe.c:2258
static int match_section(const char *section_name, int show_all_entries, AVDictionary *entries)
Definition ffprobe.c:2933
static int opt_show_entries(void *optctx, const char *opt, const char *arg)
Definition ffprobe.c:2954
static int do_show_stream_groups
Definition ffprobe.c:108
static int do_show_programs
Definition ffprobe.c:107
static void close_input_file(InputFile *ifile)
Definition ffprobe.c:2679
static void print_section(SectionID id, int level)
Definition ffprobe.c:3211
static const char * get_frame_side_data_type(const void *data)
Definition ffprobe.c:242
static int do_show_library_versions
Definition ffprobe.c:115
static const char * data_codec_name
Definition ffprobe.c:136
static const char * output_filename
Definition ffprobe.c:347
static int probe_file(AVTextFormatContext *tfc, const char *filename, const char *print_filename)
Definition ffprobe.c:2692
static int do_show_stream_tags
Definition ffprobe.c:126
static const AVCodec * get_decoder_for_stream(AVFormatContext *fmt_ctx, AVStream *stream)
Definition ffprobe.c:2531
static int check_section_show_entries(int section_id, int require_explicit)
Definition ffprobe.c:3353
static int do_show_program_version
Definition ffprobe.c:114
static int do_read_packets
Definition ffprobe.c:101
static int opt_print_filename(void *optctx, const char *opt, const char *arg)
Definition ffprobe.c:3044
static int do_bitexact
Definition ffprobe.c:97
#define print_decibel(k, v)
Definition ffprobe.c:462
static int use_value_prefix
Definition ffprobe.c:130
static void print_dispositions(AVTextFormatContext *tfc, uint32_t disposition, SectionID section_id)
Definition ffprobe.c:1851
static int opt_input_file_i(void *optctx, const char *opt, const char *arg)
Definition ffprobe.c:3021
static int * selected_streams
Definition ffprobe.c:356
static int show_log(AVTextFormatContext *tfc, int section_ids, int section_id, int log_level)
Definition ffprobe.c:1315
#define print_duration_time(k, v, tb)
Definition ffprobe.c:458
static void print_dynamic_hdr_vivid(AVTextFormatContext *tfc, const AVDynamicHDRVivid *metadata)
Definition ffprobe.c:888
static int show_optional_fields
Definition ffprobe.c:143
static void print_pkt_side_data(AVTextFormatContext *tfc, int width, int height, const AVPacketSideData *sd, SectionID id_data)
Definition ffprobe.c:1095
static AVMutex log_mutex
Definition ffprobe.c:360
static int do_show_streams
Definition ffprobe.c:110
static int do_show_log
Definition ffprobe.c:119
static int do_show_chapters
Definition ffprobe.c:102
static int show_private_data
Definition ffprobe.c:133
static int do_show_stream_group_tags
Definition ffprobe.c:125
static void print_dynamic_hdr10_plus(AVTextFormatContext *tfc, const AVDynamicHDRPlus *metadata)
Definition ffprobe.c:737
static int opt_output_file_o(void *optctx, const char *opt, const char *arg)
Definition ffprobe.c:3027
static int do_show_stream_group_disposition
Definition ffprobe.c:112
static int do_show_pixel_formats
Definition ffprobe.c:116
static int do_analyze_frames
Definition ffprobe.c:96
static int do_show_stream_disposition
Definition ffprobe.c:111
static void print_frame_side_data(AVTextFormatContext *tfc, const AVFrame *frame, const AVStream *stream)
Definition ffprobe.c:1433
static int set_decoders(AVFormatContext *fmt_ctx)
Definition ffprobe.c:2516
static int log_buffer_size
Definition ffprobe.c:372
#define SHOW_OPTIONAL_FIELDS_ALWAYS
Definition ffprobe.c:142
static int open_input_file(InputFile *ifile, const char *filename, const char *print_filename)
Definition ffprobe.c:2561
#define print_time(k, v, tb)
Definition ffprobe.c:456
static int use_value_sexagesimal_format
Definition ffprobe.c:132
static int * streams_with_film_grain
Definition ffprobe.c:358
static int do_read_frames
Definition ffprobe.c:100
static void print_downmix_info(AVTextFormatContext *tfc, const AVDownmixInfo *downmix_info)
Definition ffprobe.c:514
static int opt_sections(void *optctx, const char *opt, const char *arg)
Definition ffprobe.c:3229
#define REALLOCZ_ARRAY_STREAM(ptr, cur_n, new_n)
Definition ffprobe.c:488
static void clear_log(int need_lock)
Definition ffprobe.c:1299
static int is_key_selected_callback(AVTextFormatContext *tctx, const char *key)
Definition ffprobe.c:374
static int show_program(AVTextFormatContext *tfc, InputFile *ifile, AVProgram *program)
Definition ffprobe.c:2111
#define IN_PROGRAM
Definition ffprobe.c:1863
static int parse_read_intervals(const char *intervals_spec)
Definition ffprobe.c:3149
#define PRINT_PIX_FMT_FLAG(flagname, name)
Definition ffprobe.c:2838
static void print_dynamic_hdr_smpte2094_app5(AVTextFormatContext *tfc, const AVDynamicHDRSmpte2094App5 *metadata)
Definition ffprobe.c:832
static int do_show_format_tags
Definition ffprobe.c:122
static int get_decoder_by_name(const char *codec_name, const AVCodec **codec)
Definition ffprobe.c:2502
static int opt_show_versions(void *optctx, const char *opt, const char *arg)
Definition ffprobe.c:3272
static unsigned int nb_streams
Definition ffprobe.c:353
#define print_fmt(k, f,...)
Definition ffprobe.c:432
static void print_iamf_mix_presentation_params(AVTextFormatContext *tfc, const AVStreamGroup *stg, const AVIAMFMixPresentation *mix_presentation)
Definition ffprobe.c:2346
static void show_subtitle(AVTextFormatContext *tfc, AVSubtitle *sub, AVStream *stream, AVFormatContext *fmt_ctx)
Definition ffprobe.c:1407
static int show_streams(AVTextFormatContext *tfc, InputFile *ifile)
Definition ffprobe.c:2094
#define SHOW_OPTIONAL_FIELDS_NEVER
Definition ffprobe.c:141
static void print_private_data(AVTextFormatContext *tfc, void *priv_data)
Definition ffprobe.c:1201
@ AV_FILM_GRAIN_PARAMS_H274
The union is valid when interpreted as AVFilmGrainH274Params (codec.h274)
@ AV_FILM_GRAIN_PARAMS_AV1
The union is valid when interpreted as AVFilmGrainAOMParams (codec.aom)
@ AV_FILM_GRAIN_PARAMS_NONE
#define AV_OPT_FLAG_DECODING_PARAM
A generic parameter which can be set by the user for demuxing or decoding.
Definition opt.h:355
#define AV_OPT_FLAG_EXPORT
The option is intended for exporting values to the caller.
Definition opt.h:362
@ AV_DOWNMIX_TYPE_LTRT
Lt/Rt 2-channel downmix, Dolby Surround compatible.
@ AV_DOWNMIX_TYPE_LORO
Lo/Ro 2-channel downmix (Stereo).
@ AV_DOWNMIX_TYPE_DPLII
Lt/Rt 2-channel downmix, Dolby Pro Logic II compatible.
int av_get_bits_per_sample(enum AVCodecID codec_id)
Return codec bits per sample.
Definition utils.c:557
const AVCodecDescriptor * avcodec_descriptor_get(enum AVCodecID id)
int attribute_align_arg avcodec_open2(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options)
Initialize the AVCodecContext to use the given AVCodec.
Definition avcodec.c:144
const AVClass * avcodec_get_class(void)
Get the AVClass for AVCodecContext.
Definition options.c:184
AVCodecContext * avcodec_alloc_context3(const AVCodec *codec)
Allocate an AVCodecContext and set its fields to default values.
Definition options.c:149
const char * avcodec_profile_name(enum AVCodecID codec_id, int profile)
Return a name for the specified profile, if available.
Definition utils.c:446
const AVCodec * avcodec_find_decoder(enum AVCodecID id)
Find a registered decoder with a matching codec ID.
Definition allcodecs.c:994
const AVCodec * avcodec_find_decoder_by_name(const char *name)
Find a registered decoder with the specified name.
Definition allcodecs.c:1022
void avsubtitle_free(AVSubtitle *sub)
Free all allocated data in the given subtitle struct.
Definition avcodec.c:421
void avcodec_free_context(AVCodecContext **avctx)
Free the codec context and everything associated with it and write NULL to the provided pointer.
Definition options.c:164
@ AV_CODEC_ID_PROBE
codec_id is not known (like AV_CODEC_ID_NONE) but lavf should attempt to identify it
Definition codec_id.h:616
int avcodec_receive_frame(AVCodecContext *avctx, AVFrame *frame)
Alias for avcodec_receive_frame_flags(avctx, frame, 0).
Definition avcodec.c:720
int avcodec_send_packet(AVCodecContext *avctx, const AVPacket *avpkt)
Supply raw packet data as input to a decoder.
Definition decode.c:734
int avcodec_decode_subtitle2(AVCodecContext *avctx, AVSubtitle *sub, int *got_sub_ptr, const AVPacket *avpkt)
Decode a subtitle message.
Definition decode.c:939
@ AVDISCARD_ALL
discard all
Definition defs.h:246
void avcodec_flush_buffers(AVCodecContext *avctx)
Reset the internal codec state / flush internal buffers.
Definition avcodec.c:389
const char * av_packet_side_data_name(enum AVPacketSideDataType type)
Definition packet.c:269
@ AV_PKT_DATA_STRINGS_METADATA
A list of zero terminated key/value strings.
Definition packet.h:169
@ AV_PKT_DATA_AMBIENT_VIEWING_ENVIRONMENT
Ambient viewing environment metadata, as defined by H.274.
Definition packet.h:327
@ AV_PKT_DATA_SKIP_SAMPLES
Recommends skipping the specified number of samples.
Definition packet.h:153
@ AV_PKT_DATA_MPEGTS_STREAM_ID
MPEGTS stream ID as uint8_t, this is required to pass the stream ID information from the demuxer to t...
Definition packet.h:212
@ AV_PKT_DATA_DYNAMIC_HDR10_PLUS
HDR10+ dynamic metadata associated with a video frame.
Definition packet.h:296
@ AV_PKT_DATA_MASTERING_DISPLAY_METADATA
Mastering display metadata (based on SMPTE-2086:2014).
Definition packet.h:219
@ AV_PKT_DATA_AUDIO_SERVICE_TYPE
This side data should be associated with an audio stream and corresponds to enum AVAudioServiceType.
Definition packet.h:117
@ AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL
Data found in BlockAdditional element of matroska container.
Definition packet.h:188
@ AV_PKT_DATA_SPHERICAL
This side data should be associated with a video stream and corresponds to the AVSphericalMapping str...
Definition packet.h:225
@ AV_PKT_DATA_WEBVTT_SETTINGS
The optional settings (rendering instructions) that immediately follow the timestamp specifier of a W...
Definition packet.h:199
@ AV_PKT_DATA_DISPLAYMATRIX
This side data contains a 3x3 transformation matrix describing an affine transformation that needs to...
Definition packet.h:105
@ AV_PKT_DATA_AFD
Active Format Description data consisting of a single byte as specified in ETSI TS 101 154 using AVAc...
Definition packet.h:258
@ AV_PKT_DATA_EXIF
Extensible image file format metadata.
Definition packet.h:369
@ AV_PKT_DATA_CPB_PROPERTIES
This side data corresponds to the AVCPBProperties struct.
Definition packet.h:142
@ AV_PKT_DATA_STEREO3D
This side data should be associated with a video stream and contains Stereoscopic 3D information in f...
Definition packet.h:111
@ AV_PKT_DATA_WEBVTT_IDENTIFIER
The optional first identifier line of a WebVTT cue.
Definition packet.h:193
@ AV_PKT_DATA_FRAME_CROPPING
The number of pixels to discard from the top/bottom/left/right border of the decoded frame to obtain ...
Definition packet.h:340
@ AV_PKT_DATA_CONTENT_LIGHT_LEVEL
Content light level (based on CTA-861.3).
Definition packet.h:232
@ AV_PKT_DATA_DOVI_CONF
DOVI configuration ref: dolby-vision-bitstreams-within-the-iso-base-media-file-format-v2....
Definition packet.h:280
void av_packet_free(AVPacket **pkt)
Free the packet, if the packet is reference counted, it will be unreferenced first.
Definition packet.c:74
#define AV_PKT_FLAG_DISCARD
Flag is used to discard packets which are required to maintain valid decoder state but are not requir...
Definition packet.h:657
#define AV_PKT_FLAG_CORRUPT
The packet content is corrupted.
Definition packet.h:651
void av_packet_unref(AVPacket *pkt)
Wipe the packet.
Definition packet.c:434
#define AV_PKT_FLAG_KEY
The packet contains a keyframe.
Definition packet.h:650
int av_packet_unpack_dictionary(const uint8_t *data, size_t size, AVDictionary **dict)
Unpack a dictionary from side_data.
Definition packet.c:354
uint8_t * av_packet_get_side_data(const AVPacket *pkt, enum AVPacketSideDataType type, size_t *size)
Get side information from packet.
Definition packet.c:252
AVPacket * av_packet_alloc(void)
Allocate an AVPacket and set its fields to default values.
Definition packet.c:63
FF_VISIBILITY_POP_HIDDEN av_cold void avdevice_register_all(void)
Initialize libavdevice and register all the input and output devices.
Definition alldevices.c:67
int avformat_network_deinit(void)
Undo the initialization done by avformat_network_init.
Definition utils.c:589
const char * avformat_stream_group_name(enum AVStreamGroupParamsType type)
Definition avformat.c:270
int avformat_network_init(void)
Do global initialization of network libraries.
Definition utils.c:577
AVFormatContext * avformat_alloc_context(void)
Allocate an AVFormatContext.
Definition options.c:165
const AVClass * avformat_get_class(void)
Get the AVClass for AVFormatContext.
Definition options.c:193
const AVInputFormat * av_find_input_format(const char *short_name)
Find AVInputFormat based on the short name of the input format.
Definition format.c:146
int avformat_seek_file(AVFormatContext *s, int stream_index, int64_t min_ts, int64_t ts, int64_t max_ts, int flags)
Seek to timestamp ts.
Definition seek.c:664
int av_read_frame(AVFormatContext *s, AVPacket *pkt)
Return the next frame of a stream.
Definition demux.c:1588
int avformat_open_input(AVFormatContext **ps, const char *url, const AVInputFormat *fmt, AVDictionary **options)
Open an input stream and read the header.
Definition demux.c:231
int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options)
Read packets of a media file to get stream information.
Definition demux.c:2616
void avformat_close_input(AVFormatContext **s)
Close an opened input AVFormatContext.
Definition demux.c:377
int avformat_match_stream_specifier(AVFormatContext *s, AVStream *st, const char *spec)
Check if the stream st contained in s is matched by the stream specifier spec.
Definition avformat.c:747
int av_mime_codec_str(const AVCodecParameters *par, AVRational frame_rate, struct AVBPrint *out)
Make a RFC 4281/6381 like string describing a codec for MIME types.
void av_dump_format(AVFormatContext *ic, int index, const char *url, int is_output)
Print detailed information about the input or output format, such as duration, bitrate,...
Definition dump.c:852
AVRational av_guess_sample_aspect_ratio(AVFormatContext *format, AVStream *stream, AVFrame *frame)
Guess the sample aspect ratio of a frame, based on both the stream and the frame aspect ratio.
Definition avformat.c:793
int av_channel_layout_describe(const AVChannelLayout *channel_layout, char *buf, size_t buf_size)
Get a human-readable string describing the channel layout properties.
@ AV_CHANNEL_ORDER_UNSPEC
Only the channel count is specified, without any further information about the channel order.
int av_bprint_finalize(AVBPrint *buf, char **ret_str)
Finalize a print buffer.
Definition bprint.c:234
void av_bprint_chars(AVBPrint *buf, char c, unsigned n)
Append char c n times to a print buffer.
Definition bprint.c:129
void av_bprint_clear(AVBPrint *buf)
Reset the string to "" but keep internal allocated data.
Definition bprint.c:226
AVBufferRef * av_buffer_allocz(size_t size)
Same as av_buffer_alloc(), except the returned buffer will be initialized to zero.
Definition buffer.c:94
#define AV_DICT_MULTIKEY
Allow to store several equal keys in the dictionary.
Definition dict.h:84
void av_dict_free(AVDictionary **pm)
Free all the memory allocated for an AVDictionary struct and all keys and values.
Definition dict.c:233
AVDictionaryEntry * av_dict_get(const AVDictionary *m, const char *key, const AVDictionaryEntry *prev, int flags)
Get a dictionary entry with matching key.
Definition dict.c:60
const AVDictionaryEntry * av_dict_iterate(const AVDictionary *m, const AVDictionaryEntry *prev)
Iterate over a dictionary.
Definition dict.c:42
int av_dict_copy(AVDictionary **dst, const AVDictionary *src, int flags)
Copy entries from one AVDictionary struct into another.
Definition dict.c:247
int av_dict_set(AVDictionary **pm, const char *key, const char *value, int flags)
Set the given entry in *pm, overwriting an existing entry.
Definition dict.c:86
#define AV_DICT_DONT_OVERWRITE
Don't overwrite existing entries.
Definition dict.h:81
#define AV_DICT_DONT_STRDUP_KEY
Take ownership of a key that's been allocated with av_malloc() or another memory allocation function.
Definition dict.h:77
#define AV_DICT_MATCH_CASE
Only get an entry with exact-case key match.
Definition dict.h:74
#define AVERROR_EXIT
Immediate exit was requested; the called function should not be restarted.
Definition error.h:58
#define AVERROR_EOF
End of file.
Definition error.h:57
#define av_err2str(errnum)
Convenience macro, the return value should be used only directly in function arguments but never stan...
Definition error.h:122
#define AVERROR(e)
Definition error.h:45
#define AVERROR_OPTION_NOT_FOUND
Option not found.
Definition error.h:63
#define AV_FRAME_FLAG_INTERLACED
A flag to mark frames whose content is interlaced.
Definition frame.h:702
#define AV_FRAME_FLAG_TOP_FIELD_FIRST
A flag to mark frames where the top field is displayed first if the content is interlaced.
Definition frame.h:707
#define AV_FRAME_FLAG_LOSSLESS
A decoder can use this flag to mark frames which were originally encoded losslessly.
Definition frame.h:715
#define AV_FRAME_FLAG_KEY
A flag to mark frames that are keyframes.
Definition frame.h:694
void av_frame_free(AVFrame **frame)
Free the frame and any dynamically allocated objects in it, e.g.
Definition frame.c:64
AVFrame * av_frame_alloc(void)
Allocate an AVFrame and set its fields to default values.
Definition frame.c:52
const char * av_frame_side_data_name(enum AVFrameSideDataType type)
Definition side_data.c:77
@ AV_FRAME_DATA_GOP_TIMECODE
The GOP timecode in 25 bit timecode format.
Definition frame.h:125
@ AV_FRAME_DATA_EXIF
Exchangeable image file format metadata.
Definition frame.h:263
@ AV_FRAME_DATA_DOVI_METADATA
Parsed Dolby Vision metadata, suitable for passing to a software implementation.
Definition frame.h:208
@ AV_FRAME_DATA_VIEW_ID
This side data must be associated with a video frame.
Definition frame.h:245
@ AV_FRAME_DATA_DYNAMIC_HDR_VIVID
HDR Vivid dynamic metadata associated with a video frame.
Definition frame.h:215
@ AV_FRAME_DATA_CONTENT_LIGHT_LEVEL
Content light level (based on CTA-861.3).
Definition frame.h:137
@ AV_FRAME_DATA_AMBIENT_VIEWING_ENVIRONMENT
Ambient viewing environment metadata, as defined by H.274.
Definition frame.h:220
@ AV_FRAME_DATA_DISPLAYMATRIX
This side data contains a 3x3 transformation matrix describing an affine transformation that needs to...
Definition frame.h:85
@ AV_FRAME_DATA_A53_CC
ATSC A53 Part 4 Closed Captions.
Definition frame.h:59
@ AV_FRAME_DATA_DYNAMIC_HDR_PLUS
HDR dynamic metadata associated with a video frame.
Definition frame.h:159
@ AV_FRAME_DATA_IAMF_RECON_GAIN_INFO_PARAM
IAMF Recon Gain Info Parameter Data associated with the audio frame.
Definition frame.h:294
@ AV_FRAME_DATA_IAMF_MIX_GAIN_PARAM
IAMF Mix Gain Parameter Data associated with the audio frame.
Definition frame.h:278
@ AV_FRAME_DATA_MASTERING_DISPLAY_METADATA
Mastering display metadata associated with a video frame.
Definition frame.h:120
@ AV_FRAME_DATA_DOWNMIX_INFO
Metadata relevant to a downmix procedure.
Definition frame.h:73
@ AV_FRAME_DATA_DYNAMIC_HDR_SMPTE_2094_APP5
HDR dynamic metadata associated with a video frame.
Definition frame.h:270
@ AV_FRAME_DATA_FILM_GRAIN_PARAMS
Film grain parameters for a frame, described by AVFilmGrainParams.
Definition frame.h:188
@ AV_FRAME_DATA_ICC_PROFILE
The data contains an ICC profile as an opaque octet buffer following the format described by ISO 1507...
Definition frame.h:144
@ AV_FRAME_DATA_AFD
Active Format Description data consisting of a single byte as specified in ETSI TS 101 154 using AVAc...
Definition frame.h:90
@ AV_FRAME_DATA_S12M_TIMECODE
Timecode which conforms to SMPTE ST 12-1.
Definition frame.h:152
@ AV_FRAME_DATA_IAMF_DEMIXING_INFO_PARAM
IAMF Demixing Info Parameter Data associated with the audio frame.
Definition frame.h:286
@ AV_IAMF_AMBISONICS_MODE_PROJECTION
Definition iamf.h:274
@ AV_IAMF_AUDIO_ELEMENT_TYPE_SCENE
Definition iamf.h:349
@ AV_IAMF_AUDIO_ELEMENT_TYPE_CHANNEL
Definition iamf.h:348
static av_always_inline void * av_iamf_param_definition_get_subblock(const AVIAMFParamDefinition *par, unsigned int idx)
Get the subblock at the specified idx.
Definition iamf.h:260
@ AV_IAMF_PARAMETER_DEFINITION_RECON_GAIN
Subblocks are of struct type AVIAMFReconGain.
Definition iamf.h:181
@ AV_IAMF_PARAMETER_DEFINITION_MIX_GAIN
Subblocks are of struct type AVIAMFMixGain.
Definition iamf.h:173
@ AV_IAMF_PARAMETER_DEFINITION_DEMIXING
Subblocks are of struct type AVIAMFDemixingInfo.
Definition iamf.h:177
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
Definition log.h:231
#define AV_LOG_WARNING
Something somehow does not look correct.
Definition log.h:216
#define AV_LOG_VERBOSE
Detailed information.
Definition log.h:226
#define AV_LOG_INFO
Standard information.
Definition log.h:221
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition log.h:210
void av_log_set_callback(void(*callback)(void *, int, const char *, va_list))
Set the logging callback.
Definition log.c:491
void av_log_default_callback(void *ptr, int level, const char *fmt, va_list vl)
Default logging callback.
Definition log.c:379
#define AV_LOG_SKIP_REPEATED
Skip repeated messages, this requires the user app to use av_log() instead of (f)printf as the 2 woul...
Definition log.h:400
void av_log_format_line(void *ptr, int level, const char *fmt, va_list vl, char *line, int line_size, int *print_prefix)
Format a line of log the same way as the default callback.
Definition log.c:361
void av_log_set_flags(int arg)
Definition log.c:481
int av_reduce(int *dst_num, int *dst_den, int64_t num, int64_t den, int64_t max)
Reduce a fraction.
Definition rational.c:35
int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq)
Rescale a 64-bit integer by 2 rational numbers.
void * av_realloc_array(void *ptr, size_t nmemb, size_t size)
Definition mem.c:318
const char * av_get_media_type_string(enum AVMediaType media_type)
Return a string describing the media_type enum, NULL if media_type is unknown.
Definition utils.c:28
static void * av_x_if_null(const void *p, const void *x)
Return x default pointer in case p is NULL.
Definition avutil.h:311
#define av_fourcc2str(fourcc)
Definition avutil.h:323
@ AVMEDIA_TYPE_AUDIO
Definition avutil.h:201
@ AVMEDIA_TYPE_SUBTITLE
Definition avutil.h:203
@ AVMEDIA_TYPE_VIDEO
Definition avutil.h:200
@ AVMEDIA_TYPE_DATA
Opaque data information usually continuous.
Definition avutil.h:202
char av_get_picture_type_char(enum AVPictureType pict_type)
Return a single letter to describe the given picture type pict_type.
Definition utils.c:40
const char * av_get_sample_fmt_name(enum AVSampleFormat sample_fmt)
Return the name of sample_fmt, or NULL if sample_fmt is not recognized.
Definition samplefmt.c:52
char * av_strtok(char *s, const char *delim, char **saveptr)
Split the string into several tokens which can be accessed by successive calls to av_strtok().
Definition avstring.c:179
int av_strcasecmp(const char *a, const char *b)
Locale-independent case-insensitive compare.
Definition avstring.c:208
char * av_get_token(const char **buf, const char *term)
Unescape the given string until a non escaped terminating char, and return the token corresponding to...
Definition avstring.c:143
#define AV_UTF8_FLAG_EXCLUDE_XML_INVALID_CONTROL_CODES
exclude control codes not accepted by XML
Definition avstring.h:374
#define AV_NOPTS_VALUE
Undefined timestamp value.
Definition avutil.h:247
#define AV_TIME_BASE_Q
Internal time base represented as fractional value.
Definition avutil.h:263
double av_display_rotation_get(const int32_t matrix[9])
Extract the rotation component of the transformation matrix.
Definition display.c:34
const char * av_spherical_projection_name(enum AVSphericalProjection projection)
Provide a human-readable name of a given AVSphericalProjection.
Definition spherical.c:69
void av_spherical_tile_bounds(const AVSphericalMapping *map, size_t width, size_t height, size_t *left, size_t *top, size_t *right, size_t *bottom)
Convert the bounding fields from an AVSphericalVideo from 0.32 fixed point to pixels.
Definition spherical.c:41
@ AV_SPHERICAL_EQUIRECTANGULAR_TILE
Video represents a portion of a sphere mapped on a flat surface using equirectangular projection.
Definition spherical.h:68
@ AV_SPHERICAL_CUBEMAP
Video frame is split into 6 faces of a cube, and arranged on a 3x2 layout.
Definition spherical.h:61
const char * av_stereo3d_view_name(unsigned int view)
Provide a human-readable name of a given stereo3d view.
Definition stereo3d.c:113
const char * av_stereo3d_type_name(unsigned int type)
Provide a human-readable name of a given stereo3d type.
Definition stereo3d.c:93
#define AV_STEREO3D_FLAG_INVERT
Inverted views, Right/Bottom represents the left view.
Definition stereo3d.h:194
const char * av_stereo3d_primary_eye_name(unsigned int eye)
Provide a human-readable name of a given stereo3d primary eye.
Definition stereo3d.c:133
int av_opt_get(void *obj, const char *name, int search_flags, uint8_t **out_val)
Definition opt.c:1291
const AVOption * av_opt_next(const void *obj, const AVOption *last)
Iterate over all AVOptions belonging to obj.
Definition opt.c:47
int a
#define r
Definition input.c:42
#define b
Definition input.c:43
#define AV_RN32(p)
#define AV_RL8(x)
#define AV_RL32(p)
#define AV_RB64(p)
#define AV_RN16(p)
unsigned offset
Definition libaomenc.c:763
static int mix(int c0, int c1)
Definition 4xm.c:717
#define us(width, name, range_min, range_max, subs,...)
Definition cbs_apv.c:70
#define PLANAR
Definition flacdsp.c:28
const char * arg
Definition jacosubdec.c:65
Libavcodec version macros.
Libavdevice version macros.
Libavfilter version macros.
Libavformat version macros.
#define av_always_inline
Definition attributes.h:72
Immersive Audio Model and Formats API header.
Stereoscopic video.
#define AV_MUTEX_INITIALIZER
Definition thread.h:185
static int ff_mutex_unlock(AVMutex *mutex)
Definition thread.h:189
static int ff_mutex_lock(AVMutex *mutex)
Definition thread.h:188
#define AVMutex
Definition thread.h:184
Libswresample version macros.
swscale version macros
AVClassCategory
Definition log.h:28
#define FFMIN(a, b)
Definition macros.h:49
uint64_t layout
void * av_calloc(size_t nmemb, size_t size)
Definition mem.c:370
Memory handling functions.
uint32_t tag
Definition movenc.c:2128
const char data[16]
Definition mxf.c:149
int profile
Definition mxfenc.c:2299
category
Definition openal-dec.c:249
#define av_strdup(s)
Definition ops_static.c:55
AVOptions.
#define CMDUTILS_COMMON_OPTIONS
Definition opt_common.h:199
int av_parse_time(int64_t *timeval, const char *timestr, int duration)
Parse timestr and return in *time a corresponding number of microseconds.
Definition parseutils.c:592
misc parsing utilities
const AVPixFmtDescriptor * av_pix_fmt_desc_next(const AVPixFmtDescriptor *prev)
Iterate over all pixel format descriptors known to libavutil.
Definition pixdesc.c:3467
const char * av_color_space_name(enum AVColorSpace space)
Definition pixdesc.c:3860
const char * av_color_range_name(enum AVColorRange range)
Definition pixdesc.c:3776
const char * av_alpha_mode_name(enum AVAlphaMode mode)
Definition pixdesc.c:3925
int av_get_bits_per_pixel(const AVPixFmtDescriptor *pixdesc)
Return the number of bits per pixel used by the pixel format described by pixdesc.
Definition pixdesc.c:3412
const char * av_get_pix_fmt_name(enum AVPixelFormat pix_fmt)
Return the short name for a pixel format, NULL in case pix_fmt is unknown.
Definition pixdesc.c:3380
const char * av_chroma_location_name(enum AVChromaLocation location)
Definition pixdesc.c:3881
const char * av_color_transfer_name(enum AVColorTransferCharacteristic transfer)
Definition pixdesc.c:3827
const char * av_color_primaries_name(enum AVColorPrimaries primaries)
Definition pixdesc.c:3794
enum AVPixelFormat av_pix_fmt_swap_endianness(enum AVPixelFormat pix_fmt)
Utility function to swap the endianness of a pixel format.
Definition pixdesc.c:3515
#define AV_PIX_FMT_FLAG_RGB
The pixel format contains RGB-like data (as opposed to YUV/grayscale).
Definition pixdesc.h:136
AVChromaLocation
Location of chroma samples.
Definition pixfmt.h:802
@ AVCHROMA_LOC_UNSPECIFIED
Definition pixfmt.h:803
AVColorRange
Visual content value range.
Definition pixfmt.h:748
@ AVCOL_RANGE_UNSPECIFIED
Definition pixfmt.h:749
AVAlphaMode
Correlation between the alpha channel and color values.
Definition pixfmt.h:816
@ AVALPHA_MODE_UNSPECIFIED
Unknown alpha handling, or no alpha channel.
Definition pixfmt.h:817
AVPixelFormat
Pixel format.
Definition pixfmt.h:71
@ AV_PIX_FMT_NONE
Definition pixfmt.h:72
AVColorPrimaries
Chromaticity coordinates of the source primaries.
Definition pixfmt.h:642
@ AVCOL_PRI_UNSPECIFIED
Definition pixfmt.h:645
AVColorTransferCharacteristic
Color Transfer Characteristic.
Definition pixfmt.h:672
@ AVCOL_TRC_UNSPECIFIED
Definition pixfmt.h:675
AVColorSpace
YUV colorspace type.
Definition pixfmt.h:706
@ AVCOL_SPC_UNSPECIFIED
Definition pixfmt.h:709
const char * name
Definition qsvenc.c:142
#define FF_ARRAY_ELEMS(a)
Spherical video.
Ambient viewing environment metadata as defined by H.274.
AVRational ambient_illuminance
Environmental illuminance of the ambient viewing environment in lux.
AVRational ambient_light_x
Normalized x chromaticity coordinate of the environmental ambient light in the nominal viewing enviro...
AVRational ambient_light_y
Normalized y chromaticity coordinate of the environmental ambient light in the nominal viewing enviro...
This structure describes the bitrate properties of an encoded bitstream.
Definition defs.h:296
int64_t avg_bitrate
Average bitrate of the stream, in bits per second.
Definition defs.h:311
int64_t max_bitrate
Maximum bitrate of the stream, in bits per second.
Definition defs.h:301
int64_t buffer_size
The size of the buffer to which the ratecontrol is applied, in bits.
Definition defs.h:317
uint64_t vbv_delay
The delay between the time the packet this structure is associated with is received and the time when...
Definition defs.h:326
int64_t min_bitrate
Minimum bitrate of the stream, in bits per second.
Definition defs.h:306
enum AVChannelOrder order
Channel order used in this layout.
int nb_channels
Number of channels in this layout.
int64_t id
unique ID to identify the chapter
Definition avformat.h:1297
int64_t start
Definition avformat.h:1299
AVDictionary * metadata
Definition avformat.h:1300
int64_t end
chapter start/end time in time_base units
Definition avformat.h:1299
AVRational time_base
time base in which the start/end timestamps are specified
Definition avformat.h:1298
Describe the class of an AVClass context structure.
Definition log.h:76
AVClassCategory(* get_category)(void *ctx)
Callback to return the instance category.
Definition log.h:140
AVClassCategory category
Category used for visualization (like color).
Definition log.h:133
int parent_log_context_offset
Offset in the structure where a pointer to the parent context for logging is stored.
Definition log.h:124
const char *(* item_name)(void *ctx)
A pointer to a function which returns the name of a context instance ctx associated with the class.
Definition log.h:87
main external API structure.
Definition avcodec.h:443
AVRational pkt_timebase
Timebase in which pkt_dts/pts and AVPacket.dts/pts are expressed.
Definition avcodec.h:554
This struct describes the properties of a single codec described by an AVCodecID.
Definition codec_desc.h:38
const char * long_name
A more descriptive name for this codec.
Definition codec_desc.h:50
const char * name
Name of the codec described by this descriptor.
Definition codec_desc.h:46
This struct describes the properties of an encoded stream.
Definition codec_par.h:49
enum AVColorSpace color_space
Definition codec_par.h:192
int extradata_size
Size of the extradata content in bytes.
Definition codec_par.h:75
enum AVFieldOrder field_order
The order of the fields in interlaced video.
Definition codec_par.h:182
int height
The height of the video frame in pixels.
Definition codec_par.h:150
int nb_coded_side_data
Amount of entries in coded_side_data.
Definition codec_par.h:88
AVChannelLayout ch_layout
The channel layout and number of channels.
Definition codec_par.h:207
int width
The width of the video frame in pixels.
Definition codec_par.h:143
int64_t bit_rate
The average bitrate of the encoded data (in bits per second).
Definition codec_par.h:99
enum AVMediaType codec_type
General type of the encoded data.
Definition codec_par.h:53
int profile
Codec-specific bitstream restrictions that the stream conforms to.
Definition codec_par.h:135
int video_delay
Number of delayed frames.
Definition codec_par.h:200
uint32_t codec_tag
Additional information about the codec (corresponds to the AVI FOURCC).
Definition codec_par.h:61
uint8_t * extradata
Extra binary data needed for initializing the decoder, codec-dependent.
Definition codec_par.h:71
enum AVCodecID codec_id
Specific type of the encoded data (the codec used).
Definition codec_par.h:57
enum AVColorPrimaries color_primaries
Definition codec_par.h:190
int sample_rate
The number of audio samples per second.
Definition codec_par.h:213
enum AVColorTransferCharacteristic color_trc
Definition codec_par.h:191
int initial_padding
Number of padding audio samples at the start.
Definition codec_par.h:239
AVPacketSideData * coded_side_data
Additional data associated with the entire stream.
Definition codec_par.h:83
enum AVChromaLocation chroma_location
Definition codec_par.h:193
enum AVColorRange color_range
Additional colorspace characteristics.
Definition codec_par.h:189
AVCodec.
Definition codec.h:175
int depth
Number of bits in the component.
Definition pixdesc.h:57
Content light level needed by to transmit HDR over HDMI (CTA-861.3).
Dolby Vision RPU colorspace metadata parameters.
Definition dovi_meta.h:171
Dolby Vision RPU data mapping parameters.
Definition dovi_meta.h:152
uint32_t num_x_partitions
Definition dovi_meta.h:160
AVDOVINLQParams nlq[3]
Definition dovi_meta.h:162
uint8_t mapping_color_space
Definition dovi_meta.h:154
uint8_t mapping_chroma_format_idc
Definition dovi_meta.h:155
AVDOVIReshapingCurve curves[3]
Definition dovi_meta.h:156
enum AVDOVINLQMethod nlq_method_idc
Definition dovi_meta.h:159
uint32_t num_y_partitions
Definition dovi_meta.h:161
Combined struct representing a combination of header, mapping and color metadata, for attaching to fr...
Definition dovi_meta.h:345
Coefficients of the non-linear inverse quantization.
Definition dovi_meta.h:139
uint64_t linear_deadzone_slope
Definition dovi_meta.h:143
uint64_t linear_deadzone_threshold
Definition dovi_meta.h:144
uint16_t nlq_offset
Definition dovi_meta.h:140
uint64_t vdr_in_max
Definition dovi_meta.h:141
uint8_t poly_order[AV_DOVI_MAX_PIECES]
Definition dovi_meta.h:122
enum AVDOVIMappingMethod mapping_idc[AV_DOVI_MAX_PIECES]
Definition dovi_meta.h:120
int64_t mmr_constant[AV_DOVI_MAX_PIECES]
Definition dovi_meta.h:126
int64_t mmr_coef[AV_DOVI_MAX_PIECES][3][7]
Definition dovi_meta.h:127
int64_t poly_coef[AV_DOVI_MAX_PIECES][3]
Definition dovi_meta.h:123
uint16_t pivots[AV_DOVI_MAX_PIECES+1]
Definition dovi_meta.h:119
uint8_t mmr_order[AV_DOVI_MAX_PIECES]
Definition dovi_meta.h:125
Dolby Vision RPU data header.
Definition dovi_meta.h:87
uint8_t vdr_rpu_profile
Definition dovi_meta.h:90
uint8_t spatial_resampling_filter_flag
Definition dovi_meta.h:100
uint8_t vdr_bit_depth
Definition dovi_meta.h:99
uint8_t el_spatial_resampling_filter_flag
Definition dovi_meta.h:101
uint8_t bl_video_full_range_flag
Definition dovi_meta.h:96
uint16_t rpu_format
Definition dovi_meta.h:89
uint8_t disable_residual_flag
Definition dovi_meta.h:102
uint8_t vdr_rpu_normalized_idc
Definition dovi_meta.h:95
uint8_t coef_log2_denom
Definition dovi_meta.h:94
uint8_t chroma_resampling_explicit_filter_flag
Definition dovi_meta.h:92
uint8_t coef_data_type
Definition dovi_meta.h:93
uint8_t vdr_rpu_level
Definition dovi_meta.h:91
char * key
Definition dict.h:91
char * value
Definition dict.h:92
This structure describes optional metadata relevant to a downmix procedure.
double lfe_mix_level
Absolute scale factor representing the level at which the LFE data is mixed into L/R channels during ...
double surround_mix_level_ltrt
Absolute scale factor representing the nominal level of the surround channels during an Lt/Rt compati...
double surround_mix_level
Absolute scale factor representing the nominal level of the surround channels during a regular downmi...
double center_mix_level
Absolute scale factor representing the nominal level of the center channel during a regular downmix.
enum AVDownmixType preferred_downmix_type
Type of downmix preferred by the mastering engineer.
double center_mix_level_ltrt
Absolute scale factor representing the nominal level of the center channel during an Lt/Rt compatible...
This struct represents dynamic metadata for color volume transform - application 4 of SMPTE 2094-40:2...
This struct represents dynamic metadata for color volume transform as specified in the SMPTE 2094-50 ...
This struct represents dynamic metadata for color volume transform - CUVA 005.1:2021 standard.
This structure describes how to handle film grain synthesis for AOM codecs.
int chroma_scaling_from_luma
Signals whether to derive the chroma scaling function from the luma.
int limit_output_range
Signals to clip to limited color levels after film grain application.
int scaling_shift
Specifies the shift applied to the chroma components.
int grain_scale_shift
Signals the down shift applied to the generated gaussian numbers during synthesis.
int num_uv_points[2]
If chroma_scaling_from_luma is set to 0, signals the chroma scaling function parameters.
int overlap_flag
Signals whether to overlap film grain blocks.
int ar_coeff_lag
Specifies the auto-regression lag.
int uv_offset[2]
Offset used for component scaling function.
int ar_coeff_shift
Specifies the range of the auto-regressive coefficients.
uint8_t uv_points[2][10][2]
int8_t ar_coeffs_uv[2][25]
Chroma auto-regression coefficients.
int uv_mult[2]
Specifies the luma/chroma multipliers for the index to the component scaling function.
int8_t ar_coeffs_y[24]
Luma auto-regression coefficients.
int num_y_points
Number of points, and the scale and value for each point of the piecewise linear scaling function for...
This structure describes how to handle film grain synthesis for codecs using the ITU-T H....
uint8_t intensity_interval_upper_bound[3][256]
Specifies the upper bound of each intensity interval for which the set of model values applies for th...
int blending_mode_id
Specifies the blending mode used to blend the simulated film grain with the decoded images.
uint8_t intensity_interval_lower_bound[3][256]
Specifies the lower ounds of each intensity interval for whichthe set of model values applies for the...
int log2_scale_factor
Specifies a scale factor used in the film grain characterization equations.
int16_t comp_model_value[3][256][6]
Specifies the model values for the component for each intensity interval.
int model_id
Specifies the film grain simulation mode.
int component_model_present[3]
Indicates if the modelling of film grain for a given component is present.
uint16_t num_intensity_intervals[3]
Specifies the number of intensity intervals for which a specific set of model values has been estimat...
uint8_t num_model_values[3]
Specifies the number of model values present for each intensity interval in which the film grain has ...
This structure describes how to handle film grain synthesis in video for specific codecs.
enum AVColorPrimaries color_primaries
AVFilmGrainAOMParams aom
AVFilmGrainH274Params h274
enum AVColorRange color_range
Intended video signal characteristics.
int subsampling_x
Intended subsampling ratio, or 0 for luma-only streams.
int bit_depth_luma
Intended bit depth, or 0 for unknown/unspecified.
union AVFilmGrainParams::@177057277273004265167152242113040056044005264354 codec
Additional fields may be added both here and in any structure included.
enum AVFilmGrainParamsType type
Specifies the codec for which this structure is valid.
int width
Intended display resolution.
uint64_t seed
Seed to use for the synthesis process, if the codec allows for it.
enum AVColorTransferCharacteristic color_trc
enum AVColorSpace color_space
Format I/O context.
Definition avformat.h:1337
unsigned int nb_streams
Number of elements in AVFormatContext.streams.
Definition avformat.h:1393
AVStream ** streams
A list of all streams in the file.
Definition avformat.h:1405
Structure to hold side data for an AVFrame.
Definition frame.h:334
enum AVFrameSideDataType type
Definition frame.h:335
AVDictionary * metadata
Definition frame.h:338
size_t size
Definition frame.h:337
uint8_t * data
Definition frame.h:336
This structure describes decoded (raw) audio or video data.
Definition frame.h:479
Color transform parameters at a processing window in a dynamic metadata for SMPTE 2094-40.
HDR Vivid three spline params.
AVRational enable_strength
3Spline_enable_Strength of three Spline.
AVRational th_delta1
3Spline_TH_Delta1 of three Spline.
int th_mode
The mode of three Spline.
AVRational th_delta2
3Spline_TH_Delta2 of three Spline.
AVRational th_enable_mb
three_Spline_TH_enable_MB is in the range of 0.0 to 1.0, inclusive and in multiples of 1....
AVRational th_enable
3Spline_TH_enable of three Spline.
Color tone mapping parameters at a processing window in a dynamic metadata for CUVA 005....
int three_Spline_enable_flag
indicates 3Spline_enable_flag in the base parameter, This flag indicates that transfer three Spline o...
int base_param_k1
indicates k1_0 in the base parameter, base_param_k1 <= 1: k1_0 = base_param_k1 base_param_k1 > 1: res...
AVRational base_param_m_m
base_param_m_m in the base parameter, in multiples of 1.0/10.
AVRational base_param_m_p
base_param_m_p in the base parameter, in multiples of 1.0/16383.
int base_param_k3
indicates k3_0 in the base parameter, base_param_k3 == 1: k3_0 = base_param_k3 base_param_k3 == 2: k3...
AVRational base_param_m_b
base_param_m_b in the base parameter, in multiples of 1/1023.
AVRational base_param_m_a
base_param_m_a in the base parameter, in multiples of 1.0/1023.
AVRational base_param_Delta
base_param_Delta in the base parameter, in multiples of 1.0/127.
int three_Spline_num
The number of three Spline.
AVRational base_param_m_n
base_param_m_n in the base parameter, in multiples of 1.0/10.
int base_param_k2
indicates k2_0 in the base parameter, base_param_k2 <= 1: k2_0 = base_param_k2 base_param_k2 > 1: res...
AVRational targeted_system_display_maximum_luminance
The nominal maximum display luminance of the targeted system display, in multiples of 1....
int base_enable_flag
This flag indicates that transfer the base parameter(for value of 1)
int base_param_Delta_enable_mode
This flag indicates that delta mode of base parameter(for value of 1)
Color transform parameters at a processing window in a dynamic metadata for CUVA 005....
Information on how to combine one or more audio streams, as defined in section 3.6 of IAMF.
Definition iamf.h:359
enum AVIAMFAudioElementType audio_element_type
Audio element type as defined in section 3.6 of IAMF.
Definition iamf.h:391
AVIAMFParamDefinition * recon_gain_info
Recon gain information used to reconstruct a scalable channel audio representation.
Definition iamf.h:386
unsigned int default_w
Default weight value as defined in section 3.6 of IAMF.
Definition iamf.h:396
AVIAMFParamDefinition * demixing_info
Demixing information used to reconstruct a scalable channel audio representation.
Definition iamf.h:379
AVIAMFLayer ** layers
Definition iamf.h:362
unsigned int nb_layers
Number of layers, or channel groups, in the Audio Element.
Definition iamf.h:371
Demixing Info Parameter Data as defined in section 3.8.2 of IAMF.
Definition iamf.h:128
unsigned int dmixp_mode
Pre-defined combination of demixing parameters.
Definition iamf.h:140
unsigned int subblock_duration
Duration for the given subblock, in units of 1 / parameter_rate.
Definition iamf.h:136
A layer defining a Channel Layout in the Audio Element.
Definition iamf.h:294
unsigned int output_gain_flags
Output gain channel flags as defined in section 3.6.2 of IAMF.
Definition iamf.h:310
enum AVIAMFAmbisonicsMode ambisonics_mode
Ambisonics mode as defined in section 3.6.3 of IAMF.
Definition iamf.h:328
unsigned int nb_demixing_matrix
The length of the Demixing matrix array.
Definition iamf.h:343
AVRational * demixing_matrix
Demixing matrix as defined in section 3.6.3 of IAMF.
Definition iamf.h:336
AVChannelLayout ch_layout
Definition iamf.h:297
AVRational output_gain
Output gain as defined in section 3.6.2 of IAMF.
Definition iamf.h:316
Mix Gain Parameter Data as defined in section 3.8.1 of IAMF.
Definition iamf.h:77
Information on how to render and mix one or more AVIAMFAudioElement to generate the final audio outpu...
Definition iamf.h:616
unsigned int nb_submixes
Number of submixes in the presentation.
Definition iamf.h:632
AVDictionary * annotations
A dictionary of strings describing the mix in different languages.
Definition iamf.h:644
AVIAMFSubmix ** submixes
Array of submixes.
Definition iamf.h:625
Parameters as defined in section 3.6.1 of IAMF.
Definition iamf.h:193
unsigned int parameter_rate
Sample rate for the parameter substream.
Definition iamf.h:222
unsigned int duration
The accumulated duration of all blocks in this parameter definition, in units of 1 / parameter_rate.
Definition iamf.h:231
unsigned int constant_subblock_duration
The duration of every subblock in the case where all subblocks, with the optional exception of the la...
Definition iamf.h:238
unsigned int parameter_id
Identifier for the parameter substream.
Definition iamf.h:218
enum AVIAMFParamDefinitionType type
Parameters type.
Definition iamf.h:213
unsigned int nb_subblocks
Number of subblocks in the array.
Definition iamf.h:208
Recon Gain Info Parameter Data as defined in section 3.8.3 of IAMF.
Definition iamf.h:148
unsigned int subblock_duration
Duration for the given subblock, in units of 1 / parameter_rate.
Definition iamf.h:156
Submix element as defined in section 3.7 of IAMF.
Definition iamf.h:449
AVIAMFParamDefinition * element_mix_config
Information required required for applying any processing to the referenced and rendered Audio Elemen...
Definition iamf.h:464
unsigned int audio_element_id
The id of the Audio Element this submix element references.
Definition iamf.h:455
AVDictionary * annotations
A dictionary of strings describing the submix in different languages.
Definition iamf.h:493
enum AVIAMFHeadphonesMode headphones_rendering_mode
A value that indicates whether the referenced channel-based Audio Element shall be rendered to stereo...
Definition iamf.h:481
AVRational default_mix_gain
Default mix gain value to apply when there are no AVIAMFParamDefinition with element_mix_config's par...
Definition iamf.h:472
Submix layout as defined in section 3.7.6 of IAMF.
Definition iamf.h:517
Submix layout as defined in section 3.7 of IAMF.
Definition iamf.h:559
AVRational default_mix_gain
Default mix gain value to apply when there are no AVIAMFParamDefinition with output_mix_config's para...
Definition iamf.h:606
unsigned int nb_elements
Number of elements in the submix.
Definition iamf.h:575
AVIAMFSubmixElement ** elements
Array of submix elements.
Definition iamf.h:568
AVIAMFSubmixLayout ** layouts
Array of submix layouts.
Definition iamf.h:583
AVIAMFParamDefinition * output_mix_config
Information required for post-processing the mixed audio signal to generate the audio signal for play...
Definition iamf.h:598
unsigned int nb_layouts
Number of layouts in the submix.
Definition iamf.h:590
Mastering display metadata capable of representing the color volume of the display used to master the...
AVOption.
Definition opt.h:428
const char * name
Definition opt.h:429
int flags
A combination of AV_OPT_FLAG_*.
Definition opt.h:471
This structure stores auxiliary information for decoding, presenting, or otherwise processing the cod...
Definition packet.h:424
uint8_t * data
Definition packet.h:425
enum AVPacketSideDataType type
Definition packet.h:427
This structure stores compressed data.
Definition packet.h:580
Descriptor that unambiguously describes how the bits of a pixel are stored in the up to 4 data planes...
Definition pixdesc.h:69
const char * name
Definition pixdesc.h:70
AVComponentDescriptor comp[4]
Parameters that describe how pixels are packed.
Definition pixdesc.h:105
uint8_t log2_chroma_w
Amount to shift the luma width right to find the chroma width.
Definition pixdesc.h:80
uint64_t flags
Combination of AV_PIX_FMT_FLAG_... flags.
Definition pixdesc.h:94
uint8_t log2_chroma_h
Amount to shift the luma height right to find the chroma height.
Definition pixdesc.h:89
uint8_t nb_components
The number of components each pixel has, (1-4)
Definition pixdesc.h:71
New fields can be added to the end with minor version bumps.
Definition avformat.h:1261
int pmt_pid
Definition avformat.h:1270
unsigned int nb_stream_indexes
Definition avformat.h:1266
int program_num
Definition avformat.h:1269
unsigned int * stream_index
Definition avformat.h:1265
int pcr_pid
Definition avformat.h:1271
AVDictionary * metadata
Definition avformat.h:1267
Rational number (pair of numerator and denominator).
Definition rational.h:58
int num
Numerator.
Definition rational.h:59
int den
Denominator.
Definition rational.h:60
This structure describes how to handle spherical videos, outlining information about projection,...
Definition spherical.h:100
enum AVSphericalProjection projection
Projection type.
Definition spherical.h:104
int32_t pitch
Rotation around the right vector [-90, 90].
Definition spherical.h:145
int32_t roll
Rotation around the forward vector [-180, 180].
Definition spherical.h:146
int32_t yaw
Rotation around the up vector [-180, 180].
Definition spherical.h:144
uint32_t padding
Number of pixels to pad from the edge of each cube face.
Definition spherical.h:200
Stereo 3D type: this structure describes how two videos are packed within a single video surface,...
Definition stereo3d.h:203
enum AVStereo3DType type
How views are packed within the video.
Definition stereo3d.h:207
uint32_t baseline
The distance between the centres of the lenses of the camera system, in micrometers.
Definition stereo3d.h:228
AVRational horizontal_disparity_adjustment
Relative shift of the left and right images, which changes the zero parallax plane.
Definition stereo3d.h:234
enum AVStereo3DPrimaryEye primary_eye
Which eye is the primary eye when rendering in 2D.
Definition stereo3d.h:222
int flags
Additional information about the frame packing.
Definition stereo3d.h:212
AVRational horizontal_field_of_view
Horizontal field of view, in degrees.
Definition stereo3d.h:239
enum AVStereo3DView view
Determines which views are packed.
Definition stereo3d.h:217
AVStreamGroupTileGrid holds information on how to combine several independent images on a single canv...
Definition avformat.h:975
int nb_coded_side_data
Amount of entries in coded_side_data.
Definition avformat.h:1083
int width
Width of the final image for presentation.
Definition avformat.h:1060
int height
Height of the final image for presentation.
Definition avformat.h:1070
int coded_width
Width of the canvas.
Definition avformat.h:990
struct AVStreamGroupTileGrid::@036353327352337314037001273105074056331305251354 * offsets
An nb_tiles sized array of offsets in pixels from the topleft edge of the canvas, indicating where ea...
unsigned int nb_tiles
Amount of tiles in the grid.
Definition avformat.h:983
int horizontal_offset
Offset in pixels from the left edge of the canvas where the actual image meant for presentation start...
Definition avformat.h:1042
int horizontal
Offset in pixels from the left edge of the canvas where the tile should be placed.
Definition avformat.h:1019
unsigned int idx
Index of the stream in the group this tile references.
Definition avformat.h:1014
int vertical_offset
Offset in pixels from the top edge of the canvas where the actual image meant for presentation starts...
Definition avformat.h:1049
int coded_height
Width of the canvas.
Definition avformat.h:996
AVPacketSideData * coded_side_data
Additional data associated with the grid.
Definition avformat.h:1078
int vertical
Offset in pixels from the top edge of the canvas where the tile should be placed.
Definition avformat.h:1024
union AVStreamGroup::@166361102046003066253145020066347265153020354020 params
Group type-specific parameters.
enum AVStreamGroupParamsType type
Group type.
Definition avformat.h:1190
struct AVIAMFMixPresentation * iamf_mix_presentation
Definition avformat.h:1197
struct AVStreamGroupTileGrid * tile_grid
Definition avformat.h:1198
unsigned int nb_streams
Number of elements in AVStreamGroup.streams.
Definition avformat.h:1225
AVDictionary * metadata
Metadata that applies to the whole group.
Definition avformat.h:1218
unsigned int index
Group index in AVFormatContext.
Definition avformat.h:1174
struct AVIAMFAudioElement * iamf_audio_element
Definition avformat.h:1196
int disposition
Stream group disposition - a combination of AV_DISPOSITION_* flags.
Definition avformat.h:1248
int64_t id
Group type-specific group ID.
Definition avformat.h:1182
AVStream ** streams
A list of streams in the group.
Definition avformat.h:1238
Stream structure.
Definition avformat.h:768
AVCodecParameters * codecpar
Codec parameters associated with this stream.
Definition avformat.h:791
int64_t nb_frames
number of frames in this stream if known or 0
Definition avformat.h:829
enum AVDiscard discard
Selects which packets can be discarded at will and do not need to be demuxed.
Definition avformat.h:839
int64_t duration
Decoding: duration of the stream, in stream time base.
Definition avformat.h:827
AVDictionary * metadata
Definition avformat.h:848
int id
Format-specific stream ID.
Definition avformat.h:780
int index
stream index in AVFormatContext
Definition avformat.h:774
int64_t start_time
Decoding: pts of the first frame of the stream in presentation order, in stream time base.
Definition avformat.h:817
AVRational avg_frame_rate
Average framerate.
Definition avformat.h:857
AVRational time_base
This is the fundamental unit of time (in seconds) in terms of which frame timestamps are represented.
Definition avformat.h:807
AVRational r_frame_rate
Real base framerate of the stream.
Definition avformat.h:902
int disposition
Stream disposition - a combination of AV_DISPOSITION_* flags.
Definition avformat.h:837
uint16_t format
Definition avcodec.h:2103
uint32_t start_display_time
Definition avcodec.h:2104
uint32_t end_display_time
Definition avcodec.h:2105
unsigned num_rects
Definition avcodec.h:2106
int64_t pts
Same as packet pts, in AV_TIME_BASE.
Definition avcodec.h:2108
const AVTextFormatSection * section[SECTION_MAX_NB_LEVELS]
section per each level
int level
current level, starting from 0
unsigned int string_validation_utf8_flags
const AVTextFormatter * formatter
the AVTextFormatter of which this is an instance
const char * name
const int children_ids[SECTION_MAX_NB_CHILDREN+1]
list of children section IDS, terminated by -1
const char * unique_name
unique section name, in case the name is ambiguous
int id
unique id identifying a section
int flags
a combination or AV_TEXTFORMAT__FLAG_*
AVDictionary * entries_to_show
Definition ffprobe.c:336
int show_all_entries
Definition ffprobe.c:334
int explicitly_selected
Selected by unique name or through a selected parent.
Definition ffprobe.c:335
int64_t pkt_pos
Definition ffplay.c:184
int pkt_size
Definition ffprobe.c:77
InputStream ** streams
Definition ffmpeg.h:530
AVFormatContext * fmt_ctx
Definition ffprobe.c:87
int nb_streams
Definition ffmpeg.h:531
AVCodecContext * dec_ctx
Definition ffprobe.c:83
AVStream * st
Definition ffmpeg.h:476
char * context_name
Definition ffprobe.c:363
AVClassCategory parent_category
Definition ffprobe.c:368
AVClassCategory category
Definition ffprobe.c:366
char * log_message
Definition ffprobe.c:365
char * parent_name
Definition ffprobe.c:367
int log_level
Definition ffprobe.c:364
Definition cms.c:66
int64_t end
start, end in second/AV_TIME_BASE units
Definition ffprobe.c:152
int duration_frames
Definition ffprobe.c:155
int64_t start
Definition ffprobe.c:152
int has_start
Definition ffprobe.c:153
int end_is_offset
Definition ffprobe.c:154
int id
identifier
Definition ffprobe.c:151
int start_is_offset
Definition ffprobe.c:154
uint8_t level
Definition svq3.c:208
libswresample public header
external API header
#define av_free(p)
#define av_malloc_array(a, b)
#define av_freep(p)
#define av_log(a,...)
static void error(const char *err)
static void ERROR(const char *str)
Definition audio_fifo.c:58
int num
Definition error.c:23
#define height
Definition dsp.h:89
#define width
Definition dsp.h:89
char * av_timecode_make_smpte_tc_string2(char *buf, AVRational rate, uint32_t tcsmpte, int prevent_df, int skip_field)
Get the timecode string from the SMPTE timecode format.
Definition timecode.c:131
char * av_timecode_make_mpeg_tc_string(char *buf, uint32_t tc25bit)
Get the timecode string from the 25-bit timecode format (MPEG GOP format).
Definition timecode.c:147
Timecode helpers header.
#define AV_TIMECODE_STR_SIZE
Definition timecode.h:33
timestamp utils, mostly useful for debugging/logging purposes
#define av_ts2timestr(ts, tb)
Convenience macro, the return value should be used only directly in function arguments but never stan...
Definition timestamp.h:83
static int64_t pts
int size
color_range
static enum AVPixelFormat pixel_formats[]
Definition vf_sr.c:64
static double c[64]