[FFmpeg-devel] [PATCH 1/3] avcodec/h264, videotoolbox: pass SPS changes into the VT decoder

Aman Gupta ffmpeg at tmm1.net
Thu Feb 16 20:29:36 EET 2017


From: Aman Gupta <aman at tmm1.net>

This fixes playback of h264 streams with SPS changes. One such sample
is available at http://tmm1.s3.amazonaws.com/videotoolbox/spschange.ts.
It switches mid-stream from level 4.0 to level 3.2.

Previously, playing this sample with the VT hwaccel on iOS would crash.
After this patch, it plays back as expected.

On macOS however, feeding in new SPS into an existing decompression
session does not always work, so this patch is only a partial fix.
---
 libavcodec/h264dec.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/libavcodec/h264dec.c b/libavcodec/h264dec.c
index 41c0964..e521c52 100644
--- a/libavcodec/h264dec.c
+++ b/libavcodec/h264dec.c
@@ -740,6 +740,13 @@ FF_ENABLE_DEPRECATION_WARNINGS
             break;
         case H264_NAL_SPS: {
             GetBitContext tmp_gb = nal->gb;
+            if (avctx->hwaccel && avctx->hwaccel->pix_fmt == AV_PIX_FMT_VIDEOTOOLBOX) {
+                ret = avctx->hwaccel->decode_slice(avctx,
+                                                   nal->data,
+                                                   nal->size);
+                if (ret < 0)
+                    goto end;
+            }
             if (ff_h264_decode_seq_parameter_set(&tmp_gb, avctx, &h->ps, 0) >= 0)
                 break;
             av_log(h->avctx, AV_LOG_DEBUG,
-- 
2.10.1 (Apple Git-78)



More information about the ffmpeg-devel mailing list