[FFmpeg-devel] [PATCH 1/2] avutil/buffer: add av_buffer_pool_buffer_get_opaque
Marton Balint
cus at passwd.hu
Sun Dec 15 00:50:24 EET 2019
On Sat, 14 Dec 2019, James Almer wrote:
> 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.
It is documented below that the buffer has to be part of the pool, so I
don't really see this as an issue.
An alternative approach might be to introduce
AVBufferRef *av_buffer_pool_get2(AVBufferPool *pool, void **opaque);
which returns the original opauqe value of the allocated buffer in
addition to returning the buffer.
Do you prefer this? Or maybe something entirely different?
Thanks,
Marton
>
>> +}
>> 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, \
>>
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
More information about the ffmpeg-devel
mailing list