[FFmpeg-cvslog] examples/muxing: fix memory leak.

Nicolas George git at videolan.org
Tue Mar 5 15:49:38 CET 2013


ffmpeg | branch: master | Nicolas George <nicolas.george at normalesup.org> | Tue Mar  5 15:19:47 2013 +0100| [9b211c43dc5f2e618f204c4a7fd184eb2ea51f02] | committer: Nicolas George

examples/muxing: fix memory leak.

Do not re-call avcodec_get_context_defaults3(), it is already
called by avformat_new_stream() and it leaks the codec
priv_data that was already allocated.

Use avformat_free_context() instead of freeing (not)
everything manually.

Fix trac ticket #2322.

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=9b211c43dc5f2e618f204c4a7fd184eb2ea51f02
---

 doc/examples/muxing.c |   11 ++---------
 1 file changed, 2 insertions(+), 9 deletions(-)

diff --git a/doc/examples/muxing.c b/doc/examples/muxing.c
index 8469b27..0a00884 100644
--- a/doc/examples/muxing.c
+++ b/doc/examples/muxing.c
@@ -86,7 +86,6 @@ static AVStream *add_stream(AVFormatContext *oc, AVCodec **codec,
         break;
 
     case AVMEDIA_TYPE_VIDEO:
-        avcodec_get_context_defaults3(c, *codec);
         c->codec_id = codec_id;
 
         c->bit_rate = 400000;
@@ -396,7 +395,7 @@ int main(int argc, char **argv)
     AVStream *audio_st, *video_st;
     AVCodec *audio_codec, *video_codec;
     double audio_pts, video_pts;
-    int ret, i;
+    int ret;
 
     /* Initialize libavcodec, and register all codecs and formats. */
     av_register_all();
@@ -504,18 +503,12 @@ int main(int argc, char **argv)
     if (audio_st)
         close_audio(oc, audio_st);
 
-    /* Free the streams. */
-    for (i = 0; i < oc->nb_streams; i++) {
-        av_freep(&oc->streams[i]->codec);
-        av_freep(&oc->streams[i]);
-    }
-
     if (!(fmt->flags & AVFMT_NOFILE))
         /* Close the output file. */
         avio_close(oc->pb);
 
     /* free the stream */
-    av_free(oc);
+    avformat_free_context(oc);
 
     return 0;
 }



More information about the ffmpeg-cvslog mailing list