On Mon, Dec 15, 2014 at 8:38 PM, Luca Barbato <[email protected]> wrote:
> And make sure the nb_side_data field is reset as well.
>
> Based on an initial patch from wm4 <[email protected]>.
>
> CC: [email protected]
> ---
>  libavutil/frame.c | 22 ++++++++++++++--------
>  1 file changed, 14 insertions(+), 8 deletions(-)

Ah yes, this version is more complete.

> diff --git a/libavutil/frame.c b/libavutil/frame.c
> index 48df311..32ec470 100644
> --- a/libavutil/frame.c
> +++ b/libavutil/frame.c
> @@ -54,6 +54,18 @@ static void free_side_data(AVFrameSideData **ptr_sd)
>      av_freep(ptr_sd);
>  }
>
> +static void wipe_side_data(AVFrame *frame)
> +{
> +    int i;
> +
> +    for (i = 0; i < frame->nb_side_data; i++) {
> +        free_side_data(&frame->side_data[i]);
> +    }
nit: drop the {} for oneliners.

> +    frame->nb_side_data = 0;
> +
> +    av_freep(&frame->side_data);
> +}
> +
>  AVFrame *av_frame_alloc(void)
>  {
>      AVFrame *frame = av_mallocz(sizeof(*frame));
> @@ -284,10 +296,7 @@ void av_frame_unref(AVFrame *frame)
>  {
>      int i;
>
> -    for (i = 0; i < frame->nb_side_data; i++) {
> -        free_side_data(&frame->side_data[i]);
> -    }
> -    av_freep(&frame->side_data);
> +    wipe_side_data(frame);
>
>      for (i = 0; i < FF_ARRAY_ELEMS(frame->buf); i++)
>          av_buffer_unref(&frame->buf[i]);
> @@ -398,10 +407,7 @@ int av_frame_copy_props(AVFrame *dst, const AVFrame *src)
>          AVFrameSideData *sd_dst = av_frame_new_side_data(dst, sd_src->type,
>                                                           sd_src->size);
>          if (!sd_dst) {
> -            for (i = 0; i < dst->nb_side_data; i++) {
> -                free_side_data(&dst->side_data[i]);
> -            }
> -            av_freep(&dst->side_data);
> +            wipe_side_data(dst);
>              return AVERROR(ENOMEM);
>          }
>          memcpy(sd_dst->data, sd_src->data, sd_src->size);

patch ok, thanks

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

Reply via email to