[FFmpeg-cvslog] r24185 - in trunk: doc/APIchanges ffplay.c libavcodec/avcodec.h libavcodec/utils.c

reimar subversion
Sun Jul 11 09:35:00 CEST 2010


Author: reimar
Date: Sun Jul 11 09:35:00 2010
New Revision: 24185

Log:
Add avsubtitle_free function.

Modified:
   trunk/doc/APIchanges
   trunk/ffplay.c
   trunk/libavcodec/avcodec.h
   trunk/libavcodec/utils.c

Modified: trunk/doc/APIchanges
==============================================================================
--- trunk/doc/APIchanges	Sun Jul 11 08:59:21 2010	(r24184)
+++ trunk/doc/APIchanges	Sun Jul 11 09:35:00 2010	(r24185)
@@ -12,6 +12,10 @@ libavutil:   2009-03-08
 
 API changes, most recent first:
 
+2010-07-11 - r24185 - lavc 52.82.0 - avsubtitle_free()
+  Add a function for free the contents of a AVSubtitle generated by
+  avcodec_decode_subtitle.
+
 2010-07-08 - r24101 - lavu 50.21.0 - pixdesc.h
   Rename read/write_line() to av_read/write_image_line().
 

Modified: trunk/ffplay.c
==============================================================================
--- trunk/ffplay.c	Sun Jul 11 08:59:21 2010	(r24184)
+++ trunk/ffplay.c	Sun Jul 11 09:35:00 2010	(r24185)
@@ -677,18 +677,7 @@ static void blend_subrect(AVPicture *dst
 
 static void free_subpicture(SubPicture *sp)
 {
-    int i;
-
-    for (i = 0; i < sp->sub.num_rects; i++)
-    {
-        av_freep(&sp->sub.rects[i]->pict.data[0]);
-        av_freep(&sp->sub.rects[i]->pict.data[1]);
-        av_freep(&sp->sub.rects[i]);
-    }
-
-    av_free(sp->sub.rects);
-
-    memset(&sp->sub, 0, sizeof(AVSubtitle));
+    avsubtitle_free(&sp->sub);
 }
 
 static void video_image_display(VideoState *is)

Modified: trunk/libavcodec/avcodec.h
==============================================================================
--- trunk/libavcodec/avcodec.h	Sun Jul 11 08:59:21 2010	(r24184)
+++ trunk/libavcodec/avcodec.h	Sun Jul 11 09:35:00 2010	(r24185)
@@ -30,7 +30,7 @@
 #include "libavutil/avutil.h"
 
 #define LIBAVCODEC_VERSION_MAJOR 52
-#define LIBAVCODEC_VERSION_MINOR 81
+#define LIBAVCODEC_VERSION_MINOR 82
 #define LIBAVCODEC_VERSION_MICRO  0
 
 #define LIBAVCODEC_VERSION_INT  AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
@@ -3548,13 +3548,22 @@ attribute_deprecated int avcodec_decode_
  * due to a potentially very different allocation pattern.
  *
  * @param avctx the codec context
- * @param[out] sub The AVSubtitle in which the decoded subtitle will be stored.
+ * @param[out] sub The AVSubtitle in which the decoded subtitle will be stored, must be
+                   freed with avsubtitle_free if *got_sub_ptr is set.
  * @param[in,out] got_sub_ptr Zero if no subtitle could be decompressed, otherwise, it is nonzero.
  * @param[in] avpkt The input AVPacket containing the input buffer.
  */
 int avcodec_decode_subtitle2(AVCodecContext *avctx, AVSubtitle *sub,
                             int *got_sub_ptr,
                             AVPacket *avpkt);
+
+/**
+ * Frees all allocated data in the given subtitle struct.
+ *
+ * @param sub AVSubtitle to free.
+ */
+void avsubtitle_free(AVSubtitle *sub);
+
 int avcodec_parse_frame(AVCodecContext *avctx, uint8_t **pdata,
                         int *data_size_ptr,
                         uint8_t *buf, int buf_size);

Modified: trunk/libavcodec/utils.c
==============================================================================
--- trunk/libavcodec/utils.c	Sun Jul 11 08:59:21 2010	(r24184)
+++ trunk/libavcodec/utils.c	Sun Jul 11 09:35:00 2010	(r24185)
@@ -689,6 +689,26 @@ int avcodec_decode_subtitle2(AVCodecCont
     return ret;
 }
 
+void avsubtitle_free(AVSubtitle *sub)
+{
+    int i;
+
+    for (i = 0; i < sub->num_rects; i++)
+    {
+        av_freep(sub->rects[i]->pict.data[0]);
+        av_freep(sub->rects[i]->pict.data[1]);
+        av_freep(sub->rects[i]->pict.data[2]);
+        av_freep(sub->rects[i]->pict.data[3]);
+        av_freep(sub->rects[i]->text);
+        av_freep(sub->rects[i]->ass);
+        av_freep(sub->rects[i]);
+    }
+
+    av_freep(sub->rects);
+
+    memset(sub, 0, sizeof(AVSubtitle));
+}
+
 av_cold int avcodec_close(AVCodecContext *avctx)
 {
     /* If there is a user-supplied mutex locking routine, call it. */



More information about the ffmpeg-cvslog mailing list