[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