[FFmpeg-devel] [PATCH 4/4] ffprobe: add flat output format.

Stefano Sabatini stefasab at gmail.com
Fri Jun 1 10:13:04 CEST 2012


On date Thursday 2012-05-31 20:56:50 +0200, Clément Bœsch encoded:
> On Thu, May 31, 2012 at 01:14:17AM +0200, Stefano Sabatini wrote:
[...]
> > > +
> > > +    if (flat->hierarchical && wctx->multiple_sections)
> > > +        printf("%s%c", flat->chapter, flat->chr_sep);
> > > +    printf("%s%c", flat->section, flat->chr_sep);
> > > +    if (wctx->multiple_sections)
> > > +        printf("%d%c", n, flat->chr_sep);
> > > +}
> > 
> > Would it make sense to use '_' like default separator character? This
> > way you have sh code output by default.
> > 
> 
> A lot of keys have a '_' (codec_time_base, display_aspect_ratio,
> bits_per_sample, …), so I'm a bit reluctant to provide an unreadable
> output by default.
> 
> > Also: you could cache the section name in the private context, like it
> > is done in the INI writer.
> > 
> 

> I admit I didn't quite understood the point of the copy in the INI writer;
> I keep a pointer to the current section and chapter names in the private
> context already, what would be the point of the copy?

Just avoiding to build the field key prefix every time you need to
print a field, admittedly this is largely a matter of subjective
preference.

[...]
> From 5deb33ad48c58409f844977be1823d9f87775805 Mon Sep 17 00:00:00 2001
> From: =?UTF-8?q?Cl=C3=A9ment=20B=C5=93sch?= <ubitux at gmail.com>
> Date: Tue, 29 May 2012 23:22:39 +0200
> Subject: [PATCH 3/3] ffprobe: add flat output format.
> 
> ---
>  doc/ffprobe.texi |   29 ++++++++++
>  ffprobe.c        |  161 +++++++++++++++++++++++++++++++++++++++++++++++++++++-
>  2 files changed, 189 insertions(+), 1 deletion(-)
> 
> diff --git a/doc/ffprobe.texi b/doc/ffprobe.texi
> index a725c37..1778dab 100644
> --- a/doc/ffprobe.texi
> +++ b/doc/ffprobe.texi
> @@ -269,6 +269,35 @@ CSV format.
>  This writer is equivalent to
>  @code{compact=item_sep=,:nokey=1:escape=csv}.
>  
> + at section flat
> +Flat format.
> +
> +A free-form output where each line contains an explicit key=value, such as
> +"streams.stream.3.tags.foo=bar". The output is shell escaped, so it can be
> +directly embedded in sh scripts as long as a valid separator is selected (see
> +option @var{sep_char}).

More specifically: as long as a the separator character is an
alphanumeric character or an underscore ...

See:
http://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap03.html#tag_03_230

[...]
> +static void flat_print_section(WriterContext *wctx)
> +{
> +    FlatContext *flat = wctx->priv;
> +    int n = wctx->is_packets_and_frames ? wctx->nb_section_packet_frame
> +                                        : wctx->nb_section;
> +
> +    if (flat->hierarchical && wctx->multiple_sections)
> +        printf("%s%c", flat->chapter, flat->sep);
> +    printf("%s%c", flat->section, flat->sep);
> +    if (wctx->multiple_sections)
> +        printf("%d%c", n, flat->sep);
> +}

Again, the prefix could be cached in an AVBprint, this code executed
in flat_print_section_header(), and save some CPU cycles, but feel
free to keep it as long as you don't want to change it.

[...]

Looks good otherwise.
-- 
FFmpeg = Formidable and Fancy Monstrous Puristic Esoteric Gigant


More information about the ffmpeg-devel mailing list