summaryrefslogtreecommitdiff
path: root/sys/vdpau/gstvdp/gstvdpbufferpool.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/vdpau/gstvdp/gstvdpbufferpool.c')
-rw-r--r--sys/vdpau/gstvdp/gstvdpbufferpool.c361
1 files changed, 0 insertions, 361 deletions
diff --git a/sys/vdpau/gstvdp/gstvdpbufferpool.c b/sys/vdpau/gstvdp/gstvdpbufferpool.c
deleted file mode 100644
index 7a1b9c185..000000000
--- a/sys/vdpau/gstvdp/gstvdpbufferpool.c
+++ /dev/null
@@ -1,361 +0,0 @@
-/*
- * GStreamer
- * Copyright (C) 2010 Carl-Anton Ingmarsson <ca.ingmarsson@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-/* FIXME 0.11: suppress warnings for deprecated API such as GStaticRecMutex
- * with newer GLib versions (>= 2.31.0) */
-#define GLIB_DISABLE_DEPRECATION_WARNINGS
-
-#include "gstvdpbufferpool.h"
-
-struct _GstVdpBufferPoolPrivate
-{
- GQueue *buffers;
- GMutex *mutex;
-
- /* properties */
- guint max_buffers;
- GstCaps *caps;
- GstVdpDevice *device;
-};
-
-enum
-{
- PROP_0,
- PROP_DEVICE,
- PROP_CAPS,
- PROP_MAX_BUFFERS
-};
-
-G_DEFINE_TYPE (GstVdpBufferPool, gst_vdp_buffer_pool, G_TYPE_OBJECT);
-
-#define DEFAULT_MAX_BUFFERS 20
-
-static void
-gst_vdp_buffer_free (GstVdpBuffer * buf)
-{
- gst_vdp_buffer_set_buffer_pool (buf, NULL);
- gst_vdp_buffer_unref (buf);
-}
-
-static void
-gst_vdp_buffer_pool_clear (GstVdpBufferPool * bpool)
-{
- GstVdpBufferPoolPrivate *priv = bpool->priv;
-
- g_queue_foreach (priv->buffers, (GFunc) gst_vdp_buffer_free, NULL);
- g_queue_clear (priv->buffers);
-}
-
-gboolean
-gst_vdp_buffer_pool_put_buffer (GstVdpBufferPool * bpool, GstVdpBuffer * buf)
-{
- GstVdpBufferPoolPrivate *priv;
-
- gboolean res;
- GstVdpBufferPoolClass *bpool_class;
- GstCaps *caps;
-
- g_return_val_if_fail (GST_IS_VDP_BUFFER_POOL (bpool), FALSE);
- g_return_val_if_fail (GST_IS_VDP_BUFFER (buf), FALSE);
-
- priv = bpool->priv;
- g_return_val_if_fail (priv->caps, FALSE);
-
- g_mutex_lock (priv->mutex);
-
- if (priv->buffers->length == priv->max_buffers) {
- res = FALSE;
- goto done;
- }
-
- bpool_class = GST_VDP_BUFFER_POOL_GET_CLASS (bpool);
- caps = GST_BUFFER_CAPS (buf);
- if (!caps)
- goto no_caps;
-
- if (!bpool_class->check_caps (bpool, caps)) {
- res = FALSE;
- goto done;
- }
-
- gst_vdp_buffer_ref (buf);
- g_queue_push_tail (priv->buffers, buf);
- res = TRUE;
-
-done:
- g_mutex_unlock (priv->mutex);
-
- return res;
-
-no_caps:
- GST_WARNING ("Buffer doesn't have any caps");
- res = FALSE;
- goto done;
-}
-
-GstVdpBuffer *
-gst_vdp_buffer_pool_get_buffer (GstVdpBufferPool * bpool, GError ** error)
-{
- GstVdpBufferPoolPrivate *priv;
- GstVdpBuffer *buf;
-
- g_return_val_if_fail (GST_IS_VDP_BUFFER_POOL (bpool), NULL);
-
- priv = bpool->priv;
- g_return_val_if_fail (priv->caps, NULL);
-
- g_mutex_lock (priv->mutex);
-
- buf = g_queue_pop_head (priv->buffers);
- if (!buf) {
- GstVdpBufferPoolClass *bpool_class = GST_VDP_BUFFER_POOL_GET_CLASS (bpool);
-
- buf = bpool_class->alloc_buffer (bpool, error);
- if (!buf)
- goto done;
- gst_buffer_set_caps (GST_BUFFER_CAST (buf), priv->caps);
- gst_vdp_buffer_set_buffer_pool (buf, bpool);
- }
-
-done:
- g_mutex_unlock (priv->mutex);
- return buf;
-}
-
-void
-gst_vdp_buffer_pool_set_max_buffers (GstVdpBufferPool * bpool,
- guint max_buffers)
-{
- GstVdpBufferPoolPrivate *priv;
-
- g_return_if_fail (GST_IS_VDP_BUFFER_POOL (bpool));
- g_return_if_fail (max_buffers >= -1);
-
- priv = bpool->priv;
-
- g_mutex_lock (priv->mutex);
-
- if (max_buffers != -1) {
- while (max_buffers < priv->buffers->length) {
- GstVdpBuffer *buf;
-
- buf = g_queue_pop_tail (priv->buffers);
- gst_vdp_buffer_unref (buf);
- }
- }
-
- priv->max_buffers = max_buffers;
-
- g_mutex_unlock (priv->mutex);
-}
-
-guint
-gst_vdp_buffer_pool_get_max_buffers (GstVdpBufferPool * bpool)
-{
- g_return_val_if_fail (GST_IS_VDP_BUFFER_POOL (bpool), 0);
-
- return bpool->priv->max_buffers;
-}
-
-void
-gst_vdp_buffer_pool_set_caps (GstVdpBufferPool * bpool, const GstCaps * caps)
-{
- GstVdpBufferPoolPrivate *priv;
- GstVdpBufferPoolClass *bpool_class;
- gboolean clear_bufs;
-
- g_return_if_fail (GST_IS_VDP_BUFFER_POOL (bpool));
- g_return_if_fail (GST_IS_CAPS (caps));
-
- priv = bpool->priv;
- bpool_class = GST_VDP_BUFFER_POOL_GET_CLASS (bpool);
-
- g_mutex_lock (priv->mutex);
-
- if (!bpool_class->set_caps (bpool, caps, &clear_bufs))
- goto invalid_caps;
-
- if (clear_bufs)
- gst_vdp_buffer_pool_clear (bpool);
-
- if (priv->caps)
- gst_caps_unref (priv->caps);
-
- priv->caps = gst_caps_copy (caps);
-
-done:
- g_mutex_unlock (priv->mutex);
- return;
-
-invalid_caps:
- GST_WARNING ("Subclass didn't accept caps: %" GST_PTR_FORMAT, caps);
- goto done;
-}
-
-const GstCaps *
-gst_vdp_buffer_pool_get_caps (GstVdpBufferPool * bpool)
-{
- g_return_val_if_fail (GST_IS_VDP_BUFFER_POOL (bpool), NULL);
-
- return bpool->priv->caps;
-}
-
-GstVdpDevice *
-gst_vdp_buffer_pool_get_device (GstVdpBufferPool * bpool)
-{
- g_return_val_if_fail (GST_IS_VDP_BUFFER_POOL (bpool), NULL);
-
- return bpool->priv->device;
-}
-
-static void
-gst_vdp_buffer_pool_get_property (GObject * object, guint prop_id,
- GValue * value, GParamSpec * pspec)
-{
- GstVdpBufferPool *bpool = (GstVdpBufferPool *) object;
- GstVdpBufferPoolPrivate *priv = bpool->priv;
-
- switch (prop_id) {
- case PROP_DEVICE:
- g_value_set_object (value, priv->device);
- break;
-
- case PROP_CAPS:
- g_value_set_pointer (value, priv->caps);
- break;
-
- case PROP_MAX_BUFFERS:
- g_value_set_uint (value, priv->max_buffers);
- break;
-
-
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-gst_vdp_buffer_pool_set_property (GObject * object, guint prop_id,
- const GValue * value, GParamSpec * pspec)
-{
- GstVdpBufferPool *bpool = (GstVdpBufferPool *) object;
- GstVdpBufferPoolPrivate *priv = bpool->priv;
-
- switch (prop_id) {
- case PROP_DEVICE:
- priv->device = g_value_get_object (value);
- break;
-
- case PROP_CAPS:
- gst_vdp_buffer_pool_set_caps (bpool, g_value_get_pointer (value));
- break;
-
- case PROP_MAX_BUFFERS:
- gst_vdp_buffer_pool_set_max_buffers (bpool, g_value_get_uint (value));
- break;
-
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-gst_vdp_buffer_pool_finalize (GObject * object)
-{
- GstVdpBufferPool *bpool = GST_VDP_BUFFER_POOL (object);
- GstVdpBufferPoolPrivate *priv = bpool->priv;
-
- g_mutex_free (priv->mutex);
-
- if (priv->caps)
- gst_caps_unref (priv->caps);
-
- G_OBJECT_CLASS (gst_vdp_buffer_pool_parent_class)->finalize (object);
-}
-
-static void
-gst_vdp_buffer_pool_init (GstVdpBufferPool * bpool)
-{
- GstVdpBufferPoolPrivate *priv;
-
- bpool->priv = priv = G_TYPE_INSTANCE_GET_PRIVATE (bpool,
- GST_TYPE_VDP_BUFFER_POOL, GstVdpBufferPoolPrivate);
-
- priv->buffers = g_queue_new ();
- priv->mutex = g_mutex_new ();
-
- /* properties */
- priv->caps = NULL;
- priv->max_buffers = DEFAULT_MAX_BUFFERS;
-}
-
-static void
-gst_vdp_buffer_pool_class_init (GstVdpBufferPoolClass * bpool_klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (bpool_klass);
-
- g_type_class_add_private (bpool_klass, sizeof (GstVdpBufferPoolPrivate));
-
- object_class->get_property = gst_vdp_buffer_pool_get_property;
- object_class->set_property = gst_vdp_buffer_pool_set_property;
-
- object_class->finalize = gst_vdp_buffer_pool_finalize;
-
- /**
- * GstVdpBufferPool:device:
- *
- * The #GstVdpDevice this pool is bound to.
- */
- g_object_class_install_property
- (object_class,
- PROP_DEVICE,
- g_param_spec_object ("device",
- "Device",
- "The GstVdpDevice this pool is bound to",
- GST_TYPE_VDP_DEVICE, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
-
- /**
- * GstVdpBufferPool:caps:
- *
- * The video object capabilities represented as a #GstCaps. This
- * shall hold at least the "width" and "height" properties.
- */
- g_object_class_install_property
- (object_class,
- PROP_CAPS,
- g_param_spec_pointer ("caps",
- "Caps", "The buffer capabilities", G_PARAM_READWRITE));
-
- /**
- * GstVdpBufferPool:max-buffers:
- *
- * The maximum number of buffer in the pool. Or -1, the pool
- * will hold as many objects as possible.
- */
- g_object_class_install_property
- (object_class,
- PROP_MAX_BUFFERS,
- g_param_spec_int ("max-buffers",
- "Max Buffers",
- "The maximum number of buffers in the pool, or -1 for unlimited",
- -1, G_MAXINT32, DEFAULT_MAX_BUFFERS, G_PARAM_READWRITE));
-}