Skip to content
Snippets Groups Projects
Commit f48f03a4 authored by Stefano Sabatini's avatar Stefano Sabatini
Browse files

ffprobe: add "noprint_wrappers" option to default writer

The option is useful for simplifying parsing.

Also use the new option in fate, in order to fix the regression
introduced by the previous commit.
parent 6cd06bd2
No related branches found
No related tags found
No related merge requests found
...@@ -195,6 +195,19 @@ keyN=valN ...@@ -195,6 +195,19 @@ keyN=valN
Metadata tags are printed as a line in the corresponding FORMAT or Metadata tags are printed as a line in the corresponding FORMAT or
STREAM section, and are prefixed by the string "TAG:". STREAM section, and are prefixed by the string "TAG:".
This writer accepts options as a list of @var{key}=@var{value} pairs,
separated by ":".
A description of the accepted options follows.
@table @option
@item noprint_wrappers, nw
If set to 1 specify not to print the section header and footer.
Default value is 0.
@end table
@section compact @section compact
Compact format. Compact format.
......
...@@ -401,14 +401,60 @@ fail: ...@@ -401,14 +401,60 @@ fail:
/* Default output */ /* Default output */
typedef struct DefaultContext {
const AVClass *class;
int noprint_wrappers;
} DefaultContext;
#define OFFSET(x) offsetof(DefaultContext, x)
static const AVOption default_options[] = {
{ "noprint_wrappers", "do not print headers and footers", OFFSET(noprint_wrappers), AV_OPT_TYPE_INT, {.dbl=0}, 0, 1 },
{ "nw", "do not print headers and footers", OFFSET(noprint_wrappers), AV_OPT_TYPE_INT, {.dbl=0}, 0, 1 },
{NULL},
};
static const char *default_get_name(void *ctx)
{
return "default";
}
static const AVClass default_class = {
"DefaultContext",
default_get_name,
default_options
};
static av_cold int default_init(WriterContext *wctx, const char *args, void *opaque)
{
DefaultContext *def = wctx->priv;
int err;
def->class = &default_class;
av_opt_set_defaults(def);
if (args &&
(err = (av_set_options_string(def, args, "=", ":"))) < 0) {
av_log(wctx, AV_LOG_ERROR, "Error parsing options string: '%s'\n", args);
return err;
}
return 0;
}
static void default_print_footer(WriterContext *wctx) static void default_print_footer(WriterContext *wctx)
{ {
printf("\n"); DefaultContext *def = wctx->priv;
if (!def->noprint_wrappers)
printf("\n");
} }
static void default_print_chapter_header(WriterContext *wctx, const char *chapter) static void default_print_chapter_header(WriterContext *wctx, const char *chapter)
{ {
if (wctx->nb_chapter) DefaultContext *def = wctx->priv;
if (!def->noprint_wrappers && wctx->nb_chapter)
printf("\n"); printf("\n");
} }
...@@ -424,18 +470,22 @@ static inline char *upcase_string(char *dst, size_t dst_size, const char *src) ...@@ -424,18 +470,22 @@ static inline char *upcase_string(char *dst, size_t dst_size, const char *src)
static void default_print_section_header(WriterContext *wctx, const char *section) static void default_print_section_header(WriterContext *wctx, const char *section)
{ {
DefaultContext *def = wctx->priv;
char buf[32]; char buf[32];
if (wctx->nb_section) if (wctx->nb_section)
printf("\n"); printf("\n");
printf("[%s]\n", upcase_string(buf, sizeof(buf), section)); if (!def->noprint_wrappers)
printf("[%s]\n", upcase_string(buf, sizeof(buf), section));
} }
static void default_print_section_footer(WriterContext *wctx, const char *section) static void default_print_section_footer(WriterContext *wctx, const char *section)
{ {
DefaultContext *def = wctx->priv;
char buf[32]; char buf[32];
printf("[/%s]", upcase_string(buf, sizeof(buf), section)); if (!def->noprint_wrappers)
printf("[/%s]", upcase_string(buf, sizeof(buf), section));
} }
static void default_print_str(WriterContext *wctx, const char *key, const char *value) static void default_print_str(WriterContext *wctx, const char *key, const char *value)
...@@ -460,6 +510,7 @@ static void default_show_tags(WriterContext *wctx, AVDictionary *dict) ...@@ -460,6 +510,7 @@ static void default_show_tags(WriterContext *wctx, AVDictionary *dict)
static const Writer default_writer = { static const Writer default_writer = {
.name = "default", .name = "default",
.init = default_init,
.print_footer = default_print_footer, .print_footer = default_print_footer,
.print_chapter_header = default_print_chapter_header, .print_chapter_header = default_print_chapter_header,
.print_section_header = default_print_section_header, .print_section_header = default_print_section_header,
...@@ -534,6 +585,7 @@ typedef struct CompactContext { ...@@ -534,6 +585,7 @@ typedef struct CompactContext {
const char * (*escape_str)(AVBPrint *dst, const char *src, const char sep, void *log_ctx); const char * (*escape_str)(AVBPrint *dst, const char *src, const char sep, void *log_ctx);
} CompactContext; } CompactContext;
#undef OFFSET
#define OFFSET(x) offsetof(CompactContext, x) #define OFFSET(x) offsetof(CompactContext, x)
static const AVOption compact_options[]= { static const AVOption compact_options[]= {
......
...@@ -72,7 +72,7 @@ run(){ ...@@ -72,7 +72,7 @@ run(){
} }
probefmt(){ probefmt(){
run ffprobe -show_format_entry format_name -v 0 "$@" run ffprobe -show_format_entry format_name -print_format default=nw=1 -v 0 "$@"
} }
avconv(){ avconv(){
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment