On 03/18/2014 01:26 PM, Anton Khirnov wrote:
> ---
>  doc/APIchanges    |    4 ++++
>  libavutil/frame.c |   16 ++++++++++++++++
>  libavutil/frame.h |    6 ++++++
>  3 files changed, 26 insertions(+)
> 
> diff --git a/doc/APIchanges b/doc/APIchanges
> index e2da101..b5307de 100644
> --- a/doc/APIchanges
> +++ b/doc/APIchanges
> @@ -13,6 +13,10 @@ libavutil:     2013-12-xx
>  
>  API changes, most recent first:
>  
> +2014-02-xx - xxxxxxx - lavu 53.05.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.04.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 f81bbbd..cc4bfcd 100644
> --- a/libavutil/frame.c
> +++ b/libavutil/frame.c
> @@ -526,3 +526,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--;
> +        }
> +    }

I think you need to decrement 'i' after swapping the last element so
that it will get checked in the next iteration.

-Justin
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to