ffmpeg | branch: master | Anton Khirnov <an...@khirnov.net> | Sun Oct 4 12:08:20 2015 +0200| [31c51f7441de07b88cfea2550245bf1f5140cb8f] | committer: Anton Khirnov
avpacket: add a function for wrapping existing data as side data > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=31c51f7441de07b88cfea2550245bf1f5140cb8f --- doc/APIchanges | 3 +++ libavcodec/avcodec.h | 16 ++++++++++++++++ libavcodec/avpacket.c | 38 ++++++++++++++++++++++++++++---------- libavcodec/version.h | 2 +- 4 files changed, 48 insertions(+), 11 deletions(-) diff --git a/doc/APIchanges b/doc/APIchanges index ecbe8b5..0979930 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -13,6 +13,9 @@ libavutil: 2015-08-28 API changes, most recent first: +2015-xx-xx - xxxxxxx - lavc 57.11.0 - avcodec.h + Add av_packet_add_side_data(). + 2015-xx-xx - xxxxxxx - lavc 57.9.1 - avcodec.h Deprecate rtp_callback without replacement, i.e. it won't be possible to get image slices before the full frame is encoded any more. The libavformat diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index e888952..5ed13de 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -3557,6 +3557,22 @@ uint8_t* av_packet_new_side_data(AVPacket *pkt, enum AVPacketSideDataType type, int size); /** + * Wrap an existing array as a packet side data. + * + * @param pkt packet + * @param type side information type + * @param data the side data array. It must be allocated with the av_malloc() + * family of functions. The ownership of the data is transferred to + * pkt. + * @param size side information size + * @return a non-negative number on success, a negative AVERROR code on + * failure. On failure, the packet is unchanged and the data remains + * owned by the caller. + */ +int av_packet_add_side_data(AVPacket *pkt, enum AVPacketSideDataType type, + uint8_t *data, size_t size); + +/** * Shrink the already allocated side data buffer * * @param pkt packet diff --git a/libavcodec/avpacket.c b/libavcodec/avpacket.c index a6eb241..f8268b9 100644 --- a/libavcodec/avpacket.c +++ b/libavcodec/avpacket.c @@ -237,29 +237,47 @@ void av_free_packet(AVPacket *pkt) FF_ENABLE_DEPRECATION_WARNINGS #endif -uint8_t *av_packet_new_side_data(AVPacket *pkt, enum AVPacketSideDataType type, - int size) +int av_packet_add_side_data(AVPacket *pkt, enum AVPacketSideDataType type, + uint8_t *data, size_t size) { int elems = pkt->side_data_elems; if ((unsigned)elems + 1 > INT_MAX / sizeof(*pkt->side_data)) - return NULL; - if ((unsigned)size > INT_MAX - AV_INPUT_BUFFER_PADDING_SIZE) - return NULL; + return AVERROR(EOVERFLOW); pkt->side_data = av_realloc(pkt->side_data, (elems + 1) * sizeof(*pkt->side_data)); if (!pkt->side_data) - return NULL; + return AVERROR(ENOMEM); - pkt->side_data[elems].data = av_malloc(size + AV_INPUT_BUFFER_PADDING_SIZE); - if (!pkt->side_data[elems].data) - return NULL; + pkt->side_data[elems].data = data; pkt->side_data[elems].size = size; pkt->side_data[elems].type = type; pkt->side_data_elems++; - return pkt->side_data[elems].data; + return 0; +} + + +uint8_t *av_packet_new_side_data(AVPacket *pkt, enum AVPacketSideDataType type, + int size) +{ + int ret; + uint8_t *data; + + if ((unsigned)size > INT_MAX - AV_INPUT_BUFFER_PADDING_SIZE) + return NULL; + data = av_malloc(size + AV_INPUT_BUFFER_PADDING_SIZE); + if (!data) + return NULL; + + ret = av_packet_add_side_data(pkt, type, data, size); + if (ret < 0) { + av_freep(&data); + return NULL; + } + + return data; } uint8_t *av_packet_get_side_data(AVPacket *pkt, enum AVPacketSideDataType type, diff --git a/libavcodec/version.h b/libavcodec/version.h index 29bc4b7..0e42e6c 100644 --- a/libavcodec/version.h +++ b/libavcodec/version.h @@ -29,7 +29,7 @@ #include "libavutil/version.h" #define LIBAVCODEC_VERSION_MAJOR 57 -#define LIBAVCODEC_VERSION_MINOR 10 +#define LIBAVCODEC_VERSION_MINOR 11 #define LIBAVCODEC_VERSION_MICRO 0 #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ _______________________________________________ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog