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 <c...@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@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".