Module: libav
Branch: master
Commit: 559370f2c45110afd8308eec7194437736c323d4

Author:    Ruiling, Song <[email protected]>
Committer: Luca Barbato <[email protected]>
Date:      Wed Jan 24 10:14:51 2018 +0800

qsv: Skip the packet if decoding failure

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 <[email protected]>
Signed-off-by: Luca Barbato <[email protected]>

---

 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;

_______________________________________________
libav-commits mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-commits

Reply via email to