ffprobe: add csv writer
authorStefano Sabatini <stefasab@gmail.com>
Tue, 15 Nov 2011 23:41:55 +0000 (00:41 +0100)
committerStefano Sabatini <stefasab@gmail.com>
Wed, 16 Nov 2011 17:40:03 +0000 (18:40 +0100)
Changelog
doc/ffprobe.texi
ffprobe.c

index f635e88..a3d713e 100644 (file)
--- a/Changelog
+++ b/Changelog
@@ -121,7 +121,7 @@ easier to use. The changes are:
 - Discworld II BMV decoding support
 - VBLE Decoder
 - OS X Video Decoder Acceleration (VDA) support
-- compact output in ffprobe
+- compact and csv output in ffprobe
 
 
 version 0.8:
index 172e35d..89b270d 100644 (file)
@@ -199,6 +199,12 @@ Perform no escaping.
 
 @end table
 
+@section csv
+CSV format.
+
+This writer is equivalent to
+@code{compact=item_sep=,:nokey=1:escape=csv}.
+
 @section json
 JSON based format.
 
index c15cf7b..8c44528 100644 (file)
--- a/ffprobe.c
+++ b/ffprobe.c
@@ -688,6 +688,26 @@ static Writer compact_writer = {
     .flags = WRITER_FLAG_DISPLAY_OPTIONAL_FIELDS
 };
 
+/* CSV output */
+
+static av_cold int csv_init(WriterContext *wctx, const char *args, void *opaque)
+{
+    return compact_init(wctx, "item_sep=,:nokey=1:escape=csv", opaque);
+}
+
+static Writer csv_writer = {
+    .name                 = "csv",
+    .priv_size            = sizeof(CompactContext),
+    .init                 = csv_init,
+    .uninit               = compact_uninit,
+    .print_section_header = compact_print_section_header,
+    .print_section_footer = compact_print_section_footer,
+    .print_integer        = compact_print_int,
+    .print_string         = compact_print_str,
+    .show_tags            = compact_show_tags,
+    .flags = WRITER_FLAG_DISPLAY_OPTIONAL_FIELDS,
+};
+
 /* JSON output */
 
 typedef struct {
@@ -857,6 +877,7 @@ static void writer_register_all(void)
 
     writer_register(&default_writer);
     writer_register(&compact_writer);
+    writer_register(&csv_writer);
     writer_register(&json_writer);
 }
 
@@ -1203,7 +1224,8 @@ static const OptionDef options[] = {
       "use sexagesimal format HOURS:MM:SS.MICROSECONDS for time units" },
     { "pretty", 0, {(void*)&opt_pretty},
       "prettify the format of displayed values, make it more human readable" },
-    { "print_format", OPT_STRING | HAS_ARG, {(void*)&print_format}, "set the output printing format (available formats are: default, compact, json)", "format" },
+    { "print_format", OPT_STRING | HAS_ARG, {(void*)&print_format},
+      "set the output printing format (available formats are: default, compact, csv, json)", "format" },
     { "show_format",  OPT_BOOL, {(void*)&do_show_format} , "show format/container info" },
     { "show_packets", OPT_BOOL, {(void*)&do_show_packets}, "show packets info" },
     { "show_streams", OPT_BOOL, {(void*)&do_show_streams}, "show streams info" },