From: Zhao Zhili <zhiliz...@tencent.com> --- libavutil/frame.c | 13 +++++++++++++ libavutil/frame.h | 4 ++++ 2 files changed, 17 insertions(+)
diff --git a/libavutil/frame.c b/libavutil/frame.c index dcf1fc3d17..bb20e99331 100644 --- a/libavutil/frame.c +++ b/libavutil/frame.c @@ -692,10 +692,23 @@ AVFrameSideData *av_frame_new_side_data_from_buf(AVFrame *frame, AVBufferRef *buf) { AVFrameSideData *ret, **tmp; + int i; if (!buf) return NULL; + for (i = 0; i < frame->nb_side_data; i++) { + AVFrameSideData *sd = frame->side_data[i]; + if (sd->type == type) { + av_buffer_unref(&sd->buf); + av_dict_free(&sd->metadata); + sd->buf = buf; + sd->data = buf->data; + sd->size = buf->size; + return sd; + } + } + if (frame->nb_side_data > INT_MAX / sizeof(*frame->side_data) - 1) return NULL; diff --git a/libavutil/frame.h b/libavutil/frame.h index 5d3231e7bb..906143f894 100644 --- a/libavutil/frame.h +++ b/libavutil/frame.h @@ -886,6 +886,8 @@ AVBufferRef *av_frame_get_plane_buffer(AVFrame *frame, int plane); /** * Add a new side data to a frame. * + * @note replace existing side data of the same type + * * @param frame a frame to which the side data should be added * @param type type of the added side data * @param size size of the side data @@ -899,6 +901,8 @@ AVFrameSideData *av_frame_new_side_data(AVFrame *frame, /** * Add a new side data to a frame from an existing AVBufferRef * + * @note replace existing side data of the same type + * * @param frame a frame to which the side data should be added * @param type the type of the added side data * @param buf an AVBufferRef to add as side data. The ownership of -- 2.22.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".