From 367732832faaf1bac4ece37cf7fef8c911e16312 Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Sun, 5 Jun 2011 13:18:17 +0200 Subject: [PATCH] lavf,lavc: free avoptions in a generic way. It's simpler and less error-prone. Fixes some memleaks along the way. --- libavcodec/utils.c | 3 +++ libavdevice/bktr.c | 2 -- libavdevice/fbdev.c | 1 - libavdevice/libdc1394.c | 3 --- libavdevice/v4l2.c | 4 ---- libavdevice/vfwcap.c | 3 --- libavdevice/x11grab.c | 2 -- libavformat/rawdec.c | 4 ---- libavformat/tty.c | 1 - libavformat/utils.c | 7 ++++++- 10 files changed, 9 insertions(+), 21 deletions(-) diff --git a/libavcodec/utils.c b/libavcodec/utils.c index 65792a6f5a..2b417defbf 100644 --- a/libavcodec/utils.c +++ b/libavcodec/utils.c @@ -783,6 +783,9 @@ av_cold int avcodec_close(AVCodecContext *avctx) avctx->codec->close(avctx); avcodec_default_free_buffers(avctx); avctx->coded_frame = NULL; + if (avctx->codec->priv_class) + av_opt_free(avctx->priv_data); + av_opt_free(avctx); av_freep(&avctx->priv_data); if(avctx->codec && avctx->codec->encode) av_freep(&avctx->extradata); diff --git a/libavdevice/bktr.c b/libavdevice/bktr.c index 6e19a61103..4d3933f4e9 100644 --- a/libavdevice/bktr.c +++ b/libavdevice/bktr.c @@ -320,8 +320,6 @@ static int grab_read_header(AVFormatContext *s1, AVFormatParameters *ap) last_frame_time = 0; out: - av_freep(&s->video_size); - av_freep(&s->framerate); return ret; } diff --git a/libavdevice/fbdev.c b/libavdevice/fbdev.c index 7e9ffe5c77..afd6b94ed0 100644 --- a/libavdevice/fbdev.c +++ b/libavdevice/fbdev.c @@ -103,7 +103,6 @@ av_cold static int fbdev_read_header(AVFormatContext *avctx, int ret, flags = O_RDONLY; ret = av_parse_video_rate(&fbdev->fps, fbdev->framerate); - av_freep(&fbdev->framerate); if (ret < 0) { av_log(avctx, AV_LOG_ERROR, "Couldn't parse framerate.\n"); return ret; diff --git a/libavdevice/libdc1394.c b/libavdevice/libdc1394.c index b17d0fb441..622579bc92 100644 --- a/libavdevice/libdc1394.c +++ b/libavdevice/libdc1394.c @@ -195,9 +195,6 @@ static inline int dc1394_read_common(AVFormatContext *c, AVFormatParameters *ap, *select_fps = fps; *select_fmt = fmt; out: - av_freep(&dc1394->video_size); - av_freep(&dc1394->pixel_format); - av_freep(&dc1394->framerate); return ret; } diff --git a/libavdevice/v4l2.c b/libavdevice/v4l2.c index 98ff82ec0d..839d290b63 100644 --- a/libavdevice/v4l2.c +++ b/libavdevice/v4l2.c @@ -684,10 +684,6 @@ static int v4l2_read_header(AVFormatContext *s1, AVFormatParameters *ap) st->codec->bit_rate = s->frame_size * 1/av_q2d(st->codec->time_base) * 8; out: - av_freep(&s->video_size); - av_freep(&s->pixel_format); - av_freep(&s->standard); - av_freep(&s->framerate); return res; } diff --git a/libavdevice/vfwcap.c b/libavdevice/vfwcap.c index 5dd873bdcb..95dd4c34b8 100644 --- a/libavdevice/vfwcap.c +++ b/libavdevice/vfwcap.c @@ -234,9 +234,6 @@ static int vfw_read_close(AVFormatContext *s) pktl = next; } - av_freep(&ctx->video_size); - av_freep(&ctx->framerate); - return 0; } diff --git a/libavdevice/x11grab.c b/libavdevice/x11grab.c index b1ca6e699a..c6dc673520 100644 --- a/libavdevice/x11grab.c +++ b/libavdevice/x11grab.c @@ -258,8 +258,6 @@ x11grab_read_header(AVFormatContext *s1, AVFormatParameters *ap) st->codec->bit_rate = x11grab->frame_size * 1/av_q2d(x11grab->time_base) * 8; out: - av_freep(&x11grab->video_size); - av_freep(&x11grab->framerate); return ret; } diff --git a/libavformat/rawdec.c b/libavformat/rawdec.c index a92200d844..cc05c353e9 100644 --- a/libavformat/rawdec.c +++ b/libavformat/rawdec.c @@ -102,9 +102,6 @@ int ff_raw_read_header(AVFormatContext *s, AVFormatParameters *ap) st->codec->height = height; st->codec->pix_fmt = pix_fmt; fail: - av_freep(&s1->video_size); - av_freep(&s1->pixel_format); - av_freep(&s1->framerate); return ret; } default: @@ -182,7 +179,6 @@ int ff_raw_video_read_header(AVFormatContext *s, av_set_pts_info(st, 64, 1, 1200000); fail: - av_freep(&s1->framerate); return ret; } diff --git a/libavformat/tty.c b/libavformat/tty.c index 9dada16b8a..970274eb54 100644 --- a/libavformat/tty.c +++ b/libavformat/tty.c @@ -121,7 +121,6 @@ static int read_header(AVFormatContext *avctx, } fail: - av_freep(&s->video_size); return ret; } diff --git a/libavformat/utils.c b/libavformat/utils.c index 1050959dcb..bdc20f6d9b 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -2549,6 +2549,10 @@ void avformat_free_context(AVFormatContext *s) int i; AVStream *st; + av_opt_free(s); + if (s->iformat && s->iformat->priv_class) + av_opt_free(s->priv_data); + for(i=0;inb_streams;i++) { /* free all data in a stream component */ st = s->streams[i]; @@ -2578,7 +2582,6 @@ void avformat_free_context(AVFormatContext *s) } av_freep(&s->chapters); av_metadata_free(&s->metadata); - av_freep(&s->key); av_freep(&s->streams); av_free(s); } @@ -3094,6 +3097,8 @@ fail: av_freep(&s->streams[i]->priv_data); av_freep(&s->streams[i]->index_entries); } + if (s->iformat && s->iformat->priv_class) + av_opt_free(s->priv_data); av_freep(&s->priv_data); return ret; }