From d9701bf8a7d9ee922ec753d0ce255f06ee4dd3d6 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Mon, 14 Aug 2000 10:57:30 +0000 Subject: [PATCH] Added the bufferpool handler. Original commit message from CVS: Added the bufferpool handler. This object is able to generate buffers and is passed between elements to exchange buffers. Elements can also use this pool to efficiently generate output buffers. --- gst/gstbufferpool.c | 86 +++++++++++++++++++++++++++++++++++++++++++++ gst/gstbufferpool.h | 68 +++++++++++++++++++++++++++++++++++ 2 files changed, 154 insertions(+) create mode 100644 gst/gstbufferpool.c create mode 100644 gst/gstbufferpool.h diff --git a/gst/gstbufferpool.c b/gst/gstbufferpool.c new file mode 100644 index 0000000000..ca99a85eb4 --- /dev/null +++ b/gst/gstbufferpool.c @@ -0,0 +1,86 @@ +/* Gnome-Streamer + * Copyright (C) <1999> Erik Walthinsen + * + * 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., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + + +#include +#include + + + +/** + * gst_buffer_pool_new: + * + * Create a new buffer pool. + * + * Returns: new buffer pool + */ +GstBufferPool *gst_buffer_pool_new() +{ + GstBufferPool *pool; + + pool = g_malloc(sizeof(GstBufferPool)); + DEBUG("BUF: allocating new buffer pool %p\n", pool); + + pool->new_buffer = NULL; + pool->destroy_buffer = NULL; + return pool; +} + +void gst_buffer_pool_set_create_function(GstBufferPool *pool, GstBufferPoolCreateFunction create, gpointer user_data) +{ + g_return_if_fail(pool != NULL); + + pool->new_buffer = create; + pool->new_user_data = user_data; +} + +void gst_buffer_pool_set_destroy_function(GstBufferPool *pool, GstBufferPoolDestroyFunction destroy, gpointer user_data) +{ + g_return_if_fail(pool != NULL); + + pool->destroy_buffer = destroy; + pool->destroy_user_data = user_data; +} + +void gst_buffer_pool_destroy(GstBufferPool *pool) +{ + g_return_if_fail(pool != NULL); + + g_free(pool); +} + +GstBuffer *gst_buffer_pool_new_buffer(GstBufferPool *pool) +{ + GstBuffer *buffer; + + g_return_val_if_fail(pool != NULL, NULL); + + buffer = pool->new_buffer(pool, pool->new_user_data); + buffer->pool = pool; + + return buffer; +} + +void gst_buffer_pool_destroy_buffer(GstBufferPool *pool, GstBuffer *buffer) +{ + g_return_if_fail(pool != NULL); + g_return_if_fail(buffer != NULL); + + pool->destroy_buffer(pool, buffer, pool->new_user_data); +} diff --git a/gst/gstbufferpool.h b/gst/gstbufferpool.h new file mode 100644 index 0000000000..823eb5466a --- /dev/null +++ b/gst/gstbufferpool.h @@ -0,0 +1,68 @@ +/* Gnome-Streamer + * Copyright (C) <1999> Erik Walthinsen + * + * 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., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + + +#ifndef __GST_BUFFER_POOL_H__ +#define __GST_BUFFER_POOL_H__ + +#include "gstbuffer.h" + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + + +#define GST_BUFFER_POOL(buf) \ + ((GstBufferPool *)(buf)) + +typedef struct _GstBufferPool GstBufferPool; + +typedef GstBuffer *(*GstBufferPoolCreateFunction) (GstBufferPool *pool, gpointer user_data); +typedef void (*GstBufferPoolDestroyFunction) (GstBufferPool *pool, GstBuffer *buffer, gpointer user_data); + +struct _GstBufferPool { + /* will be called when a new buffer is to be created */ + GstBufferPoolCreateFunction new_buffer; + /* user data to pass with the new_buffer function */ + gpointer new_user_data; + + gpointer destroy_user_data; + GstBufferPoolDestroyFunction destroy_buffer; +}; + +/* creating a new buffer pool from scratch */ +GstBufferPool *gst_buffer_pool_new(); + +/* creating a buffer from the pool */ +GstBuffer *gst_buffer_pool_new_buffer(GstBufferPool *pool); +void gst_buffer_pool_destroy_buffer(GstBufferPool *pool, GstBuffer *buffer); + +/* setting create and destroy functions */ +void gst_buffer_pool_set_create_function(GstBufferPool *pool, GstBufferPoolCreateFunction create, gpointer user_data); +void gst_buffer_pool_set_destroy_function(GstBufferPool *pool, GstBufferPoolDestroyFunction destroy, gpointer user_data); + +/* destroying the buffer pool */ +void gst_buffer_pool_destroy(GstBufferPool *pool); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + + +#endif /* __GST_BUFFER_POOL_H__ */