summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/APIchanges4
-rw-r--r--libavformat/avformat.h22
-rw-r--r--libavformat/utils.c8
-rw-r--r--libavformat/version.h2
4 files changed, 34 insertions, 2 deletions
diff --git a/doc/APIchanges b/doc/APIchanges
index cfa3068c6d..120ba8339d 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 ec9c2627cb..02ee6ba178 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 3f400e33a7..164cdd7a6a 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 3d1e21f17b..ef5a148deb 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, \