summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefano Sabatini <stefasab@gmail.com>2012-05-09 01:20:21 +0200
committerStefano Sabatini <stefasab@gmail.com>2012-05-14 12:59:51 +0200
commitf48f03a400ac97a18db59387250d5631a6b329a7 (patch)
tree4915fe876995e5490bada92d6ba49b022daa3adc
parent6cd06bd22c9ba2bcbe165d5e6e09334b7386dc2f (diff)
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.
-rw-r--r--doc/ffprobe.texi13
-rw-r--r--ffprobe.c60
-rwxr-xr-xtests/fate-run.sh2
3 files changed, 70 insertions, 5 deletions
diff --git a/doc/ffprobe.texi b/doc/ffprobe.texi
index 47c215634d..a1af680590 100644
--- a/doc/ffprobe.texi
+++ b/doc/ffprobe.texi
@@ -195,6 +195,19 @@ keyN=valN
Metadata tags are printed as a line in the corresponding FORMAT or
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
Compact format.
diff --git a/ffprobe.c b/ffprobe.c
index fb37d08cdc..5a8c9e8b65 100644
--- a/ffprobe.c
+++ b/ffprobe.c
@@ -401,14 +401,60 @@ fail:
/* 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)
{
- printf("\n");
+ DefaultContext *def = wctx->priv;
+
+ if (!def->noprint_wrappers)
+ printf("\n");
}
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");
}
@@ -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)
{
+ DefaultContext *def = wctx->priv;
char buf[32];
if (wctx->nb_section)
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)
{
+ DefaultContext *def = wctx->priv;
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)
@@ -460,6 +510,7 @@ static void default_show_tags(WriterContext *wctx, AVDictionary *dict)
static const Writer default_writer = {
.name = "default",
+ .init = default_init,
.print_footer = default_print_footer,
.print_chapter_header = default_print_chapter_header,
.print_section_header = default_print_section_header,
@@ -534,6 +585,7 @@ typedef struct CompactContext {
const char * (*escape_str)(AVBPrint *dst, const char *src, const char sep, void *log_ctx);
} CompactContext;
+#undef OFFSET
#define OFFSET(x) offsetof(CompactContext, x)
static const AVOption compact_options[]= {
diff --git a/tests/fate-run.sh b/tests/fate-run.sh
index b3f1b68a93..c205169899 100755
--- a/tests/fate-run.sh
+++ b/tests/fate-run.sh
@@ -72,7 +72,7 @@ run(){
}
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(){