27 #include "libavutil/ffversion.h"
58 # ifdef pthread_mutex_lock
59 # undef pthread_mutex_lock
61 # define pthread_mutex_lock(a) do{}while(0)
62 # ifdef pthread_mutex_unlock
63 # undef pthread_mutex_unlock
65 # define pthread_mutex_unlock(a) do{}while(0)
137 #define SECTION_MAX_NB_CHILDREN 10
143 #define SECTION_FLAG_IS_WRAPPER 1
144 #define SECTION_FLAG_IS_ARRAY 2
145 #define SECTION_FLAG_HAS_VARIABLE_FIELDS 4
257 static const struct {
263 { 1.0, 1.0,
"",
"" },
264 { 1.024e3, 1e3,
"Ki",
"K" },
265 { 1.048576e6, 1e6,
"Mi",
"M" },
266 { 1.073741824e9, 1e9,
"Gi",
"G" },
267 { 1.099511627776e12, 1e12,
"Ti",
"T" },
268 { 1.125899906842624e15, 1e15,
"Pi",
"P" },
301 static int print_prefix = 1;
302 void *new_log_buffer;
313 if (new_log_buffer) {
317 log_buffer = new_log_buffer;
318 memset(&log_buffer[
log_buffer_size], 0,
sizeof(log_buffer[log_buffer_size]));
326 for (i=strlen(msg) - 1; i>=0 && msg[i] ==
'\n'; i--) {
332 if (parent && *parent) {
335 (*parent)->get_category ? (*parent)->get_category(parent) :(*parent)->category;
357 union {
double d;
long long int i; }
val;
371 vald = vali = uv.
val.
i;
378 mins = (
int)secs / 60;
379 secs = secs - mins * 60;
382 snprintf(buf, buf_size,
"%d:%02d:%09.6f", hours, mins, secs);
384 const char *prefix_string =
"";
390 index = (
long long int) (
log2(vald)) / 10;
395 index = (
long long int) (log10(vald)) / 3;
404 snprintf(buf, buf_size,
"%f", vald);
406 snprintf(buf, buf_size,
"%lld", vali);
418 #define WRITER_FLAG_DISPLAY_OPTIONAL_FIELDS 1
419 #define WRITER_FLAG_PUT_PACKETS_AND_FRAMES_IN_SAME_CHAPTER 2
444 #define SECTION_MAX_NB_LEVELS 10
480 #define OFFSET(x) offsetof(WriterContext, x)
483 {
"string_validation",
"set string validation mode",
485 {
"sv",
"set string validation mode",
490 {
"string_validation_replacement",
"set string validation replacement string",
OFFSET(string_validation_replacement),
AV_OPT_TYPE_STRING, {.str=
""}},
491 {
"svr",
"set string validation replacement string",
OFFSET(string_validation_replacement),
AV_OPT_TYPE_STRING, {.str=
"\xEF\xBF\xBD"}},
518 if ((*wctx)->writer->uninit)
519 (*wctx)->writer->uninit(*wctx);
522 if ((*wctx)->writer->priv_class)
533 for (i = 0; i < ubuf_size; i++)
539 const struct section *sections,
int nb_sections)
554 (*wctx)->writer = writer;
557 (*wctx)->nb_sections = nb_sections;
562 void *priv_ctx = (*wctx)->priv;
573 av_log(*wctx,
AV_LOG_ERROR,
"Failed to parse option string '%s' provided to writer context\n", args);
580 av_log(*wctx,
AV_LOG_ERROR,
"Failed to set option '%s' with value '%s' provided to writer context\n",
592 const uint8_t *p = (*wctx)->string_validation_replacement;
593 const uint8_t *endp = p + strlen(p);
597 ret =
av_utf8_decode(&code, &p, endp, (*wctx)->string_validation_utf8_flags);
603 "Invalid UTF8 sequence %s found in string validation replace '%s'\n",
604 bp.str, (*wctx)->string_validation_replacement);
613 if ((*wctx)->writer->init)
614 ret = (*wctx)->writer->init(*wctx);
628 int parent_section_id;
631 parent_section_id = wctx->
level ?
652 int parent_section_id = wctx->
level ?
667 const char *key,
long long int val)
681 int invalid_chars_nb = 0, ret = 0;
685 endp = src + strlen(src);
686 for (p = (
uint8_t *)src; *p;) {
696 "Invalid UTF-8 sequence %s found in string '%s'\n", bp.str, src);
706 "Invalid UTF-8 sequence found in string '%s'\n", src);
723 "%d invalid UTF-8 sequence(s) found in string '%s', replaced with '%s'\n",
732 #define PRINT_STRING_OPT 1
733 #define PRINT_STRING_VALIDATE 2
736 const char *key,
const char *
val,
int flags)
749 if (ret < 0)
goto end;
751 if (ret < 0)
goto end;
756 "Invalid key=value string combination %s=%s in section %s\n",
781 int64_t ts,
const AVRational *time_base,
int is_duration)
785 if ((!is_duration && ts ==
AV_NOPTS_VALUE) || (is_duration && ts == 0)) {
788 double d = ts *
av_q2d(*time_base);
799 if ((!is_duration && ts ==
AV_NOPTS_VALUE) || (is_duration && ts == 0)) {
817 for (i = 0; i < l; i++) {
823 for (i = 0; i < l; i++)
844 p = buf + strlen(buf);
851 int columns,
int bytes,
int offset_add)
860 l =
FFMIN(size, columns);
861 for (i = 0; i < l; i++) {
862 if (bytes == 1)
av_bprintf(&bp, format, *data);
869 offset += offset_add;
875 #define MAX_REGISTERED_WRITERS_NB 64
881 static int next_registered_writer_idx = 0;
886 registered_writers[next_registered_writer_idx++] = writer;
894 for (i = 0; registered_writers[
i]; i++)
895 if (!strcmp(registered_writers[i]->name, name))
896 return registered_writers[
i];
904 #define DEFINE_WRITER_CLASS(name) \
905 static const char *name##_get_name(void *ctx) \
909 static const AVClass name##_class = { \
910 .class_name = #name, \
911 .item_name = name##_get_name, \
912 .option = name##_options \
925 #define OFFSET(x) offsetof(DefaultContext, x)
928 {
"noprint_wrappers",
"do not print headers and footers",
OFFSET(noprint_wrappers),
AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1 },
941 for (i = 0; src[i] && i < dst_size-1; i++)
952 const struct section *parent_section = wctx->
level ?
956 if (parent_section &&
991 printf(
"%s\n", value);
1000 printf(
"%lld\n", value);
1011 .priv_class = &default_class,
1019 static const char *
c_escape_str(AVBPrint *dst,
const char *
src,
const char sep,
void *log_ctx)
1023 for (p = src; *p; p++) {
1025 case '\b':
av_bprintf(dst,
"%s",
"\\b");
break;
1026 case '\f':
av_bprintf(dst,
"%s",
"\\f");
break;
1027 case '\n':
av_bprintf(dst,
"%s",
"\\n");
break;
1028 case '\r':
av_bprintf(dst,
"%s",
"\\r");
break;
1029 case '\\':
av_bprintf(dst,
"%s",
"\\\\");
break;
1044 char meta_chars[] = { sep,
'"',
'\n',
'\r',
'\0' };
1045 int needs_quoting = !!src[strcspn(src, meta_chars)];
1050 for (; *
src; src++) {
1072 const char * (*escape_str)(AVBPrint *dst,
const char *
src,
const char sep,
void *log_ctx);
1079 #define OFFSET(x) offsetof(CompactContext, x)
1100 av_log(wctx,
AV_LOG_ERROR,
"Item separator '%s' specified, but must contain a single character\n",
1121 const struct section *parent_section = wctx->
level ?
1163 if (!compact->
nokey)
1175 if (!compact->
nokey)
1177 printf(
"%lld", value);
1189 .priv_class = &compact_class,
1195 #define OFFSET(x) offsetof(CompactContext, x)
1220 .priv_class = &csv_class,
1233 #define OFFSET(x) offsetof(FlatContext, x)
1238 {
"hierarchical",
"specify if the section specification should be hierarchical",
OFFSET(hierarchical),
AV_OPT_TYPE_BOOL, {.i64=1}, 0, 1 },
1239 {
"h",
"specify if the section specification should be hierarchical",
OFFSET(hierarchical),
AV_OPT_TYPE_BOOL, {.i64=1}, 0, 1 },
1249 if (strlen(flat->
sep_str) != 1) {
1250 av_log(wctx,
AV_LOG_ERROR,
"Item separator '%s' specified, but must contain a single character\n",
1263 for (p = src; *p; p++) {
1264 if (!((*p >=
'0' && *p <=
'9') ||
1265 (*p >=
'a' && *p <=
'z') ||
1266 (*p >=
'A' && *p <=
'Z')))
1278 for (p = src; *p; p++) {
1280 case '\n':
av_bprintf(dst,
"%s",
"\\n");
break;
1281 case '\r':
av_bprintf(dst,
"%s",
"\\r");
break;
1282 case '\\':
av_bprintf(dst,
"%s",
"\\\\");
break;
1283 case '"':
av_bprintf(dst,
"%s",
"\\\"");
break;
1284 case '`':
av_bprintf(dst,
"%s",
"\\`");
break;
1285 case '$':
av_bprintf(dst,
"%s",
"\\$");
break;
1297 const struct section *parent_section = wctx->
level ?
1302 if (!parent_section)
1344 .priv_class = &flat_class,
1355 #define OFFSET(x) offsetof(INIContext, x)
1358 {
"hierarchical",
"specify if the section specification should be hierarchical",
OFFSET(hierarchical),
AV_OPT_TYPE_BOOL, {.i64=1}, 0, 1 },
1359 {
"h",
"specify if the section specification should be hierarchical",
OFFSET(hierarchical),
AV_OPT_TYPE_BOOL, {.i64=1}, 0, 1 },
1370 while (c = src[i++]) {
1372 case '\b':
av_bprintf(dst,
"%s",
"\\b");
break;
1373 case '\f':
av_bprintf(dst,
"%s",
"\\f");
break;
1374 case '\n':
av_bprintf(dst,
"%s",
"\\n");
break;
1375 case '\r':
av_bprintf(dst,
"%s",
"\\r");
break;
1376 case '\t':
av_bprintf(dst,
"%s",
"\\t");
break;
1382 if ((
unsigned char)c < 32)
1397 const struct section *parent_section = wctx->
level ?
1401 if (!parent_section) {
1402 printf(
"# ffprobe output\n\n");
1422 printf(
"[%s]\n", buf->str);
1438 printf(
"%s=%lld\n", key, value);
1448 .priv_class = &ini_class,
1461 #define OFFSET(x) offsetof(JSONContext, x)
1483 static const char json_escape[] = {
'"',
'\\',
'\b',
'\f',
'\n',
'\r',
'\t', 0};
1484 static const char json_subst[] = {
'"',
'\\',
'b',
'f',
'n',
'r',
't', 0};
1487 for (p = src; *p; p++) {
1488 char *
s = strchr(json_escape, *p);
1492 }
else if ((
unsigned char)*p < 32) {
1501 #define JSON_INDENT() printf("%*c", json->indent_level * 4, ' ')
1508 const struct section *parent_section = wctx->
level ?
1524 printf(
"\"%s\": [\n", buf.str);
1534 printf(
"\"type\": \"%s\"%s", section->
name, json->
item_sep);
1546 if (wctx->
level == 0) {
1564 const char *key,
const char *
value)
1610 .priv_class = &json_class,
1624 #define OFFSET(x) offsetof(XMLContext, x)
1627 {
"fully_qualified",
"specify if the output should be fully qualified",
OFFSET(fully_qualified),
AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1 },
1628 {
"q",
"specify if the output should be fully qualified",
OFFSET(fully_qualified),
AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1 },
1629 {
"xsd_strict",
"ensure that the output is XSD compliant",
OFFSET(xsd_strict),
AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1 },
1642 #define CHECK_COMPLIANCE(opt, opt_name) \
1644 av_log(wctx, AV_LOG_ERROR, \
1645 "XSD-compliant output selected but option '%s' was selected, XML output may be non-compliant.\n" \
1646 "You need to disable such option with '-no%s'\n", opt_name, opt_name); \
1647 return AVERROR(EINVAL); \
1655 "Interleaved frames and packets are not allowed in XSD. "
1656 "Select only one between the -show_frames and the -show_packets options.\n");
1668 for (p = src; *p; p++) {
1670 case '&' :
av_bprintf(dst,
"%s",
"&");
break;
1671 case '<' :
av_bprintf(dst,
"%s",
"<");
break;
1672 case '>' :
av_bprintf(dst,
"%s",
">");
break;
1673 case '"' :
av_bprintf(dst,
"%s",
""");
break;
1674 case '\'':
av_bprintf(dst,
"%s",
"'");
break;
1682 #define XML_INDENT() printf("%*c", xml->indent_level * 4, ' ')
1688 const struct section *parent_section = wctx->
level ?
1691 if (wctx->
level == 0) {
1692 const char *qual =
" xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' "
1693 "xmlns:ffprobe='http://www.ffmpeg.org/schema/ffprobe' "
1694 "xsi:schemaLocation='http://www.ffmpeg.org/schema/ffprobe ffprobe.xsd'";
1696 printf(
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
1697 printf(
"<%sffprobe%s>\n",
1729 if (wctx->
level == 0) {
1753 printf(
"<%s key=\"%s\"",
1770 printf(
"%s=\"%lld\"", key, value);
1782 .priv_class = &xml_class,
1787 static int initialized;
1802 #define print_fmt(k, f, ...) do { \
1803 av_bprint_clear(&pbuf); \
1804 av_bprintf(&pbuf, f, __VA_ARGS__); \
1805 writer_print_string(w, k, pbuf.str, 0); \
1808 #define print_int(k, v) writer_print_integer(w, k, v)
1809 #define print_q(k, v, s) writer_print_rational(w, k, v, s)
1810 #define print_str(k, v) writer_print_string(w, k, v, 0)
1811 #define print_str_opt(k, v) writer_print_string(w, k, v, PRINT_STRING_OPT)
1812 #define print_str_validate(k, v) writer_print_string(w, k, v, PRINT_STRING_VALIDATE)
1813 #define print_time(k, v, tb) writer_print_time(w, k, v, tb, 0)
1814 #define print_ts(k, v) writer_print_ts(w, k, v, 0)
1815 #define print_duration_time(k, v, tb) writer_print_time(w, k, v, tb, 1)
1816 #define print_duration_ts(k, v) writer_print_ts(w, k, v, 1)
1817 #define print_val(k, v, u) do { \
1818 struct unit_value uv; \
1821 writer_print_string(w, k, value_string(val_str, sizeof(val_str), uv), 0); \
1824 #define print_section_header(s) writer_print_section_header(w, s)
1825 #define print_section_footer(s) writer_print_section_footer(w, s)
1827 #define REALLOCZ_ARRAY_STREAM(ptr, cur_n, new_n) \
1829 ret = av_reallocp_array(&(ptr), (new_n), sizeof(*(ptr))); \
1832 memset( (ptr) + (cur_n), 0, ((new_n) - (cur_n)) * sizeof(*(ptr)) ); \
1863 for (i = 0; i < nb_side_data; i++) {
1868 print_str(
"side_data_type", name ? name :
"unknown");
1986 av_freep(&log_buffer[i].context_name);
1987 av_freep(&log_buffer[i].parent_name);
1988 av_freep(&log_buffer[i].log_message);
1990 log_buffer_size = 0;
2006 if (log_buffer[i].log_level <= log_level) {
2008 print_str(
"context", log_buffer[i].context_name);
2009 print_int(
"level", log_buffer[i].log_level);
2011 if (log_buffer[i].parent_name) {
2012 print_str(
"parent_context", log_buffer[i].parent_name);
2013 print_int(
"parent_category", log_buffer[i].parent_category);
2018 print_str(
"message", log_buffer[i].log_message);
2149 print_q(
"sample_aspect_ratio", sar,
':');
2194 print_str(
"side_data_type", name ? name :
"unknown");
2251 int ret = 0, got_frame = 0;
2254 if (dec_ctx && dec_ctx->
codec) {
2301 return got_frame || *packet_new;
2306 av_log(log_ctx, log_level,
"id:%d", interval->
id);
2312 av_log(log_ctx, log_level,
" start:N/A");
2318 av_log(log_ctx, log_level,
"#%"PRId64, interval->
end);
2322 av_log(log_ctx, log_level,
" end:N/A");
2325 av_log(log_ctx, log_level,
"\n");
2334 int ret = 0, i = 0, frame_count = 0;
2348 "Could not seek to relative position since current "
2349 "timestamp is not defined\n");
2353 target = *cur_ts + interval->
start;
2355 target = interval->
start;
2391 end = start + interval->
end;
2396 if (frame_count >= interval->
end)
2398 }
else if (has_end && *cur_ts !=
AV_NOPTS_VALUE && *cur_ts >= end) {
2410 while (
process_frame(w, ifile, frame, &pkt, &packet_new) > 0);
2422 while (
process_frame(w, ifile, frame, &pkt, &(
int){1}) > 0);
2492 char profile_num[12];
2502 #if FF_API_LAVF_AVCTX
2522 print_q(
"sample_aspect_ratio", sar,
':');
2527 print_q(
"display_aspect_ratio", dar,
':');
2544 print_str(
"field_order",
"progressive");
2556 #if FF_API_PRIVATE_OPT
2603 if (opt->
flags)
continue;
2622 #if FF_API_LAVF_AVCTX
2641 #define PRINT_DISPOSITION(flagname, name) do { \
2642 print_int(name, !!(stream->disposition & AV_DISPOSITION_##flagname)); \
2807 const char *errbuf_ptr = errbuf;
2823 int scan_all_pmts_set = 0;
2831 fmt_ctx->
flags |= AVFMT_FLAG_KEEP_SIDE_DATA;
2835 scan_all_pmts_set = 1;
2843 if (scan_all_pmts_set)
2856 for (i = 0; i < orig_nb_streams; i++)
2884 "Failed to probe codec for input stream %d\n",
2892 "Unsupported codec with id %d for input stream %d\n",
2898 fmt_ctx, stream, codec);
2964 #define CHECK_END if (ret < 0) goto end
3045 print_fmt(
"copyright",
"Copyright (c) %d-%d the FFmpeg developers",
3048 print_str(
"configuration", FFMPEG_CONFIGURATION);
3054 #define SHOW_LIB_VERSION(libname, LIBNAME) \
3056 if (CONFIG_##LIBNAME) { \
3057 unsigned int version = libname##_version(); \
3058 writer_print_section_header(w, SECTION_ID_LIBRARY_VERSION); \
3059 print_str("name", "lib" #libname); \
3060 print_int("major", LIB##LIBNAME##_VERSION_MAJOR); \
3061 print_int("minor", LIB##LIBNAME##_VERSION_MINOR); \
3062 print_int("micro", LIB##LIBNAME##_VERSION_MICRO); \
3063 print_int("version", version); \
3064 print_str("ident", LIB##LIBNAME##_IDENT); \
3065 writer_print_section_footer(w); \
3083 #define PRINT_PIX_FMT_FLAG(flagname, name) \
3085 print_int(name, !!(pixdesc->flags & AV_PIX_FMT_FLAG_##flagname)); \
3151 if (show_all_entries) {
3167 if (!strcmp(section_name, section->
name) ||
3170 "'%s' matches section with unique name '%s'\n", section_name,
3181 const char *p =
arg;
3189 if (!section_name) {
3191 "Missing section name for option '%s'\n", opt);
3197 while (*p && *p !=
':') {
3202 "Adding '%s' to the entries to show in section '%s'\n",
3203 entry, section_name);
3209 show_all_entries = 1;
3212 ret =
match_section(section_name, show_all_entries, entries);
3238 "Option '%s' is deprecated, use '-show_entries format=%s' instead\n",
3249 "Argument '%s' provided as input filename, but '%s' was already specified.\n",
3253 if (!strcmp(arg,
"-"))
3284 char *next, *p, *spec =
av_strdup(interval_spec);
3295 next = strchr(spec,
'%');
3337 lli = strtoll(p, &tail, 10);
3338 if (*tail || lli < 0) {
3340 "Invalid or negative value '%s' for duration number of frames\n", p);
3343 interval->
end = lli;
3365 char *p, *spec =
av_strdup(intervals_spec);
3370 for (n = 0, p = spec; *p; p++)
3376 if (!read_intervals) {
3384 for (i = 0; p; i++) {
3388 next = strchr(p,
',');
3392 read_intervals[i].
id = i;
3432 printf(
"%*c %s", level * 4,
' ', section->
name);
3443 printf(
"Sections:\n"
3444 "W.. = Section is a wrapper (contains other sections, no local entries)\n"
3445 ".A. = Section contains an array of elements of the same type\n"
3446 "..V = Section may contain a variable number of fields with variable keys\n"
3447 "FLAGS NAME/UNIQUE_NAME\n"
3460 #define DEFINE_OPT_SHOW_SECTION(section, target_section_id) \
3461 static int opt_show_##section(const char *opt, const char *arg) \
3463 mark_section_show_entries(SECTION_ID_##target_section_id, 1, NULL); \
3484 "use binary prefixes for byte units" },
3486 "use sexagesimal format HOURS:MM:SS.MICROSECONDS for time units" },
3488 "prettify the format of displayed values, make it more human readable" },
3490 "set the output printing format (available formats are: default, compact, csv, flat, ini, json, xml)",
"format" },
3493 {
"sections",
OPT_EXIT, {.func_arg =
opt_sections},
"print sections structure and section information, and exit" },
3496 {
"show_error", 0, {(
void*)&opt_show_error},
"show probing error" },
3497 {
"show_format", 0, {(
void*)&opt_show_format},
"show format/container info" },
3498 {
"show_frames", 0, {(
void*)&opt_show_frames},
"show frames info" },
3500 "show a particular entry from the format/container info",
"entry" },
3502 "show a set of specified entries",
"entry_list" },
3506 {
"show_packets", 0, {(
void*)&opt_show_packets},
"show packets info" },
3507 {
"show_programs", 0, {(
void*)&opt_show_programs},
"show programs info" },
3508 {
"show_streams", 0, {(
void*)&opt_show_streams},
"show streams info" },
3509 {
"show_chapters", 0, {(
void*)&opt_show_chapters},
"show chapters info" },
3512 {
"show_program_version", 0, {(
void*)&opt_show_program_version},
"show ffprobe version" },
3513 {
"show_library_versions", 0, {(
void*)&opt_show_library_versions},
"show library versions" },
3514 {
"show_versions", 0, {(
void*)&
opt_show_versions},
"show program and library versions" },
3515 {
"show_pixel_formats", 0, {(
void*)&opt_show_pixel_formats},
"show pixel format descriptions" },
3523 "read and decode the streams to fill missing information with heuristics" },
3539 #define SET_DO_SHOW(id, varname) do { \
3540 if (check_section_show_entries(SECTION_ID_##id)) \
3541 do_show_##varname = 1; \
3549 char *w_name =
NULL, *w_args =
NULL;
3586 SET_DO_SHOW(PIXEL_FORMAT_FLAGS, pixel_format_flags);
3587 SET_DO_SHOW(PIXEL_FORMAT_COMPONENTS, pixel_format_components);
3591 SET_DO_SHOW(STREAM_DISPOSITION, stream_disposition);
3592 SET_DO_SHOW(PROGRAM_STREAM_DISPOSITION, stream_disposition);
3604 "-bitexact and -show_program_version or -show_library_versions "
3605 "options are incompatible\n");
3621 "No name specified for the output format\n");
3632 "Unknown hash algorithm '%s'\nKnown algorithms:",
3651 if (w == &xml_writer)
unsigned int nb_chapters
Number of chapters in AVChapter array.
int32_t pitch
Rotation around the right vector [-90, 90].
void init_dynload(void)
Initialize dynamic library loading.
#define AV_STEREO3D_FLAG_INVERT
Inverted views, Right/Bottom represents the left view.
int(* init)(WriterContext *wctx)
codec_id is not known (like AV_CODEC_ID_NONE) but lavf should attempt to identify it ...
AVClassCategory parent_category
enum AVChromaLocation chroma_location
const struct section * section[SECTION_MAX_NB_LEVELS]
section per each level
const struct AVCodec * codec
const char const char void * val
static char * value_string(char *buf, int buf_size, struct unit_value uv)
static int do_show_program_tags
enum AVFieldOrder field_order
Video only.
unsigned int nb_item[SECTION_MAX_NB_LEVELS]
number of the item printed in the given section, starting from 0
enum AVColorTransferCharacteristic color_trc
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
static int show_tags(WriterContext *w, AVDictionary *tags, int section_id)
int64_t avio_size(AVIOContext *s)
Get the filesize.
int av_utf8_decode(int32_t *codep, const uint8_t **bufp, const uint8_t *buf_end, unsigned int flags)
Read and decode a single UTF-8 code point (character) from the buffer in *buf, and update *buf to poi...
void av_bprintf(AVBPrint *buf, const char *fmt,...)
int nested_section[SECTION_MAX_NB_LEVELS]
static av_always_inline int pthread_mutex_destroy(pthread_mutex_t *mutex)
This structure describes decoded (raw) audio or video data.
#define pthread_mutex_lock(a)
static void json_print_int(WriterContext *wctx, const char *key, long long int value)
static void default_print_section_header(WriterContext *wctx)
unsigned MaxCLL
Max content light level (cd/m^2).
static int writer_register(const Writer *writer)
ptrdiff_t const GLvoid * data
static int opt_input_file_i(void *optctx, const char *opt, const char *arg)
static int opt_format(void *optctx, const char *opt, const char *arg)
#define SHOW_LIB_VERSION(libname, LIBNAME)
int coded_width
Bitstream width / height, may be different from width/height e.g.
int64_t pkt_pos
reordered pos from the last AVPacket that has been input into the decoder
static void writer_print_rational(WriterContext *wctx, const char *key, AVRational q, char sep)
void(* print_string)(WriterContext *wctx, const char *, const char *)
static int opt_show_format_entry(void *optctx, const char *opt, const char *arg)
static const char unit_hertz_str[]
#define AV_LOG_WARNING
Something somehow does not look correct.
#define LIBAVUTIL_VERSION_INT
int64_t pos
byte position in stream, -1 if unknown
static const char * xml_escape_str(AVBPrint *dst, const char *src, void *log_ctx)
#define AV_DICT_DONT_OVERWRITE
Don't overwrite existing entries.
int av_parse_time(int64_t *timeval, const char *timestr, int duration)
Parse timestr and return in *time a corresponding number of microseconds.
static void json_print_section_footer(WriterContext *wctx)
static void writer_close(WriterContext **wctx)
static av_cold int init(AVCodecContext *avctx)
static int read_intervals_nb
int av_get_bits_per_pixel(const AVPixFmtDescriptor *pixdesc)
Return the number of bits per pixel used by the pixel format described by pixdesc.
static void writer_print_integer(WriterContext *wctx, const char *key, long long int val)
static int do_show_stream_tags
static char * ini_escape_str(AVBPrint *dst, const char *src)
static void print_chroma_location(WriterContext *w, enum AVChromaLocation chroma_location)
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...
This side data should be associated with a video stream and contains Stereoscopic 3D information in f...
void av_opt_set_defaults(void *s)
Set the values of all AVOption fields to their default values.
static AVFormatContext * fmt_ctx
static int show_streams(WriterContext *w, InputFile *ifile)
static char * print_format
Video represents a portion of a sphere mapped on a flat surface using equirectangular projection...
enum AVCodecID codec_id
Specific type of the encoded data (the codec used).
static const Writer json_writer
Content light level (based on CTA-861.3).
void av_codec_set_pkt_timebase(AVCodecContext *avctx, AVRational val)
int repeat_pict
When decoding, this signals how much the picture must be delayed.
int index
stream index in AVFormatContext
static const AVOption writer_options[]
static void writer_print_integers(WriterContext *wctx, const char *name, uint8_t *data, int size, const char *format, int columns, int bytes, int offset_add)
static void log_callback(void *ptr, int level, const char *fmt, va_list vl)
static int show_stream(WriterContext *w, AVFormatContext *fmt_ctx, int stream_idx, InputStream *ist, int in_program)
#define print_str_opt(k, v)
void(* print_integer)(WriterContext *wctx, const char *, long long int)
static int read_packets(WriterContext *w, InputFile *ifile)
int64_t bit_rate
Total stream bitrate in bit/s, 0 if not available.
void show_banner(int argc, char **argv, const OptionDef *options)
Print the program banner to stderr.
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).
int av_dict_copy(AVDictionary **dst, const AVDictionary *src, int flags)
Copy entries from one AVDictionary struct into another.
Mastering display metadata associated with a video frame.
static const AVClass writer_class
static int do_show_packets
static int do_show_format_tags
static int writer_open(WriterContext **wctx, const Writer *writer, const char *args, const struct section *sections, int nb_sections)
void(* uninit)(WriterContext *wctx)
static void bprint_bytes(AVBPrint *bp, const uint8_t *ubuf, size_t ubuf_size)
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
static void json_print_item_str(WriterContext *wctx, const char *key, const char *value)
static const Writer default_writer
AVPacketSideData * side_data
An array of side data that applies to the whole stream (i.e.
static void show_frame(WriterContext *w, AVFrame *frame, AVStream *stream, AVFormatContext *fmt_ctx)
static const char * json_escape_str(AVBPrint *dst, const char *src, void *log_ctx)
static void xml_print_section_footer(WriterContext *wctx)
int bits_per_raw_sample
Bits per sample/pixel of internal libavcodec pixel/sample format.
static void mark_section_show_entries(SectionID section_id, int show_all_entries, AVDictionary *entries)
int avcodec_decode_subtitle2(AVCodecContext *avctx, AVSubtitle *sub, int *got_sub_ptr, AVPacket *avpkt)
Decode a subtitle message.
static uint64_t * nb_streams_frames
int has_nested_elems[SECTION_MAX_NB_LEVELS]
static int validate_string(WriterContext *wctx, char **dstp, const char *src)
static int open_input_file(InputFile *ifile, const char *filename)
#define CMDUTILS_COMMON_OPTIONS
uint8_t log2_chroma_w
Amount to shift the luma width right to find the chroma width.
AVDictionary * filter_codec_opts(AVDictionary *opts, enum AVCodecID codec_id, AVFormatContext *s, AVStream *st, AVCodec *codec)
Filter out options for given codec.
This struct describes the properties of an encoded stream.
AVColorTransferCharacteristic
Color Transfer Characteristic.
int av_bprint_finalize(AVBPrint *buf, char **ret_str)
Finalize a print buffer.
static int do_count_frames
#define SECTION_MAX_NB_LEVELS
enum AVColorSpace color_space
static void * writer_child_next(void *obj, void *prev)
const char * av_color_space_name(enum AVColorSpace space)
static const AVOption default_options[]
static av_always_inline int process_frame(WriterContext *w, InputFile *ifile, AVFrame *frame, AVPacket *pkt, int *packet_new)
Mastering display metadata (based on SMPTE-2086:2014).
AVRational time_base
This is the fundamental unit of time (in seconds) in terms of which frame timestamps are represented...
#define AV_DICT_DONT_STRDUP_KEY
Take ownership of a key that's been allocated with av_malloc() or another memory allocation function...
const char *(* escape_str)(AVBPrint *dst, const char *src, const char sep, void *log_ctx)
#define AV_HASH_MAX_SIZE
Maximum value that av_hash_get_size() will currently return.
const AVClass * avcodec_get_class(void)
Get the AVClass for AVCodecContext.
unsigned int nb_stream_indexes
const char * element_name
name of the contained element, if provided
static void writer_print_section_header(WriterContext *wctx, int section_id)
static void compact_print_section_footer(WriterContext *wctx)
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
#define av_assert0(cond)
assert() equivalent, that is always enabled.
unsigned int nb_section_packet
number of the packet section in case we are in "packets_and_frames" section
static void ini_print_section_header(WriterContext *wctx)
#define print_duration_ts(k, v)
void register_exit(void(*cb)(int ret))
Register a program-specific cleanup routine.
AVComponentDescriptor comp[4]
Parameters that describe how pixels are packed.
void log_callback_help(void *ptr, int level, const char *fmt, va_list vl)
Trivial log callback.
AVFrame * av_frame_alloc(void)
Allocate an AVFrame and set its fields to default values.
static int do_read_packets
int opt_default(void *optctx, const char *opt, const char *arg)
Fallback for options that are not explicitly handled, these will be parsed through AVOptions...
static int opt_read_intervals(void *optctx, const char *opt, const char *arg)
int av_packet_unpack_dictionary(const uint8_t *data, int size, AVDictionary **dict)
Unpack a dictionary from side_data.
static int do_show_pixel_format_components
static int * selected_streams
static void close_input_file(InputFile *ifile)
timestamp utils, mostly useful for debugging/logging purposes
Stereo 3D type: this structure describes how two videos are packed within a single video surface...
#define va_copy(dst, src)
AVColorSpace
YUV colorspace type.
static const char * flat_escape_value_str(AVBPrint *dst, const char *src)
static void writer_print_time(WriterContext *wctx, const char *key, int64_t ts, const AVRational *time_base, int is_duration)
const char * av_color_range_name(enum AVColorRange range)
static av_cold int end(AVCodecContext *avctx)
int id
unique ID to identify the chapter
static int show_chapters(WriterContext *w, InputFile *ifile)
int64_t duration
Duration of this packet in AVStream->time_base units, 0 if unknown.
static av_cold int compact_init(WriterContext *wctx)
This side data contains a 3x3 transformation matrix describing an affine transformation that needs to...
static int find_stream_info
int id
Format-specific stream ID.
static int do_show_library_versions
static void compact_print_section_header(WriterContext *wctx)
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.
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.
int64_t pts
Presentation timestamp in time_base units (time when frame should be shown to user).
int nb_side_data
The number of elements in the AVStream.side_data array.
static int match_section(const char *section_name, int show_all_entries, AVDictionary *entries)
void init_opts(void)
Initialize the cmdutils option system, in particular allocate the *_opts contexts.
AVStream ** streams
A list of all streams in the file.
int avcodec_parameters_to_context(AVCodecContext *codec, const AVCodecParameters *par)
Fill the codec context based on the values from the supplied codec parameters.
void av_bprint_append_data(AVBPrint *buf, const char *data, unsigned size)
Append data to a print buffer.
AVFormatContext * avformat_alloc_context(void)
Allocate an AVFormatContext.
static void writer_print_data_hash(WriterContext *wctx, const char *name, uint8_t *data, int size)
Structure to hold side data for an AVFrame.
const char * av_stereo3d_type_name(unsigned int type)
Provide a human-readable name of a given stereo3d type.
static const AVOption json_options[]
static void log_read_interval(const ReadInterval *interval, void *log_ctx, int log_level)
static const char * writer_get_name(void *p)
AVDictionaryEntry * av_dict_get(const AVDictionary *m, const char *key, const AVDictionaryEntry *prev, int flags)
Get a dictionary entry with matching key.
int flags
Flags modifying the (de)muxer behaviour.
#define PRINT_DISPOSITION(flagname, name)
void parse_options(void *optctx, int argc, char **argv, const OptionDef *options, void(*parse_arg_function)(void *, const char *))
static double av_q2d(AVRational a)
Convert an AVRational to a double.
#define SECTION_MAX_NB_CHILDREN
static int show_program(WriterContext *w, InputFile *ifile, AVProgram *program)
int avformat_network_init(void)
Do global initialization of network components.
char av_get_picture_type_char(enum AVPictureType pict_type)
Return a single letter to describe the given picture type pict_type.
const AVClass * priv_class
private class of the writer, if any
#define AVERROR_EOF
End of file.
#define AV_LOG_VERBOSE
Detailed information.
AVDictionary * metadata
metadata.
static int check_section_show_entries(int section_id)
int interlaced_frame
The content of the picture is interlaced.
const AVClass * avformat_get_class(void)
Get the AVClass for AVFormatContext.
static void print_section(SectionID id, int level)
void parse_loglevel(int argc, char **argv, const OptionDef *options)
Find the '-loglevel' option in the command line args and apply it.
AVColorRange
MPEG vs JPEG YUV range.
void(* print_section_footer)(WriterContext *wctx)
int av_reduce(int *dst_num, int *dst_den, int64_t num, int64_t den, int64_t max)
Reduce a fraction.
void show_help_default(const char *opt, const char *arg)
Per-fftool specific help handler.
void show_help_options(const OptionDef *options, const char *msg, int req_flags, int rej_flags, int alt_flags)
Print help for all options matching specified flags.
static const char * c_escape_str(AVBPrint *dst, const char *src, const char sep, void *log_ctx)
Apply C-language-like string escaping.
static void writer_register_all(void)
static void xml_print_str(WriterContext *wctx, const char *key, const char *value)
int children_ids[SECTION_MAX_NB_CHILDREN+1]
list of children section IDS, terminated by -1
AVColorPrimaries
Chromaticity coordinates of the source primaries.
static void print_pkt_side_data(WriterContext *w, AVCodecParameters *par, const AVPacketSideData *side_data, int nb_side_data, SectionID id_data_list, SectionID id_data)
void * av_realloc_array(void *ptr, size_t nmemb, size_t size)
static const char * input_filename
unsigned int * stream_index
static void json_print_section_header(WriterContext *wctx)
AVFrameSideData ** side_data
uint64_t channel_layout
Audio only.
static void ffprobe_show_program_version(WriterContext *w)
static int do_show_chapter_tags
AVDictionary ** setup_find_stream_info_opts(AVFormatContext *s, AVDictionary *codec_opts)
Setup AVCodecContext options for avformat_find_stream_info().
int64_t bit_rate
The average bitrate of the encoded data (in bits per second).
#define AV_PKT_FLAG_KEY
The packet contains a keyframe.
AVDictionary * format_opts
static int do_show_frames
static void * av_x_if_null(const void *p, const void *x)
Return x default pointer in case p is NULL.
int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq)
Rescale a 64-bit integer by 2 rational numbers.
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, streams, container, programs, metadata, side data, codec and time base.
Main libavdevice API header.
static int read_interval_packets(WriterContext *w, InputFile *ifile, const ReadInterval *interval, int64_t *cur_ts)
static int do_show_chapters
char * string_validation_replacement
libswresample public header
static int opt_show_versions(const char *opt, const char *arg)
const char * av_chroma_location_name(enum AVChromaLocation location)
Content light level needed by to transmit HDR over HDMI (CTA-861.3).
static const char unit_byte_str[]
void av_hash_init(AVHashContext *ctx)
Initialize or reset a hash context.
const int program_birth_year
program birth year, defined by the program for show_banner()
int level
current level, starting from 0
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
AVDictionary * entries_to_show
static int do_show_pixel_format_flags
#define AV_DICT_MATCH_CASE
Only get an entry with exact-case key match.
AVDictionary * metadata
Metadata that applies to the whole file.
int av_get_bits_per_sample(enum AVCodecID codec_id)
Return codec bits per sample.
int flags
Additional information about the frame packing.
uint8_t log2_chroma_h
Amount to shift the luma height right to find the chroma height.
#define AV_BPRINT_SIZE_UNLIMITED
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.
static void opt_input_file(void *optctx, const char *arg)
static int opt_pretty(void *optctx, const char *opt, const char *arg)
#define SET_DO_SHOW(id, varname)
int priv_size
private size for the writer context
#define AV_PIX_FMT_FLAG_RGB
The pixel format contains RGB-like data (as opposed to YUV/grayscale).
uint8_t * av_packet_get_side_data(const AVPacket *pkt, enum AVPacketSideDataType type, int *size)
Get side information from packet.
void av_frame_free(AVFrame **frame)
Free the frame and any dynamically allocated objects in it, e.g.
#define av_ts2timestr(ts, tb)
Convenience macro, the return value should be used only directly in function arguments but never stan...
static const AVOption xml_options[]
enum AVColorPrimaries color_primaries
void av_bprint_init(AVBPrint *buf, unsigned size_init, unsigned size_max)
int video_delay
Video only.
#define SECTION_FLAG_HAS_VARIABLE_FIELDS
the section may contain a variable number of fields with variable keys.
int avcodec_receive_frame(AVCodecContext *avctx, AVFrame *frame)
Return decoded output data from a decoder.
enum AVColorRange color_range
MPEG vs JPEG YUV range.
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
void av_dict_free(AVDictionary **pm)
Free all the memory allocated for an AVDictionary struct and all keys and values. ...
#define av_fourcc2str(fourcc)
enum AVMediaType codec_type
General type of the encoded data.
int nested_section[SECTION_MAX_NB_LEVELS]
enum AVColorSpace colorspace
YUV colorspace type.
static void default_print_int(WriterContext *wctx, const char *key, long long int value)
#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...
static av_cold int json_init(WriterContext *wctx)
simple assert() macros that are a bit more flexible than ISO C assert().
const AVOption * av_opt_next(const void *obj, const AVOption *last)
Iterate over all AVOptions belonging to obj.
enum AVPacketSideDataType type
AVClassCategory category
Category used for visualization (like color) This is only set if the category is equal for all object...
static int show_log(WriterContext *w, int section_ids, int section_id, int log_level)
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.
static void flat_print_str(WriterContext *wctx, const char *key, const char *value)
int av_hash_alloc(AVHashContext **ctx, const char *name)
Allocate a hash context for the algorithm specified by name.
int id
unique id identifying a section
const char * long_name
A more descriptive name for this codec.
The GOP timecode in 25 bit timecode format.
static const uint8_t offset[127][2]
AVRational avg_frame_rate
Average framerate.
New fields can be added to the end with minor version bumps.
static void * av_mallocz_array(size_t nmemb, size_t size)
attribute_deprecated int64_t timecode_frame_start
static int parse_read_intervals(const char *intervals_spec)
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...
void av_log_default_callback(void *ptr, int level, const char *fmt, va_list vl)
Default logging callback.
int flags
A combination of AV_PKT_FLAG values.
const char * av_color_primaries_name(enum AVColorPrimaries primaries)
const AVCodecDescriptor * avcodec_descriptor_get(enum AVCodecID id)
void * priv
private data for use by the filter
int extradata_size
Size of the extradata content in bytes.
uint32_t end_display_time
char * name
name of this writer instance
int64_t pts
Same as packet pts, in AV_TIME_BASE.
uint64_t channel_layout
Channel layout of the audio data.
char * av_asprintf(const char *fmt,...)
#define SECTION_FLAG_IS_WRAPPER
the section only contains other sections, but has no data at its own level
static const struct @40 si_prefixes[]
uint64_t flags
Combination of AV_PIX_FMT_FLAG_...
unsigned int nb_streams
Number of elements in AVFormatContext.streams.
static void writer_print_data(WriterContext *wctx, const char *name, uint8_t *data, int size)
static int show_format(WriterContext *w, InputFile *ifile)
int refs
number of reference frames
static ReadInterval * read_intervals
AVInputFormat * av_find_input_format(const char *short_name)
Find AVInputFormat based on the short name of the input format.