[FFmpeg-devel] [PATCH] DXVA2: Fix crash releasing IDirect3D9Surface's with av_buffer_default_free instead of Release

Min yosoymin at gmail.com
Fri Sep 30 08:48:08 EEST 2016


diff --git a/libavutil/hwcontext_dxva2.c b/libavutil/hwcontext_dxva2.c
index e79254b..17d8eb5 100644
--- a/libavutil/hwcontext_dxva2.c
+++ b/libavutil/hwcontext_dxva2.c
@@ -101,6 +101,11 @@ static void dxva2_frames_uninit(AVHWFramesContext *ctx)
     }
 }

+void dxva2_pool_free(void *opaque, uint8_t *data)
+{
+    // No need to free surfaces here, they will be Released later
+}
+
 static AVBufferRef *dxva2_pool_alloc(void *opaque, int size)
 {
     AVHWFramesContext      *ctx = (AVHWFramesContext*)opaque;
@@ -110,7 +115,7 @@ static AVBufferRef *dxva2_pool_alloc(void *opaque, int
size)
     if (s->nb_surfaces_used < hwctx->nb_surfaces) {
         s->nb_surfaces_used++;
         return
av_buffer_create((uint8_t*)s->surfaces_internal[s->nb_surfaces_used - 1],
-                                sizeof(*hwctx->surfaces), NULL, 0, 0);
+                                sizeof(*hwctx->surfaces), dxva2_pool_free,
0, 0);
     }

     return NULL;


More information about the ffmpeg-devel mailing list