[FFmpeg-cvslog] avcodec/videotoolbox: fix SEGV when hwaccel decoding h264 with ffmpeg.c

Aman Gupta git at videolan.org
Tue Nov 28 18:51:15 EET 2017


ffmpeg | branch: master | Aman Gupta <aman at tmm1.net> | Tue Nov 28 08:49:21 2017 -0800| [b5d56d8ef1ef17487d827f1e35d02501f55218de] | committer: Aman Gupta

avcodec/videotoolbox: fix SEGV when hwaccel decoding h264 with ffmpeg.c

Signed-off-by: Aman Gupta <aman at tmm1.net>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=b5d56d8ef1ef17487d827f1e35d02501f55218de
---

 libavcodec/videotoolbox.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/libavcodec/videotoolbox.c b/libavcodec/videotoolbox.c
index c275e0111e..afec1edf3f 100644
--- a/libavcodec/videotoolbox.c
+++ b/libavcodec/videotoolbox.c
@@ -119,7 +119,8 @@ CFDataRef ff_videotoolbox_avcc_extradata_create(AVCodecContext *avctx)
 
     // save sps header (profile/level) used to create decoder session,
     // so we can detect changes and recreate it.
-    memcpy(vtctx->sps, h->ps.sps->data + 1, 3);
+    if (vtctx)
+        memcpy(vtctx->sps, h->ps.sps->data + 1, 3);
 
     data = CFDataCreate(kCFAllocatorDefault, vt_extradata, vt_extradata_size);
     av_free(vt_extradata);
@@ -323,6 +324,11 @@ static int videotoolbox_h264_decode_params(AVCodecContext *avctx,
                                            uint32_t size)
 {
     VTContext *vtctx = avctx->internal->hwaccel_priv_data;
+    H264Context *h = avctx->priv_data;
+
+    // save sps header (profile/level) used to create decoder session
+    if (!vtctx->sps[0])
+        memcpy(vtctx->sps, h->ps.sps->data + 1, 3);
 
     if (type == H264_NAL_SPS) {
         if (size > 4 && memcmp(vtctx->sps, buffer + 1, 3) != 0) {



More information about the ffmpeg-cvslog mailing list