[FFmpeg-devel] [PATCH v2] ffprobe: Add a few common disposition cases

Clément Bœsch ubitux at gmail.com
Wed Sep 19 00:26:47 CEST 2012


On Tue, Sep 18, 2012 at 11:24:31PM +0200, Stefano Sabatini wrote:
> On date Tuesday 2012-09-18 16:12:01 -0400, Derek Buitenhuis encoded:
> > This info is crucial in knowing which stream to pick in an
> > automated setup.
> > 
> > Signed-off-by: Derek Buitenhuis <derek.buitenhuis at gmail.com>
> > ---
> > Since these must be printed unconditionally, I've kept attached_pic
> > under the video case.
> > ---
> >  doc/ffprobe.xsd |    3 +++
> >  ffprobe.c       |    6 ++++++
> >  2 files changed, 9 insertions(+)
> > 
> > diff --git a/doc/ffprobe.xsd b/doc/ffprobe.xsd
> > index c9213de..b4887ae 100644
> > --- a/doc/ffprobe.xsd
> > +++ b/doc/ffprobe.xsd
> > @@ -100,6 +100,8 @@
> >        <xsd:attribute name="codec_tag"        type="xsd:string" use="required"/>
> >        <xsd:attribute name="codec_tag_string" type="xsd:string" use="required"/>
> >        <xsd:attribute name="extradata"        type="xsd:string" />
> > +      <xsd:attribute name="default"          type="xsd:int" use="required"/>
> > +      <xsd:attribute name="forced"           type="xsd:int" use="required"/>
> >  
> >        <!-- video attributes -->
> >        <xsd:attribute name="width"                type="xsd:int"/>
> > @@ -110,6 +112,7 @@
> >        <xsd:attribute name="pix_fmt"              type="xsd:string"/>
> >        <xsd:attribute name="level"                type="xsd:int"/>
> >        <xsd:attribute name="timecode"             type="xsd:string"/>
> > +      <xsd:attribute name="attached_pic"         type="xsd:int"/>
> >  
> >        <!-- audio attributes -->
> >        <xsd:attribute name="sample_fmt"       type="xsd:string"/>
> > diff --git a/ffprobe.c b/ffprobe.c
> > index a0aee83..771c11d 100644
> > --- a/ffprobe.c
> > +++ b/ffprobe.c
> > @@ -1665,6 +1665,10 @@ static void show_stream(WriterContext *w, AVFormatContext *fmt_ctx, int stream_i
> >          print_str("codec_tag_string",    val_str);
> >          print_fmt("codec_tag", "0x%04x", dec_ctx->codec_tag);
> >  
> > +        /* Print useful disposition */
> > +        print_int("default", !!(stream->disposition & AV_DISPOSITION_DEFAULT));
> > +        print_int("forced", !!(stream->disposition & AV_DISPOSITION_FORCED));
> > +
> >          switch (dec_ctx->codec_type) {
> >          case AVMEDIA_TYPE_VIDEO:
> >              print_int("width",        dec_ctx->width);
> > @@ -1693,6 +1697,8 @@ static void show_stream(WriterContext *w, AVFormatContext *fmt_ctx, int stream_i
> >              } else {
> >                  print_str_opt("timecode", "N/A");
> >              }
> > +            print_int("attached_pic",
> > +                      !!(stream->disposition & AV_DISPOSITION_ATTACHED_PIC));
> >              break;
> 
> After looking at the code, I see that disposition can have many
> possibly useful values:
> 
> #define AV_DISPOSITION_DEFAULT   0x0001
> #define AV_DISPOSITION_DUB       0x0002
> #define AV_DISPOSITION_ORIGINAL  0x0004
> #define AV_DISPOSITION_COMMENT   0x0008
> #define AV_DISPOSITION_LYRICS    0x0010
> #define AV_DISPOSITION_KARAOKE   0x0020
> #define AV_DISPOSITION_FORCED    0x0040
> #define AV_DISPOSITION_HEARING_IMPAIRED  0x0080  /**< stream for hearing impaired audiences */
> #define AV_DISPOSITION_VISUAL_IMPAIRED   0x0100  /**< stream for visual impaired audiences */
> #define AV_DISPOSITION_CLEAN_EFFECTS     0x0200  /**< stream without voice */
> #define AV_DISPOSITION_ATTACHED_PIC      0x0400
> 
> Having a single field for each separate value is going to be pretty
> verbose and would require manual updates, so I wonder what's the best
> way to show flags in this case and in general (may be useful to show
> codec properties for example).
> 
> It could be rendered as a string, something like:
> disposition=default+attached_pic+forced
> 
> On the other hand we don't have a clean way to convert numerical
> flags to a string (we could add options support to AVStream, and add a
> flags->string serializer, but that would require some effort and
> possibly an ABI break), and that would require more parsing on the
> scripting side (as you need to split the flags in the various
> components).
> 
> An intermediary solution could consist in a manual flags->int
> conversion, then we may add options support to AVStream and a generic
> av_opt_get_flags_string(), and rely on that when we will bump major.
> 
> What do people think?

I guess the sustainable solution will be to use your previous section work
and introduce a disposition section for the flag at some point if it's
worth the effort. But I'm not even sure from a user point of view it's
that interesting.

I believed the current patch was good enough and didn't think a more
complex solution was worth blocking it. The field default field is indeed
quite useful.

-- 
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/20120919/776e919f/attachment.asc>


More information about the ffmpeg-devel mailing list