summaryrefslogtreecommitdiffstats
path: root/ffprobe.c
diff options
context:
space:
mode:
authorStefano Sabatini <stefasab@gmail.com>2013-07-27 14:09:05 +0200
committerStefano Sabatini <stefasab@gmail.com>2013-07-28 16:38:50 +0200
commit2fcd400669bcb31a0c99d88cfde4f6db4b40fa45 (patch)
tree2f7f57d4bfefd4d8a09bdf7639a4808617a793ff /ffprobe.c
parent18df69d238fb024022e9e6231b86e21350b3f4a1 (diff)
downloadffmpeg-streaming-2fcd400669bcb31a0c99d88cfde4f6db4b40fa45.zip
ffmpeg-streaming-2fcd400669bcb31a0c99d88cfde4f6db4b40fa45.tar.gz
ffprobe: do not treat array elements as nested in the compact writer
This fixes rendering of sections containing nested elements followed by an array, for example as in the case: programs->streams->stream enabled by the -show_programs option.
Diffstat (limited to 'ffprobe.c')
-rw-r--r--ffprobe.c21
1 files changed, 17 insertions, 4 deletions
diff --git a/ffprobe.c b/ffprobe.c
index d4adde0..17c05b5 100644
--- a/ffprobe.c
+++ b/ffprobe.c
@@ -675,6 +675,8 @@ typedef struct CompactContext {
char *escape_mode_str;
const char * (*escape_str)(AVBPrint *dst, const char *src, const char sep, void *log_ctx);
int nested_section[SECTION_MAX_NB_LEVELS];
+ int has_nested_elems[SECTION_MAX_NB_LEVELS];
+ int terminate_line[SECTION_MAX_NB_LEVELS];
} CompactContext;
#undef OFFSET
@@ -722,18 +724,28 @@ static void compact_print_section_header(WriterContext *wctx)
const struct section *section = wctx->section[wctx->level];
const struct section *parent_section = wctx->level ?
wctx->section[wctx->level-1] : NULL;
+ compact->terminate_line[wctx->level] = 1;
+ compact->has_nested_elems[wctx->level] = 0;
av_bprint_clear(&wctx->section_pbuf[wctx->level]);
- if (parent_section &&
+ if (!(section->flags & SECTION_FLAG_IS_ARRAY) && parent_section &&
!(parent_section->flags & (SECTION_FLAG_IS_WRAPPER|SECTION_FLAG_IS_ARRAY))) {
compact->nested_section[wctx->level] = 1;
+ compact->has_nested_elems[wctx->level-1] = 1;
av_bprintf(&wctx->section_pbuf[wctx->level], "%s%s:",
wctx->section_pbuf[wctx->level-1].str,
(char *)av_x_if_null(section->element_name, section->name));
wctx->nb_item[wctx->level] = wctx->nb_item[wctx->level-1];
- } else if (compact->print_section &&
- !(section->flags & (SECTION_FLAG_IS_WRAPPER|SECTION_FLAG_IS_ARRAY)))
- printf("%s%c", section->name, compact->item_sep);
+ } else {
+ if (parent_section && compact->has_nested_elems[wctx->level-1] &&
+ (section->flags & SECTION_FLAG_IS_ARRAY)) {
+ compact->terminate_line[wctx->level-1] = 0;
+ printf("\n");
+ }
+ if (compact->print_section &&
+ !(section->flags & (SECTION_FLAG_IS_WRAPPER|SECTION_FLAG_IS_ARRAY)))
+ printf("%s%c", section->name, compact->item_sep);
+ }
}
static void compact_print_section_footer(WriterContext *wctx)
@@ -741,6 +753,7 @@ static void compact_print_section_footer(WriterContext *wctx)
CompactContext *compact = wctx->priv;
if (!compact->nested_section[wctx->level] &&
+ compact->terminate_line[wctx->level] &&
!(wctx->section[wctx->level]->flags & (SECTION_FLAG_IS_WRAPPER|SECTION_FLAG_IS_ARRAY)))
printf("\n");
}
OpenPOWER on IntegriCloud