summaryrefslogtreecommitdiff
path: root/libavcodec/vaapi_decode.c
diff options
context:
space:
mode:
authorLinjie Fu <linjie.fu@intel.com>2018-09-19 10:01:23 +0800
committerMark Thompson <sw@jkqxz.net>2018-09-23 17:46:37 +0100
commit0f9b298242ca2e1e2e4414967921463566f1dded (patch)
treebbac1008f8bd20a1d607137725f2796a4d76ca60 /libavcodec/vaapi_decode.c
parentd5451a9b07f79dd84c8376519712866581fbf029 (diff)
avcodec/vaapi: free slice_buffers when decoding failed
If vaEndPicture() failed in ff_vaapi_decode_issue(), free the pic->slice_buffers. Fixes the memory leak issue in ticket #7385 Signed-off-by: Linjie Fu <linjie.fu@intel.com> Signed-off-by: Mark Thompson <sw@jkqxz.net>
Diffstat (limited to 'libavcodec/vaapi_decode.c')
-rw-r--r--libavcodec/vaapi_decode.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/libavcodec/vaapi_decode.c b/libavcodec/vaapi_decode.c
index ece75c0815..69512e1d45 100644
--- a/libavcodec/vaapi_decode.c
+++ b/libavcodec/vaapi_decode.c
@@ -200,12 +200,8 @@ int ff_vaapi_decode_issue(AVCodecContext *avctx,
AV_VAAPI_DRIVER_QUIRK_RENDER_PARAM_BUFFERS)
ff_vaapi_decode_destroy_buffers(avctx, pic);
- pic->nb_param_buffers = 0;
- pic->nb_slices = 0;
- pic->slices_allocated = 0;
- av_freep(&pic->slice_buffers);
-
- return 0;
+ err = 0;
+ goto exit;
fail_with_picture:
vas = vaEndPicture(ctx->hwctx->display, ctx->va_context);
@@ -216,6 +212,12 @@ fail_with_picture:
fail:
ff_vaapi_decode_destroy_buffers(avctx, pic);
fail_at_end:
+exit:
+ pic->nb_param_buffers = 0;
+ pic->nb_slices = 0;
+ pic->slices_allocated = 0;
+ av_freep(&pic->slice_buffers);
+
return err;
}