[FFmpeg-cvslog] ffprobe: implement -sections option
Stefano Sabatini
git at videolan.org
Thu Nov 22 14:22:22 CET 2012
ffmpeg | branch: master | Stefano Sabatini <stefasab at gmail.com> | Tue Nov 20 00:08:48 2012 +0100| [c8a5365dcf14e930d1fd06bf10662aae78182da4] | committer: Stefano Sabatini
ffprobe: implement -sections option
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=c8a5365dcf14e930d1fd06bf10662aae78182da4
---
Changelog | 1 +
doc/ffprobe.texi | 8 ++++++++
ffprobe.c | 30 ++++++++++++++++++++++++++++++
3 files changed, 39 insertions(+)
diff --git a/Changelog b/Changelog
index 2f03802..bca5568 100644
--- a/Changelog
+++ b/Changelog
@@ -28,6 +28,7 @@ version <next>:
- new expansion syntax for drawtext
- BRender PIX image decoder
- ffprobe -show_entries option
+- ffprobe -sections option
version 1.0:
diff --git a/doc/ffprobe.texi b/doc/ffprobe.texi
index aacb14c..08aef13 100644
--- a/doc/ffprobe.texi
+++ b/doc/ffprobe.texi
@@ -45,6 +45,10 @@ ffprobe output is designed to be easily parsable by a textual filter,
and consists of one or more sections of a form defined by the selected
writer, which is specified by the @option{print_format} option.
+Sections may contain other nested sections, and are identified by a
+name (which may be shared by other sections), and an unique
+name. See the output of @option{sections}.
+
Metadata tags stored in the container or in the streams are recognized
and printed in the corresponding "FORMAT" or "STREAM" section.
@@ -94,6 +98,10 @@ For example for printing the output in JSON format, specify:
For more details on the available output printing formats, see the
Writers section below.
+ at item -sections
+Print sections structure and section information, and exit. The output
+is not meant to be parsed by a machine.
+
@item -select_streams @var{stream_specifier}
Select only the streams specified by @var{stream_specifier}. This
option affects only the options related to streams
diff --git a/ffprobe.c b/ffprobe.c
index fc665a7..f7374b3 100644
--- a/ffprobe.c
+++ b/ffprobe.c
@@ -2105,6 +2105,35 @@ static int opt_pretty(void *optctx, const char *opt, const char *arg)
return 0;
}
+static void print_section(SectionID id, int level)
+{
+ const SectionID *pid;
+ const struct section *section = §ions[id];
+ printf("%c%c%c",
+ section->flags & SECTION_FLAG_IS_WRAPPER ? 'W' : '.',
+ section->flags & SECTION_FLAG_IS_ARRAY ? 'A' : '.',
+ section->flags & SECTION_FLAG_HAS_VARIABLE_FIELDS ? 'V' : '.');
+ printf("%*c %s", level * 4, ' ', section->name);
+ if (section->unique_name)
+ printf("/%s", section->unique_name);
+ printf("\n");
+
+ for (pid = section->children_ids; *pid != -1; pid++)
+ print_section(*pid, level+1);
+}
+
+static int opt_sections(void *optctx, const char *opt, const char *arg)
+{
+ printf("Sections:\n"
+ "W.. = Section is a wrapper (contains other sections, no local entries)\n"
+ ".A. = Section contains an array of elements of the same type\n"
+ "..V = Section may contain a variable number of fields with variable keys\n"
+ "FLAGS NAME/UNIQUE_NAME\n"
+ "---\n");
+ print_section(SECTION_ID_ROOT, 0);
+ return 0;
+}
+
static int opt_show_versions(const char *opt, const char *arg)
{
mark_section_show_entries(SECTION_ID_PROGRAM_VERSION, 1, NULL);
@@ -2142,6 +2171,7 @@ static const OptionDef real_options[] = {
"set the output printing format (available formats are: default, compact, csv, flat, ini, json, xml)", "format" },
{ "of", OPT_STRING | HAS_ARG, {(void*)&print_format}, "alias for -print_format", "format" },
{ "select_streams", OPT_STRING | HAS_ARG, {(void*)&stream_specifier}, "select the specified streams", "stream_specifier" },
+ { "sections", OPT_EXIT, {.func_arg = opt_sections}, "print sections structure and section information, and exit" },
{ "show_data", OPT_BOOL, {(void*)&do_show_data}, "show packets data" },
{ "show_error", 0, {(void*)&opt_show_error}, "show probing error" },
{ "show_format", 0, {(void*)&opt_show_format}, "show format/container info" },
More information about the ffmpeg-cvslog
mailing list