[FFmpeg-devel] [PATCH 1/2] avutil/buffer: add av_buffer_pool_buffer_get_opaque

James Almer jamrial at gmail.com
Sun Dec 15 00:12:15 EET 2019


On 12/7/2019 6:57 PM, Marton Balint wrote:
> In order to access the original opaque parameter of a buffer in the buffer
> pool. (The buffer pool implementation overrides the normal opaque parameter but
> also saves it so it is accessible).
> 
> Signed-off-by: Marton Balint <cus at passwd.hu>
> ---
>  doc/APIchanges      |  3 +++
>  libavutil/buffer.c  |  6 ++++++
>  libavutil/buffer.h  | 13 +++++++++++++
>  libavutil/version.h |  4 ++--
>  4 files changed, 24 insertions(+), 2 deletions(-)
> 
> diff --git a/doc/APIchanges b/doc/APIchanges
> index 401c65a753..5b8d801f06 100644
> --- a/doc/APIchanges
> +++ b/doc/APIchanges
> @@ -15,6 +15,9 @@ libavutil:     2017-10-21
>  
>  API changes, most recent first:
>  
> +2019-12-xx - xxxxxxxxxx - lavu 56.37.100 - buffer.h
> +  Add av_buffer_pool_buffer_get_opaque().
> +
>  2019-11-17 - 1c23abc88f - lavu 56.36.100 - eval API
>    Add av_expr_count_vars().
>  
> diff --git a/libavutil/buffer.c b/libavutil/buffer.c
> index f0034b026a..ec00fb22ec 100644
> --- a/libavutil/buffer.c
> +++ b/libavutil/buffer.c
> @@ -355,3 +355,9 @@ AVBufferRef *av_buffer_pool_get(AVBufferPool *pool)
>  
>      return ret;
>  }
> +
> +void *av_buffer_pool_buffer_get_opaque(AVBufferRef *ref)
> +{
> +    BufferPoolEntry *buf = ref->buffer->opaque;
> +    return buf->opaque;

I'm not sure if this is a good idea. It takes any AVBufferRef as input,
so it will crash on pretty much every one not created by an AVBufferPool
(unless it checks that buf is not NULL before dereferencing it), or
return something unrelated otherwise.

> +}
> diff --git a/libavutil/buffer.h b/libavutil/buffer.h
> index 73b6bd0b14..e0f94314f4 100644
> --- a/libavutil/buffer.h
> +++ b/libavutil/buffer.h
> @@ -284,6 +284,19 @@ void av_buffer_pool_uninit(AVBufferPool **pool);
>   */
>  AVBufferRef *av_buffer_pool_get(AVBufferPool *pool);
>  
> +/**
> + * Query the original opaque parameter of an allocated buffer in the pool.
> + *
> + * @param ref a buffer reference to a buffer returned by av_buffer_pool_get.
> + * @return the opaque parameter set by the buffer allocator function of the
> + *         buffer pool.
> + *
> + * @note the opaque parameter of ref is used by the buffer pool implementation,
> + * therefore you have to use this function to access the original opaque
> + * parameter of an allocated buffer.
> + */
> +void *av_buffer_pool_buffer_get_opaque(AVBufferRef *ref);
> +
>  /**
>   * @}
>   */
> diff --git a/libavutil/version.h b/libavutil/version.h
> index e18163388d..4de0fa1fc3 100644
> --- a/libavutil/version.h
> +++ b/libavutil/version.h
> @@ -79,8 +79,8 @@
>   */
>  
>  #define LIBAVUTIL_VERSION_MAJOR  56
> -#define LIBAVUTIL_VERSION_MINOR  36
> -#define LIBAVUTIL_VERSION_MICRO 101
> +#define LIBAVUTIL_VERSION_MINOR  37
> +#define LIBAVUTIL_VERSION_MICRO 100
>  
>  #define LIBAVUTIL_VERSION_INT   AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
>                                                 LIBAVUTIL_VERSION_MINOR, \
> 



More information about the ffmpeg-devel mailing list