On Sun, 3 Nov 2019, Zhao Zhili wrote:
From: Zhao Zhili <zhiliz...@tencent.com> remove_side_data is supposed to remove a single instance by design. Since new_side_data() doesn't forbid add multiple instance of the same type, remove_side_data should deal with that.
Please update the docs of the function that it removes all side data instances of the specified type.
--- libavutil/frame.c | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/libavutil/frame.c b/libavutil/frame.c index dcf1fc3d17..10d06dd29f 100644 --- a/libavutil/frame.c +++ b/libavutil/frame.c @@ -805,15 +805,20 @@ int av_frame_copy(AVFrame *dst, const AVFrame *src) 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) { - free_side_data(&frame->side_data[i]); - frame->side_data[i] = frame->side_data[frame->nb_side_data - 1]; - frame->nb_side_data--; + int found; + + do { + found = 0; + for (i = 0; i < frame->nb_side_data; i++) { + AVFrameSideData *sd = frame->side_data[i]; + if (sd->type == type) { + free_side_data(&frame->side_data[i]); + frame->side_data[i] = frame->side_data[frame->nb_side_data - 1]; + frame->nb_side_data--; + found = 1; + } } - } + } while (found);
I am sure this can be done in a single loop. (E.g.: decrement i when side data is found)
Regards, Marton _______________________________________________ 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".