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

Maxym Dmytrychenko maxim.d33 at gmail.com
Mon Jan 22 11:43:20 CET 2018


would be av_packet_unref() more appropriate ?

On Mon, Jan 22, 2018 at 9:53 AM, Ruiling, Song <ruiling.song at intel.com>
wrote:

> 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 | 8 ++++++--
>  1 file changed, 6 insertions(+), 2 deletions(-)
>
> diff --git a/libavcodec/qsvdec_h2645.c b/libavcodec/qsvdec_h2645.c
> index 83880dc..aa8746d 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)
> -            return ret;
> +        if (ret < 0){
> +             /* force the buffer_pkt's size to 0 when failed to decode
> the packet,
> +                otherwise, the decoder will keep decoding the failure
> packet. */
> +             s->buffer_pkt.size = 0;
> +             return ret;
> +        }
>
>          s->buffer_pkt.size -= ret;
>          s->buffer_pkt.data += ret;
> --
> 2.7.4
>
> _______________________________________________
> libav-devel mailing list
> libav-devel at libav.org
> https://lists.libav.org/mailman/listinfo/libav-devel


More information about the libav-devel mailing list