[libav-devel] [PATCH V2] lavc/qsv: skip the packet if decoding failure.

Luca Barbato lu_zero at gentoo.org
Thu Jan 25 08:59:07 CET 2018


On 25/01/2018 02:21, Song, Ruiling wrote:
> 
> 
>> -----Original Message----- From: libav-devel
>> [mailto:libav-devel-bounces at libav.org] On Behalf Of Luca Barbato 
>> Sent: Wednesday, January 24, 2018 6:36 PM To:
>> libav-devel at libav.org Subject: Re: [libav-devel] [PATCH V2]
>> lavc/qsv: skip the packet if decoding failure.
>> 
>> On 24/01/2018 03:14, Ruiling Song wrote:
>>> From: "Ruiling, Song" <ruiling.song at intel.com>
>>> 
>>> MediaSDK may fail to decode some frame, just skip it. Otherwise,
>>> it will keep decoding the failure packet repeatedly without
>>> processing any packet afterwards.
>>> 
>>> Signed-off-by: Ruiling Song <ruiling.song at intel.com> --- 
>>> libavcodec/qsvdec_h2645.c | 6 +++++- 1 file changed, 5
>>> insertions(+), 1 deletion(-)
>>> 
>>> diff --git a/libavcodec/qsvdec_h2645.c
>>> b/libavcodec/qsvdec_h2645.c index 83880dc..78a7b61 100644 ---
>>> a/libavcodec/qsvdec_h2645.c +++ b/libavcodec/qsvdec_h2645.c @@
>>> -153,8 +153,12 @@ static int qsv_decode_frame(AVCodecContext
>>> *avctx,
>> void *data,
>>> }
>>> 
>>> ret = ff_qsv_process_data(avctx, &s->qsv, frame, got_frame, &s- 
>>> buffer_pkt); -        if (ret < 0) +        if (ret < 0){ +
>>> /* Drop buffer_pkt when failed to decode the packet. Otherwise, +
>>> the decoder will keep decoding the failure packet. */ +
>>> av_packet_unref(&s->buffer_pkt); return ret; +        }
>>> 
>>> s->buffer_pkt.size -= ret; s->buffer_pkt.data += ret;
>>> 
>> 
>> Looks better, do you have a specific test sample?
> Sorry I don't have the original clip to hit the issue. But I tried to
> decode fate-suite/h264/attachment631-small.mp4 (The video stream has
> some broken frames) QSV keeps trying to decode one broken frame. With
> this patch, qsv could move on to process all the frames. Even with
> this patch, MediaSDK still fails to decode out any frame in that
> stream, which I think the issue comes from MediaSDK itself.

Ok, I'd merge this if nobody is against then.

lu



More information about the libav-devel mailing list