From 20c5f4d8358e5dab2eb87e611167987a4840122a Mon Sep 17 00:00:00 2001 From: Zhao Zhili Date: Sun, 3 Nov 2019 01:41:18 +0800 Subject: avutil/frame: fix remove_side_data remove_side_data is supposed to remove a single instance by design. Since new_side_data() doesn't forbid add multiple instances of the same type, remove_side_data should deal with that. Signed-off-by: Marton Balint --- libavutil/frame.c | 2 +- libavutil/frame.h | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/libavutil/frame.c b/libavutil/frame.c index dcf1fc3..e403809 100644 --- a/libavutil/frame.c +++ b/libavutil/frame.c @@ -806,7 +806,7 @@ void av_frame_remove_side_data(AVFrame *frame, enum AVFrameSideDataType type) { int i; - for (i = 0; i < frame->nb_side_data; i++) { + for (i = frame->nb_side_data - 1; i >= 0; i--) { AVFrameSideData *sd = frame->side_data[i]; if (sd->type == type) { free_side_data(&frame->side_data[i]); diff --git a/libavutil/frame.h b/libavutil/frame.h index 5d3231e..b5afb58 100644 --- a/libavutil/frame.h +++ b/libavutil/frame.h @@ -920,8 +920,7 @@ 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. + * Remove and free all side data instances of the given type. */ void av_frame_remove_side_data(AVFrame *frame, enum AVFrameSideDataType type); -- cgit v1.1