diff options
author | Anton Khirnov <anton@khirnov.net> | 2014-02-19 12:10:32 +0100 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2014-03-24 06:07:51 +0100 |
commit | 25b32586566f285d797737863c97a1c5c9c84e2b (patch) | |
tree | 75da9bdaea35c7d4cd050414949cb23bbf133a16 /libavformat | |
parent | 0e2c3ee9a335d8a0a5edf0509e222e804d7b2619 (diff) | |
download | ffmpeg-25b32586566f285d797737863c97a1c5c9c84e2b.tar.gz |
lavf: add an AVStream field for exporting stream-global side data
Diffstat (limited to 'libavformat')
-rw-r--r-- | libavformat/avformat.h | 22 | ||||
-rw-r--r-- | libavformat/utils.c | 8 | ||||
-rw-r--r-- | libavformat/version.h | 2 |
3 files changed, 30 insertions, 2 deletions
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, \ |