diff options
author | Juergen Keil <jkeil@users.sourceforge.net> | 2001-10-10 10:54:48 +0000 |
---|---|---|
committer | Juergen Keil <jkeil@users.sourceforge.net> | 2001-10-10 10:54:48 +0000 |
commit | ab2df4de212c58c30aaf0b9a8e8460b6507320bb (patch) | |
tree | 5ae99e97a83aec7fad75534f53c14548a6fbcd92 | |
parent | 55769958b7a66358490ab4b0bcbd5181da1eabc2 (diff) | |
download | xine-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.c | 23 | ||||
-rw-r--r-- | src/xine-engine/buffer.h | 6 |
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; } ; /* |