ffprobe: fix CSV writer output
authorStefano Sabatini <stefasab@gmail.com>
Wed, 19 Sep 2012 09:23:11 +0000 (11:23 +0200)
committerStefano Sabatini <stefasab@gmail.com>
Wed, 19 Sep 2012 09:50:05 +0000 (11:50 +0200)
Fix regression introduced in 749ddc14fc9ebcef09965dfd98c8bf2505dc3b58.

doc/ffprobe.texi
ffprobe.c

index 19b32ee..6809a99 100644 (file)
@@ -218,8 +218,11 @@ If set to 1 specify not to print the section header and footer.
 Default value is 0.
 @end table
 
-@section compact
-Compact format.
+@section compact, csv
+Compact and CSV format.
+
+The @code{csv} writer is equivalent to @code{compact}, but supports
+different defaults.
 
 Each section is printed on a single line.
 If no option is specifid, the output has the form:
@@ -240,14 +243,16 @@ The description of the accepted options follows.
 
 @item item_sep, s
 Specify the character to use for separating fields in the output line.
-It must be a single printable character, it is "|" by default.
+It must be a single printable character, it is "|" by default ("," for
+the @code{csv} writer).
 
 @item nokey, nk
 If set to 1 specify not to print the key of each field. Its default
-value is 0.
+value is 0 (1 for the @code{csv} writer).
 
 @item escape, e
-Set the escape mode to use, default to "c".
+Set the escape mode to use, default to "c" ("csv" for the @code{csv}
+writer).
 
 It can assume one of the following values:
 @table @option
@@ -275,12 +280,6 @@ Print the section name at the begin of each line if the value is
 
 @end table
 
-@section csv
-CSV format.
-
-This writer is equivalent to
-@code{compact=item_sep=,:nokey=1:escape=csv}.
-
 @section flat
 Flat format.
 
index 771c11d..01576c1 100644 (file)
--- a/ffprobe.c
+++ b/ffprobe.c
@@ -709,22 +709,34 @@ static const Writer compact_writer = {
 
 /* 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);
-}
+#undef OFFSET
+#define OFFSET(x) offsetof(CompactContext, x)
+
+static const AVOption csv_options[] = {
+    {"item_sep", "set item separator",    OFFSET(item_sep_str),    AV_OPT_TYPE_STRING, {.str=","},  CHAR_MIN, CHAR_MAX },
+    {"s",        "set item separator",    OFFSET(item_sep_str),    AV_OPT_TYPE_STRING, {.str=","},  CHAR_MIN, CHAR_MAX },
+    {"nokey",    "force no key printing", OFFSET(nokey),           AV_OPT_TYPE_INT,    {.i64=1},    0,        1        },
+    {"nk",       "force no key printing", OFFSET(nokey),           AV_OPT_TYPE_INT,    {.i64=1},    0,        1        },
+    {"escape",   "set escape mode",       OFFSET(escape_mode_str), AV_OPT_TYPE_STRING, {.str="csv"}, CHAR_MIN, CHAR_MAX },
+    {"e",        "set escape mode",       OFFSET(escape_mode_str), AV_OPT_TYPE_STRING, {.str="csv"}, CHAR_MIN, CHAR_MAX },
+    {"print_section", "print section name", OFFSET(print_section), AV_OPT_TYPE_INT,    {.i64=1},    0,        1        },
+    {"p",             "print section name", OFFSET(print_section), AV_OPT_TYPE_INT,    {.i64=1},    0,        1        },
+    {NULL},
+};
+
+DEFINE_WRITER_CLASS(csv);
 
 static const Writer csv_writer = {
     .name                 = "csv",
     .priv_size            = sizeof(CompactContext),
-    .init                 = csv_init,
+    .init                 = compact_init,
     .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,
-    .priv_class           = &compact_class,
+    .priv_class           = &csv_class,
 };
 
 /* Flat output */