summaryrefslogtreecommitdiff
path: root/gst-libs/gst/video/gstvideopool.c
diff options
context:
space:
mode:
authorWim Taymans <wim.taymans@collabora.co.uk>2011-12-25 18:07:10 +0100
committerWim Taymans <wim.taymans@collabora.co.uk>2011-12-28 15:35:52 +0100
commit8d93f8edb3906c377e8060e62bdcf27e8cca2ef3 (patch)
tree61384825383f73f322f6f70399b97393399da93d /gst-libs/gst/video/gstvideopool.c
parent862d9f741eaddf9057f204062168028c84698111 (diff)
videopool: add support for custom allocators
Diffstat (limited to 'gst-libs/gst/video/gstvideopool.c')
-rw-r--r--gst-libs/gst/video/gstvideopool.c38
1 files changed, 37 insertions, 1 deletions
diff --git a/gst-libs/gst/video/gstvideopool.c b/gst-libs/gst/video/gstvideopool.c
index b3cc1e6d0..239cecb98 100644
--- a/gst-libs/gst/video/gstvideopool.c
+++ b/gst-libs/gst/video/gstvideopool.c
@@ -138,6 +138,7 @@ gst_video_info_align (GstVideoInfo * info, GstVideoAlignment * align)
/* bufferpool */
struct _GstVideoBufferPoolPrivate
{
+ const GstAllocator *allocator;
GstCaps *caps;
GstVideoInfo info;
GstVideoAlignment video_align;
@@ -249,7 +250,9 @@ video_buffer_pool_alloc (GstBufferPool * pool, GstBuffer ** buffer,
GST_DEBUG_OBJECT (pool, "alloc %u", info->size);
- mem = gst_allocator_alloc (NULL, info->size + priv->prefix, priv->align);
+ mem =
+ gst_allocator_alloc (priv->allocator, info->size + priv->prefix,
+ priv->align);
if (mem == NULL)
goto no_memory;
@@ -329,3 +332,36 @@ gst_video_buffer_pool_finalize (GObject * object)
G_OBJECT_CLASS (gst_video_buffer_pool_parent_class)->finalize (object);
}
+
+/**
+ * gst_video_buffer_pool_get_allocator:
+ * @pool: a #GstVideoBufferPool
+ *
+ * Get the allocator used by @pool to allocate the video memory.
+ *
+ * Returns: the allocator used for allocating video memory
+ */
+const GstAllocator *
+gst_video_buffer_pool_get_allocator (GstVideoBufferPool * pool)
+{
+ g_return_val_if_fail (GST_IS_VIDEO_BUFFER_POOL (pool), NULL);
+
+ return pool->priv->allocator;
+}
+
+/**
+ * gst_video_buffer_pool_set_allocator:
+ * @pool: a #GstVideoBufferPool
+ * @allocator: a #GstAllocator
+ *
+ * Set the allocator used to allocate video memory in @pool. The allocator
+ * should only be changed by subclasses.
+ */
+void
+gst_video_buffer_pool_set_allocator (GstVideoBufferPool * pool,
+ const GstAllocator * allocator)
+{
+ g_return_if_fail (GST_IS_VIDEO_BUFFER_POOL (pool));
+
+ pool->priv->allocator = allocator;
+}