From c2592be4f0ee8ffa77e23295b167397554f5c418 Mon Sep 17 00:00:00 2001 From: wm4 Date: Mon, 29 Sep 2014 20:37:12 +0200 Subject: vd_lavc: fix a small memory leak on init error The private context wasn't free'd when codec init failed. Restructure the code so that it can't happen. --- video/decode/vd_lavc.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) (limited to 'video/decode/vd_lavc.c') diff --git a/video/decode/vd_lavc.c b/video/decode/vd_lavc.c index b500bdb889..4de03e8af0 100644 --- a/video/decode/vd_lavc.c +++ b/video/decode/vd_lavc.c @@ -62,8 +62,6 @@ static int get_buffer2_hwdec(AVCodecContext *avctx, AVFrame *pic, int flags); static enum AVPixelFormat get_format_hwdec(struct AVCodecContext *avctx, const enum AVPixelFormat *pix_fmt); -static void uninit(struct dec_video *vd); - #define OPT_BASE_STRUCT struct vd_lavc_params struct vd_lavc_params { @@ -254,6 +252,11 @@ static struct vd_lavc_hwdec *probe_hwdec(struct dec_video *vd, bool autoprobe, return NULL; } +static void uninit(struct dec_video *vd) +{ + uninit_avctx(vd); + talloc_free(vd->priv); +} static int init(struct dec_video *vd, const char *decoder) { @@ -439,11 +442,6 @@ static void uninit_avctx(struct dec_video *vd) av_frame_free(&ctx->pic); } -static void uninit(struct dec_video *vd) -{ - uninit_avctx(vd); -} - static void update_image_params(struct dec_video *vd, AVFrame *frame, struct mp_image_params *out_params) { -- cgit v1.2.3