diff --git a/doc/APIchanges b/doc/APIchanges index c94228f69b..3890d1d78e 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -15,6 +15,10 @@ libavutil: 2012-10-22 API changes, most recent first: +2014-02-xx - xxxxxxx - lavu 53.08.0 - frame.h + Add av_frame_remove_side_data() for removing a single side data + instance from a frame. + 2014-02-xx - xxxxxxx - lavu 53.07.0 - frame.h, replaygain.h Add AV_FRAME_DATA_REPLAYGAIN for exporting replaygain tags. Add a new header replaygain.h with the AVReplayGain struct. diff --git a/libavutil/frame.c b/libavutil/frame.c index 747aa79b8f..07cdc213f2 100644 --- a/libavutil/frame.c +++ b/libavutil/frame.c @@ -642,3 +642,19 @@ int av_frame_copy(AVFrame *dst, const AVFrame *src) return AVERROR(EINVAL); } + +void av_frame_remove_side_data(AVFrame *frame, enum AVFrameSideDataType type) +{ + int i; + + for (i = 0; i < frame->nb_side_data; i++) { + AVFrameSideData *sd = frame->side_data[i]; + if (sd->type == type) { + av_freep(&sd->data); + av_dict_free(&sd->metadata); + av_freep(&frame->side_data[i]); + frame->side_data[i] = frame->side_data[frame->nb_side_data - 1]; + frame->nb_side_data--; + } + } +} diff --git a/libavutil/frame.h b/libavutil/frame.h index 6587439ab1..e68a96a39d 100644 --- a/libavutil/frame.h +++ b/libavutil/frame.h @@ -730,6 +730,12 @@ AVFrameSideData *av_frame_new_side_data(AVFrame *frame, AVFrameSideData *av_frame_get_side_data(const AVFrame *frame, enum AVFrameSideDataType type); +/** + * If side data of the supplied type exists in the frame, free it and remove it + * from the frame. + */ +void av_frame_remove_side_data(AVFrame *frame, enum AVFrameSideDataType type); + /** * @} */ diff --git a/libavutil/version.h b/libavutil/version.h index d880dfdaf5..45f5adc804 100644 --- a/libavutil/version.h +++ b/libavutil/version.h @@ -56,7 +56,7 @@ */ #define LIBAVUTIL_VERSION_MAJOR 52 -#define LIBAVUTIL_VERSION_MINOR 68 +#define LIBAVUTIL_VERSION_MINOR 69 #define LIBAVUTIL_VERSION_MICRO 100 #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \