summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJuergen Keil <jkeil@users.sourceforge.net>2001-10-10 10:54:48 +0000
committerJuergen Keil <jkeil@users.sourceforge.net>2001-10-10 10:54:48 +0000
commitab2df4de212c58c30aaf0b9a8e8460b6507320bb (patch)
tree5ae99e97a83aec7fad75534f53c14548a6fbcd92
parent55769958b7a66358490ab4b0bcbd5181da1eabc2 (diff)
downloadxine-lib-ab2df4de212c58c30aaf0b9a8e8460b6507320bb.tar.gz
xine-lib-ab2df4de212c58c30aaf0b9a8e8460b6507320bb.tar.bz2
Add a fifo_buffer function to query the number of the elements stored in a
fifo buffer (for a dvdnav optimization) CVS patchset: 786 CVS date: 2001/10/10 10:54:48
-rw-r--r--src/xine-engine/buffer.c23
-rw-r--r--src/xine-engine/buffer.h6
2 files changed, 27 insertions, 2 deletions
diff --git a/src/xine-engine/buffer.c b/src/xine-engine/buffer.c
index 947b14d07..c20275296 100644
--- a/src/xine-engine/buffer.c
+++ b/src/xine-engine/buffer.c
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*
- * $Id: buffer.c,v 1.7 2001/09/05 16:02:29 guenter Exp $
+ * $Id: buffer.c,v 1.8 2001/10/10 10:54:48 jkeil Exp $
*
*
* contents:
@@ -121,6 +121,7 @@ static void fifo_buffer_put (fifo_buffer_t *fifo, buf_element_t *element) {
fifo->last = element;
element->next = NULL;
+ fifo->fifo_size++;
pthread_cond_signal (&fifo->not_empty);
@@ -146,6 +147,8 @@ static buf_element_t *fifo_buffer_get (fifo_buffer_t *fifo) {
if (fifo->first==NULL)
fifo->last = NULL;
+ fifo->fifo_size--;
+
pthread_mutex_unlock (&fifo->mutex);
return buf;
@@ -178,6 +181,8 @@ static void fifo_buffer_clear (fifo_buffer_t *fifo) {
if (!next)
fifo->last = prev;
+ fifo->fifo_size--;
+
buf->free_buffer(buf);
} else
prev = buf;
@@ -202,6 +207,19 @@ static void fifo_buffer_clear (fifo_buffer_t *fifo) {
}
/*
+ * Return the number of elements in the fifo buffer
+ */
+static int fifo_buffer_size (fifo_buffer_t *this) {
+ int size;
+
+ pthread_mutex_lock(&this->mutex);
+ size = this->fifo_size;
+ pthread_mutex_unlock(&this->mutex);
+
+ return size;
+}
+
+/*
* allocate and initialize new (empty) fifo buffer
*/
fifo_buffer_t *fifo_buffer_new (int num_buffers, uint32_t buf_size) {
@@ -215,9 +233,11 @@ fifo_buffer_t *fifo_buffer_new (int num_buffers, uint32_t buf_size) {
this->first = NULL;
this->last = NULL;
+ this->fifo_size = 0;
this->put = fifo_buffer_put;
this->get = fifo_buffer_get;
this->clear = fifo_buffer_clear;
+ this->size = fifo_buffer_size;
pthread_mutex_init (&this->mutex, NULL);
pthread_cond_init (&this->not_empty, NULL);
@@ -255,6 +275,7 @@ fifo_buffer_t *fifo_buffer_new (int num_buffers, uint32_t buf_size) {
buffer_pool_free (buf);
}
this->buffer_pool_num_free = num_buffers;
+ this->buffer_pool_capacity = num_buffers;
this->buffer_pool_alloc = buffer_pool_alloc;
return this;
diff --git a/src/xine-engine/buffer.h b/src/xine-engine/buffer.h
index 99ea88b4b..47b16b664 100644
--- a/src/xine-engine/buffer.h
+++ b/src/xine-engine/buffer.h
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*
- * $Id: buffer.h,v 1.15 2001/10/07 03:53:11 heikos Exp $
+ * $Id: buffer.h,v 1.16 2001/10/10 10:54:48 jkeil Exp $
*
*
* contents:
@@ -142,6 +142,7 @@ typedef struct fifo_buffer_s fifo_buffer_t;
struct fifo_buffer_s
{
buf_element_t *first, *last;
+ int fifo_size;
pthread_mutex_t mutex;
pthread_cond_t not_empty;
@@ -156,6 +157,8 @@ struct fifo_buffer_s
void (*clear) (fifo_buffer_t *fifo) ;
+ int (*size) (fifo_buffer_t *fifo);
+
/*
* alloc buffer for this fifo from global buf pool
* you don't have to use this function to allocate a buffer,
@@ -173,6 +176,7 @@ struct fifo_buffer_s
pthread_mutex_t buffer_pool_mutex;
pthread_cond_t buffer_pool_cond_not_empty;
int buffer_pool_num_free;
+ int buffer_pool_capacity;
} ;
/*