[FFmpeg-devel] [PATCH 3/3] ffprobe: add JSON output printing format.

Clément Bœsch ubitux at gmail.com
Sun Sep 11 23:31:59 CEST 2011


On Tue, Sep 06, 2011 at 03:52:00PM +0200, Stefano Sabatini wrote:
> On date Saturday 2011-09-03 20:12:56 +0200, Clément Bœsch encoded:
> > ---
> >  doc/ffprobe.texi |    4 ++
> >  ffprobe.c        |  120 ++++++++++++++++++++++++++++++++++++++++++++++++++++--
> >  2 files changed, 120 insertions(+), 4 deletions(-)
> > 
> > diff --git a/doc/ffprobe.texi b/doc/ffprobe.texi
> > index 6f7e83b..b66c619 100644
> > --- a/doc/ffprobe.texi
> > +++ b/doc/ffprobe.texi
> > @@ -87,6 +87,10 @@ Use sexagesimal format HH:MM:SS.MICROSECONDS for time values.
> >  Prettify the format of the displayed values, it corresponds to the
> >  options "-unit -prefix -byte_binary_prefix -sexagesimal".
> >  
> > + at item -print_format
> 
> @item -print_format @var{format}
> 

Oups, fixed locally.

[...]
> > +    for (i = 0; s[i]; i++) {
> > +        if (strchr(json_escape, s[i]))     len += 2;
> 
> > +        else if ((unsigned char)s[i] < 32) len += 6;
> 
> maybe you can pass an unsigned char string, and avoid the obufscating
> casts, a note on the line of // handle non-printable chars
> may help.
> 

I'd say it is a simple string while an unsigned char * might give the
feeling it is a bytes stream. But I don't really care so changed to
unsigned char locally.

Comment added too.

> 
> > +        else                               len += 1;
> > +    }
> 
> maybe add a comment header: // compute the length of the escaped string
> 
> > +
> > +    p = ret = av_malloc(len + 1);
> > +    if (!p)
> > +        return NULL;
> > +    for (i = 0; s[i]; i++) {
> > +        char *q = strchr(json_escape, s[i]);
> > +        if (q) {
> > +            *p++ = '\\';
> > +            *p++ = json_subst[q - json_escape];
> > +        } else if ((unsigned char)s[i] < 32) {
> 
> > +            snprintf(p, 7, "\\u00%02x", s[i] & 0xff);
> 
> why & 0xff?
> 

Because the printf format tend to print more than expected since s[i] is a
signed char.

  char c = 150;
  printf("%02x", c);        // ffffff96
  printf("%02x", c & 0xff); // 96

It also hilight the fact it's exactly 1B.

[...]
> >      if (w->footer)
> >          printf("%s", w->footer);
> > @@ -500,6 +611,7 @@ static const OptionDef options[] = {
> >        "use sexagesimal format HOURS:MM:SS.MICROSECONDS for time units" },
> >      { "pretty", 0, {(void*)&opt_pretty},
> >        "prettify the format of displayed values, make it more human readable" },
> 
> > +    { "print_format", OPT_STRING | HAS_ARG, {(void*)&print_format}, "Set the output printing format. Available formats: default, json" },
> 
> Nit: for consistency just "set the output printing format (available formats are: default, json)
> 

Fixed locally.

[...]
> Looks fine otherwise.

I'll push when we'll find an agreement for the previous patch.

-- 
Clément B.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 490 bytes
Desc: not available
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20110911/2f5fe0d8/attachment.asc>


More information about the ffmpeg-devel mailing list