On 8 November 2017 at 22:55, Michael Niedermayer <mich...@niedermayer.cc>
wrote:

> This gives FFmpeg libs a field that they can freely and safely use.
> Avoiding the need of wraping of a users opaque_ref field and its issues.
>
> Signed-off-by: Michael Niedermayer <mich...@niedermayer.cc>
> ---
>  libavutil/frame.c |  8 +++++++-
>  libavutil/frame.h | 12 ++++++++++++
>  2 files changed, 19 insertions(+), 1 deletion(-)
>
> diff --git a/libavutil/frame.c b/libavutil/frame.c
> index 982fbb5c81..662a7e5ab5 100644
> --- a/libavutil/frame.c
> +++ b/libavutil/frame.c
> @@ -383,12 +383,17 @@ FF_ENABLE_DEPRECATION_WARNINGS
>  #endif
>
>      av_buffer_unref(&dst->opaque_ref);
> +    av_buffer_unref(&dst->private_ref);
>      if (src->opaque_ref) {
>          dst->opaque_ref = av_buffer_ref(src->opaque_ref);
>          if (!dst->opaque_ref)
>              return AVERROR(ENOMEM);
>      }
> -
> +    if (src->private_ref) {
> +        dst->private_ref = av_buffer_ref(src->private_ref);
> +        if (!dst->private_ref)
> +            return AVERROR(ENOMEM);
> +    }
>      return 0;
>  }
>
> @@ -524,6 +529,7 @@ void av_frame_unref(AVFrame *frame)
>      av_buffer_unref(&frame->hw_frames_ctx);
>
>      av_buffer_unref(&frame->opaque_ref);
> +    av_buffer_unref(&frame->private_ref);
>
>      get_frame_defaults(frame);
>  }
> diff --git a/libavutil/frame.h b/libavutil/frame.h
> index 0c6aab1c02..7b9bec054a 100644
> --- a/libavutil/frame.h
> +++ b/libavutil/frame.h
> @@ -563,6 +563,18 @@ typedef struct AVFrame {
>      /**
>       * @}
>       */
> +    /**
> +     * AVBufferRef for free use by libavcodec / libavfilte / .... Code
> outside
> +     * the FFmpeg libs will never
> +     * check or change the contents of the buffer ref. FFmpeg calls
> +     * av_buffer_unref() on it when the frame is unreferenced.
> +     * av_frame_copy_props() calls create a new reference with
> av_buffer_ref()
> +     * for the target frame's private_ref field.
> +     *
> +     * The field should be set to NULL by the FFmpeg libs before passing
> a frame
> +     * to the user.
> +     */
> +    AVBufferRef *private_ref;
>  } AVFrame;
>
>  #if FF_API_FRAME_GET_SET
> --
> 2.15.0
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>


This makes it sound as if it would get used and can't be overwritten (e.g.
feeding frames from a decoder to an encoder and zeroing this field would
make things go bad).

Just say its temporary storage only and that it doesn't get used after
decoding or outputting.
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

Reply via email to