[FFmpeg-cvslog] lavf,lavc: free avoptions in a generic way.
Anton Khirnov
git at videolan.org
Mon Jun 6 03:51:49 CEST 2011
ffmpeg | branch: master | Anton Khirnov <anton at khirnov.net> | Sun Jun 5 13:18:17 2011 +0200| [367732832faaf1bac4ece37cf7fef8c911e16312] | committer: Anton Khirnov
lavf,lavc: free avoptions in a generic way.
It's simpler and less error-prone.
Fixes some memleaks along the way.
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=367732832faaf1bac4ece37cf7fef8c911e16312
---
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 65792a6..2b417de 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 6e19a61..4d3933f 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 7e9ffe5..afd6b94 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 b17d0fb..622579b 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 98ff82e..839d290 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 5dd873b..95dd4c3 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 b1ca6e6..c6dc673 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 a92200d..cc05c35 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 9dada16..970274e 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 1050959..bdc20f6 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;i<s->nb_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;
}
More information about the ffmpeg-cvslog
mailing list