[FFmpeg-cvslog] lavf: add an AVStream field for exporting stream-global side data

Anton Khirnov git at videolan.org
Mon Mar 24 13:53:19 CET 2014


ffmpeg | branch: master | Anton Khirnov <anton at khirnov.net> | Wed Feb 19 12:10:32 2014 +0100| [25b32586566f285d797737863c97a1c5c9c84e2b] | committer: Anton Khirnov

lavf: add an AVStream field for exporting stream-global side data

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

 doc/APIchanges         |    4 ++++
 libavformat/avformat.h |   22 ++++++++++++++++++++++
 libavformat/utils.c    |    8 +++++++-
 libavformat/version.h  |    2 +-
 4 files changed, 34 insertions(+), 2 deletions(-)

diff --git a/doc/APIchanges b/doc/APIchanges
index cfa3068..120ba83 100644
--- a/doc/APIchanges
+++ b/doc/APIchanges
@@ -13,6 +13,10 @@ libavutil:     2013-12-xx
 
 API changes, most recent first:
 
+2014-02-xx - xxxxxxx - lavf 55.13.0 - avformat.h
+  Add AVStream.side_data and AVStream.nb_side_data for exporting stream-global
+  side data (e.g. replaygain tags, video rotation)
+
 2014-02-xx - xxxxxxx - lavc 55.35.0 - avcodec.h
   Give the name AVPacketSideData to the previously anonymous struct used for
   AVPacket.side_data.
diff --git a/libavformat/avformat.h b/libavformat/avformat.h
index ec9c262..02ee6ba 100644
--- a/libavformat/avformat.h
+++ b/libavformat/avformat.h
@@ -755,6 +755,28 @@ typedef struct AVStream {
      */
     AVPacket attached_pic;
 
+    /**
+     * An array of side data that applies to the whole stream (i.e. the
+     * container does not allow it to change between packets).
+     *
+     * There may be no overlap between the side data in this array and side data
+     * in the packets. I.e. a given side data is either exported by the muxer
+     * (demuxing) / set by the caller (muxing) in this array, then it never
+     * appears in the packets, or the side data is exported / sent through
+     * the packets (always in the first packet where the value becomes known or
+     * changes), then it does not appear in this array.
+     *
+     * - demuxing: Set by libavformat when the stream is created.
+     * - muxing: May be set by the caller before avformat_write_header().
+     *
+     * Freed by libavformat in avformat_free_context().
+     */
+    AVPacketSideData *side_data;
+    /**
+     * The number of elements in the AVStream.side_data array.
+     */
+    int            nb_side_data;
+
     /*****************************************************************
      * All fields below this line are not part of the public API. They
      * may not be used outside of libavformat and can be changed and
diff --git a/libavformat/utils.c b/libavformat/utils.c
index 3f400e3..164cdd7 100644
--- a/libavformat/utils.c
+++ b/libavformat/utils.c
@@ -2595,7 +2595,7 @@ int av_read_pause(AVFormatContext *s)
 
 void avformat_free_context(AVFormatContext *s)
 {
-    int i;
+    int i, j;
     AVStream *st;
 
     av_opt_free(s);
@@ -2605,6 +2605,12 @@ void avformat_free_context(AVFormatContext *s)
     for (i = 0; i < s->nb_streams; i++) {
         /* free all data in a stream component */
         st = s->streams[i];
+
+        for (j = 0; j < st->nb_side_data; j++)
+            av_freep(&st->side_data[j].data);
+        av_freep(&st->side_data);
+        st->nb_side_data = 0;
+
         if (st->parser) {
             av_parser_close(st->parser);
         }
diff --git a/libavformat/version.h b/libavformat/version.h
index 3d1e21f..ef5a148 100644
--- a/libavformat/version.h
+++ b/libavformat/version.h
@@ -30,7 +30,7 @@
 #include "libavutil/version.h"
 
 #define LIBAVFORMAT_VERSION_MAJOR 55
-#define LIBAVFORMAT_VERSION_MINOR 12
+#define LIBAVFORMAT_VERSION_MINOR 13
 #define LIBAVFORMAT_VERSION_MICRO  0
 
 #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \



More information about the ffmpeg-cvslog mailing list