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