Module: libav
Branch: master
Commit: eec93e57096aa4804862d62760442380c70d489b

Author:    Martin Storsjö <mar...@martin.st>
Committer: Martin Storsjö <mar...@martin.st>
Date:      Fri Jan 25 10:28:46 2019 +0200

libopenh264dec: Use a newer decoding entry point function

The "new" entry point actually has existed since OpenH264 1.4 in
2015 and is the the recommended decoding entry point.

The name of this function, DecodeFrameNoDelay, is rather backwards
considering that it doesn't return the latest decoded frame immediately,
but actually does proper delaying and reordering of frames.

Signed-off-by: Martin Storsjö <mar...@martin.st>

---

 libavcodec/libopenh264dec.c | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/libavcodec/libopenh264dec.c b/libavcodec/libopenh264dec.c
index 60e4b02..6adf984 100644
--- a/libavcodec/libopenh264dec.c
+++ b/libavcodec/libopenh264dec.c
@@ -109,10 +109,18 @@ static int svc_decode_frame(AVCodecContext *avctx, void 
*data,
 #endif
     } else {
         info.uiInBsTimeStamp = avpkt->pts;
+#if OPENH264_VER_AT_LEAST(1, 4)
+        // Contrary to the name, DecodeFrameNoDelay actually does buffering
+        // and reordering of frames, and is the recommended decoding entry
+        // point since 1.4. This is essential for successfully decoding
+        // B-frames.
+        state = (*s->decoder)->DecodeFrameNoDelay(s->decoder, avpkt->data, 
avpkt->size, ptrs, &info);
+#else
         state = (*s->decoder)->DecodeFrame2(s->decoder, avpkt->data, 
avpkt->size, ptrs, &info);
+#endif
     }
     if (state != dsErrorFree) {
-        av_log(avctx, AV_LOG_ERROR, "DecodeFrame2 failed\n");
+        av_log(avctx, AV_LOG_ERROR, "DecodeFrame failed\n");
         return AVERROR_UNKNOWN;
     }
     if (info.iBufferStatus != 1) {

_______________________________________________
libav-commits mailing list
libav-commits@libav.org
https://lists.libav.org/mailman/listinfo/libav-commits

Reply via email to