[FFmpeg-devel] ffprobe: Do not decode zero-sized packets in ffprobe -show_frame
Michael Niedermayer
michaelni at gmx.at
Wed Feb 15 17:35:57 CET 2012
On Wed, Feb 15, 2012 at 12:10:49AM +0100, Stefano Sabatini wrote:
> On date Tuesday 2012-02-14 17:26:13 +0100, Petter Ericson encoded:
> > Greetings
> >
> > Ticket #997 details a segfault in ffprobe that was exposed by the file
> > http://titan.codemill.se/~peteri/120210144737.ts
> >
> > This patch fixes the segfault. However, the desyncing issue that I
> > mentioned in the ticket still remains (I was sloppy when looking at the
> > output - It is still present in git master). If anyone could advice on what
> > it is that is causing transcoding to result in desynced output, I would be
> > most grateful.
> >
> > The patched ffmpeg passes make fate.
> >
> > Best regards
> >
> > Petter Ericson
> >
>
> > commit e40952af2f5b6eccf24b34926bf09747117affdc
> > Author: Petter Ericson <petter.ericson at codemill.se>
> > Date: Tue Feb 14 16:59:56 2012 +0100
> >
> > ffprobe: Do not avcodec_decode_video2 video packets with size == 0
> >
> > diff --git a/ffprobe.c b/ffprobe.c
> > index 79f7494..e23ef98 100644
> > --- a/ffprobe.c
> > +++ b/ffprobe.c
> > @@ -1349,6 +1349,8 @@ static av_always_inline int get_decoded_frame(AVFormatContext *fmt_ctx,
> > *got_frame = 0;
> > switch (dec_ctx->codec_type) {
> > case AVMEDIA_TYPE_VIDEO:
> > + if(pkt->size == 0)
> > + return ret;
> > ret = avcodec_decode_video2(dec_ctx, frame, got_frame, pkt);
> > break;
>
> Should be fine, alternatively I propose the attached patch which I
> like more.
> --
> FFmpeg = Fundamental Frenzy Meaningful Pacific Extravagant Gadget
> utils.c | 3 +++
> 1 file changed, 3 insertions(+)
> 22035da337e788216178af03b134d1ef38cd98b6 0001-lavc-make-avcodec_decode_video2-immediately-return-0.patch
> From 173f70d8fca9698067e95f5fc31d487fae77d168 Mon Sep 17 00:00:00 2001
> From: Stefano Sabatini <stefasab at gmail.com>
> Date: Wed, 15 Feb 2012 00:06:59 +0100
> Subject: [PATCH] lavc: make avcodec_decode_video2() immediately return 0 for
> pkt with size == 0
>
> Avoid check in application code, simplify handling generic code.
>
> In particular, fix crash in ffprobe.c when decoding a packet with size 0,
> trac ticket #997.
>
> Reported by: Petter Ericson
> ---
> libavcodec/utils.c | 3 +++
> 1 files changed, 3 insertions(+), 0 deletions(-)
>
> diff --git a/libavcodec/utils.c b/libavcodec/utils.c
> index 5487cbd..5dc5bf2 100644
> --- a/libavcodec/utils.c
> +++ b/libavcodec/utils.c
> @@ -1328,6 +1328,9 @@ int attribute_align_arg avcodec_decode_video2(AVCodecContext *avctx, AVFrame *pi
> AVPacket tmp = *avpkt;
>
> *got_picture_ptr= 0;
> +
> + if (avpkt->size == 0)
> + return 0;
This will break flushing the last frames out at the end, as that uses
size=0
[...]
--
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
Good people do not need laws to tell them to act responsibly, while bad
people will find a way around the laws. -- Plato
-------------- 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/20120215/68c7f32c/attachment.asc>
More information about the ffmpeg-devel
mailing list