[FFmpeg-devel] [PATCH] lavf/utils: extend has_codec_parameters() to make it show what info is missing

Michael Niedermayer michaelni at gmx.at
Wed Jul 18 03:14:25 CEST 2012


On Tue, Jul 17, 2012 at 10:30:56PM +0200, Stefano Sabatini wrote:
> On date Tuesday 2012-07-17 17:00:44 +0200, Michael Niedermayer encoded:
> > On Tue, Jul 17, 2012 at 09:04:47AM +0200, Stefano Sabatini wrote:
> > > On date Monday 2012-07-16 05:04:55 +0200, Michael Niedermayer encoded:
> > > > On Mon, Jul 16, 2012 at 12:30:58AM +0200, Stefano Sabatini wrote:
> > > > > Improve feedback.
> > > > > ---
> > > > >  libavformat/utils.c |   47 ++++++++++++++++++++++++++++++-----------------
> > > > >  1 files changed, 30 insertions(+), 17 deletions(-)
> > > > > 
> > > > > diff --git a/libavformat/utils.c b/libavformat/utils.c
> > > > > index 39527a6..74b6746 100644
> > > > > --- a/libavformat/utils.c
> > > > > +++ b/libavformat/utils.c
> > > > > @@ -2265,30 +2265,40 @@ static void estimate_timings(AVFormatContext *ic, int64_t old_offset)
> > > > >      }
> > > > >  }
> > > > >  
> > > > > -static int has_codec_parameters(AVStream *st)
> > > > > +static int has_codec_parameters(AVStream *st, char *error, size_t error_size)
> > > > >  {
> > > > >      AVCodecContext *avctx = st->codec;
> > > > > -    int val;
> > > > > +
> > > > > +#define FAIL(errmsg) do {                               \
> > > > > +        if (error)                                      \
> > > > > +            av_strlcpy(error, errmsg, error_size);      \
> > > > > +        return 0;                                       \
> > > > > +    } while (0)
> > > > > +
> > > > 
> > > > passing a flag into has_codec_parameters() and printing the message
> > > > in there when its != 0 seems cleaner
> > > > not sure if theres a even cleaner way
> > > 
> > > The problem is that when the codec parameters are checked the codec is
> > > not yet set, so you'll see a message of the kind:
> > > 
> > > [flv @ 0x3303160] max_analyze_duration 5000000 reached at 5018000
> > > [NULL @ 0x33095c0] Unspecified frame size
> > > [flv @ 0x3303160] Could not find codec parameters (Video: h264, 204 kb/s)
> > > 
> > > which is not very useful.
> > 
> > AVFormatContext could be passed into has_codec_parameters()
> 
> Nitfest.
> 
> Currently:
> static int has_codec_parameters(AVStream *st)
> =>
> [flv @ 0x3303160] max_analyze_duration 5000000 reached at 5018000
> [flv @ 0x3303160] Could not find codec parameters (Video: h264, 204 kb/s)
> 
> Alternative 1:
> static int has_codec_parameters(AVStream *st, void *logctx)
> =>
> [flv @ 0x3303160] max_analyze_duration 5000000 reached at 5018000
> [flv @ 0x3303160] Unspecified frame size for stream (Video: h264, 204 kb/s)
> [flv @ 0x3303160] Could not find codec parameters for stream 0 (Video: h264, 204 kb/s)
> 
> Alternative 2:
> static int has_codec_parameters(AVStream *st, char *msg, size_t msg_size)
> =>
> [flv @ 0x3303160] max_analyze_duration 5000000 reached at 5018000
> [flv @ 0x3303160] Could not find codec parameters for stream 0 (Video: h264, 204 kb/s): unspecified frame size
> 
> With alternative 1 there is no way to show the stream index, since
> has_codec_parameters() takes in input the stream, and the index may
> not be available when the function is called (may be an issue if you
> have several streams of the same type in input).
> 
> Alternative 2 provides the most useful and complete feedback IMHO, but
> I'm fine with 1 if you dislike it very much.

what about just returning a pointer to the error message through a
const char **err_message argument ?
it would avoid the strlcpy()

either way feel free to commit what you like best.

[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Why not whip the teacher when the pupil misbehaves? -- Diogenes of Sinope
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: Digital signature
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20120718/82ff14f7/attachment.asc>


More information about the ffmpeg-devel mailing list