[FFmpeg-cvslog] r22174 - in trunk: doc/APIchanges libavformat/nut.c libavformat/nut.h libavformat/nutdec.c libavformat/nutenc.c libavutil/avutil.h libavutil/tree.c libavutil/tree.h

vitor subversion
Wed Mar 3 18:31:24 CET 2010


Author: vitor
Date: Wed Mar  3 18:31:24 2010
New Revision: 22174

Log:
Plug memory leak in NUT muxer and demuxer

Modified:
   trunk/doc/APIchanges
   trunk/libavformat/nut.c
   trunk/libavformat/nut.h
   trunk/libavformat/nutdec.c
   trunk/libavformat/nutenc.c
   trunk/libavutil/avutil.h
   trunk/libavutil/tree.c
   trunk/libavutil/tree.h

Modified: trunk/doc/APIchanges
==============================================================================
--- trunk/doc/APIchanges	Wed Mar  3 18:26:00 2010	(r22173)
+++ trunk/doc/APIchanges	Wed Mar  3 18:31:24 2010	(r22174)
@@ -12,6 +12,9 @@ libavutil:   2009-03-08
 
 API changes, most recent first:
 
+2010-03-03 - r22174 - lavu 50.10.0 - av_tree_enumerate()
+  Add av_tree_enumerate().
+
 2010-02-07 - r21673 - lavu 50.9.0 - av_compare_ts()
   Add av_compare_ts().
 

Modified: trunk/libavformat/nut.c
==============================================================================
--- trunk/libavformat/nut.c	Wed Mar  3 18:26:00 2010	(r22173)
+++ trunk/libavformat/nut.c	Wed Mar  3 18:31:24 2010	(r22174)
@@ -69,6 +69,17 @@ void ff_nut_add_sp(NUTContext *nut, int6
     }
 }
 
+static void enu_free(void *opaque, void *elem)
+{
+    av_free(elem);
+}
+
+void ff_nut_free_sp(NUTContext *nut)
+{
+    av_tree_enumerate(nut->syncpoints, NULL, NULL, enu_free);
+    av_tree_destroy(nut->syncpoints);
+}
+
 const Dispositions ff_nut_dispositions[] = {
     {"default"     , AV_DISPOSITION_DEFAULT},
     {"dub"         , AV_DISPOSITION_DUB},

Modified: trunk/libavformat/nut.h
==============================================================================
--- trunk/libavformat/nut.h	Wed Mar  3 18:26:00 2010	(r22173)
+++ trunk/libavformat/nut.h	Wed Mar  3 18:31:24 2010	(r22174)
@@ -110,6 +110,7 @@ int64_t ff_lsb2full(StreamContext *strea
 int ff_nut_sp_pos_cmp(Syncpoint *a, Syncpoint *b);
 int ff_nut_sp_pts_cmp(Syncpoint *a, Syncpoint *b);
 void ff_nut_add_sp(NUTContext *nut, int64_t pos, int64_t back_ptr, int64_t ts);
+void ff_nut_free_sp(NUTContext *nut);
 
 extern const Dispositions ff_nut_dispositions[];
 

Modified: trunk/libavformat/nutdec.c
==============================================================================
--- trunk/libavformat/nutdec.c	Wed Mar  3 18:26:00 2010	(r22173)
+++ trunk/libavformat/nutdec.c	Wed Mar  3 18:31:24 2010	(r22174)
@@ -901,6 +901,7 @@ static int nut_read_close(AVFormatContex
 
     av_freep(&nut->time_base);
     av_freep(&nut->stream);
+    ff_nut_free_sp(nut);
     for(i = 1; i < nut->header_count; i++)
         av_freep(&nut->header[i]);
 

Modified: trunk/libavformat/nutenc.c
==============================================================================
--- trunk/libavformat/nutenc.c	Wed Mar  3 18:26:00 2010	(r22173)
+++ trunk/libavformat/nutenc.c	Wed Mar  3 18:31:24 2010	(r22174)
@@ -797,6 +797,7 @@ static int write_trailer(AVFormatContext
     while(nut->header_count<3)
         write_headers(nut, bc);
     put_flush_packet(bc);
+    ff_nut_free_sp(nut);
     av_freep(&nut->stream);
     av_freep(&nut->time_base);
 

Modified: trunk/libavutil/avutil.h
==============================================================================
--- trunk/libavutil/avutil.h	Wed Mar  3 18:26:00 2010	(r22173)
+++ trunk/libavutil/avutil.h	Wed Mar  3 18:31:24 2010	(r22174)
@@ -40,7 +40,7 @@
 #define AV_VERSION(a, b, c) AV_VERSION_DOT(a, b, c)
 
 #define LIBAVUTIL_VERSION_MAJOR 50
-#define LIBAVUTIL_VERSION_MINOR  9
+#define LIBAVUTIL_VERSION_MINOR 10
 #define LIBAVUTIL_VERSION_MICRO  0
 
 #define LIBAVUTIL_VERSION_INT   AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \

Modified: trunk/libavutil/tree.c
==============================================================================
--- trunk/libavutil/tree.c	Wed Mar  3 18:26:00 2010	(r22173)
+++ trunk/libavutil/tree.c	Wed Mar  3 18:31:24 2010	(r22174)
@@ -135,7 +135,6 @@ void av_tree_destroy(AVTreeNode *t){
     }
 }
 
-#if 0
 void av_tree_enumerate(AVTreeNode *t, void *opaque, int (*cmp)(void *opaque, void *elem), int (*enu)(void *opaque, void *elem)){
     if(t){
         int v= cmp ? cmp(opaque, t->elem) : 0;
@@ -144,7 +143,6 @@ void av_tree_enumerate(AVTreeNode *t, vo
         if(v<=0) av_tree_enumerate(t->child[1], opaque, cmp, enu);
     }
 }
-#endif
 
 #ifdef TEST
 

Modified: trunk/libavutil/tree.h
==============================================================================
--- trunk/libavutil/tree.h	Wed Mar  3 18:26:00 2010	(r22173)
+++ trunk/libavutil/tree.h	Wed Mar  3 18:31:24 2010	(r22174)
@@ -79,4 +79,17 @@ void *av_tree_find(const struct AVTreeNo
 void *av_tree_insert(struct AVTreeNode **rootp, void *key, int (*cmp)(void *key, const void *b), struct AVTreeNode **next);
 void av_tree_destroy(struct AVTreeNode *t);
 
+/**
+ * Applies enu(opaque, &elem) to all the elements in the tree in a given range.
+ *
+ * @param cmp a comparison function that returns < 0 for a element below the
+ *            range, > 0 for a element above the range and == 0 for a
+ *            element inside the range
+ *
+ * @note The cmp function should use the same ordering used to construct the
+ *       tree.
+ */
+void av_tree_enumerate(struct AVTreeNode *t, void *opaque, int (*cmp)(void *opaque, void *elem), int (*enu)(void *opaque, void *elem));
+
+
 #endif /* AVUTIL_TREE_H */



More information about the ffmpeg-cvslog mailing list