diff --git a/doc/ffprobe.texi b/doc/ffprobe.texi index 19b32ee1b1..6809a99ef7 100644 --- a/doc/ffprobe.texi +++ b/doc/ffprobe.texi @@ -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. diff --git a/ffprobe.c b/ffprobe.c index 771c11d43c..01576c1476 100644 --- 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 */