avcodec/videotoolbox: fix SEGV when hwaccel decoding h264 with ffmpeg.c
authorAman Gupta <aman@tmm1.net>
Tue, 28 Nov 2017 16:49:21 +0000 (08:49 -0800)
committerAman Gupta <aman@tmm1.net>
Tue, 28 Nov 2017 16:50:13 +0000 (08:50 -0800)
Signed-off-by: Aman Gupta <aman@tmm1.net>
libavcodec/videotoolbox.c

index c275e01..afec1ed 100644 (file)
@@ -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) {