Merge commit '25b32586566f285d797737863c97a1c5c9c84e2b'
authorMichael Niedermayer <michaelni@gmx.at>
Mon, 24 Mar 2014 12:41:49 +0000 (13:41 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Mon, 24 Mar 2014 12:41:49 +0000 (13:41 +0100)
* commit '25b32586566f285d797737863c97a1c5c9c84e2b':
  lavf: add an AVStream field for exporting stream-global side data

Conflicts:
libavformat/utils.c
libavformat/version.h

Merged-by: Michael Niedermayer <michaelni@gmx.at>
doc/APIchanges
libavformat/avformat.h
libavformat/utils.c
libavformat/version.h

index 7183dae..9b4e0f3 100644 (file)
@@ -15,6 +15,10 @@ libavutil:     2012-10-22
 
 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.
index 9130ee5..f953d3d 100644 (file)
@@ -824,6 +824,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
index 8067567..a10c397 100644 (file)
@@ -3509,9 +3509,15 @@ int av_read_pause(AVFormatContext *s)
 }
 
 void ff_free_stream(AVFormatContext *s, AVStream *st) {
+    int j;
     av_assert0(s->nb_streams>0);
     av_assert0(s->streams[ s->nb_streams - 1 ] == st);
 
+    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);
     }
index e0d3fc8..962f5a8 100644 (file)
@@ -30,8 +30,8 @@
 #include "libavutil/version.h"
 
 #define LIBAVFORMAT_VERSION_MAJOR 55
-#define LIBAVFORMAT_VERSION_MINOR 34
-#define LIBAVFORMAT_VERSION_MICRO 101
+#define LIBAVFORMAT_VERSION_MINOR 35
+#define LIBAVFORMAT_VERSION_MICRO 100
 
 #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
                                                LIBAVFORMAT_VERSION_MINOR, \