OSDN Git Service

lavf,lavc: free avoptions in a generic way.
authorAnton Khirnov <anton@khirnov.net>
Sun, 5 Jun 2011 11:18:17 +0000 (13:18 +0200)
committerAnton Khirnov <anton@khirnov.net>
Sun, 5 Jun 2011 13:01:36 +0000 (15:01 +0200)
It's simpler and less error-prone.

Fixes some memleaks along the way.

libavcodec/utils.c
libavdevice/bktr.c
libavdevice/fbdev.c
libavdevice/libdc1394.c
libavdevice/v4l2.c
libavdevice/vfwcap.c
libavdevice/x11grab.c
libavformat/rawdec.c
libavformat/tty.c
libavformat/utils.c

index 65792a6..2b417de 100644 (file)
@@ -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);
index 6e19a61..4d3933f 100644 (file)
@@ -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;
 }
 
index 7e9ffe5..afd6b94 100644 (file)
@@ -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;
index b17d0fb..622579b 100644 (file)
@@ -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;
 }
 
index 98ff82e..839d290 100644 (file)
@@ -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;
 }
 
index 5dd873b..95dd4c3 100644 (file)
@@ -234,9 +234,6 @@ static int vfw_read_close(AVFormatContext *s)
         pktl = next;
     }
 
-    av_freep(&ctx->video_size);
-    av_freep(&ctx->framerate);
-
     return 0;
 }
 
index b1ca6e6..c6dc673 100644 (file)
@@ -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;
 }
 
index a92200d..cc05c35 100644 (file)
@@ -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;
 }
 
index 9dada16..970274e 100644 (file)
@@ -121,7 +121,6 @@ static int read_header(AVFormatContext *avctx,
     }
 
 fail:
-    av_freep(&s->video_size);
     return ret;
 }
 
index 1050959..bdc20f6 100644 (file)
@@ -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;
 }