summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libavutil/hwcontext_dxva2.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/libavutil/hwcontext_dxva2.c b/libavutil/hwcontext_dxva2.c
index 4ed0d56..6c41788 100644
--- a/libavutil/hwcontext_dxva2.c
+++ b/libavutil/hwcontext_dxva2.c
@@ -121,6 +121,13 @@ static void dxva2_frames_uninit(AVHWFramesContext *ctx)
}
}
+static void dxva2_pool_release_dummy(void *opaque, uint8_t *data)
+{
+ // important not to free anything here--data is a surface object
+ // associated with the call to CreateSurface(), and these surfaces are
+ // released in dxva2_frames_uninit()
+}
+
static AVBufferRef *dxva2_pool_alloc(void *opaque, int size)
{
AVHWFramesContext *ctx = (AVHWFramesContext*)opaque;
@@ -130,7 +137,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_release_dummy, 0, 0);
}
return NULL;
OpenPOWER on IntegriCloud