Mercurial > libavformat.hg
diff utils.c @ 602:15cf78d9aceb libavformat
fifo_realloc()
author | michael |
---|---|
date | Wed, 01 Dec 2004 02:28:28 +0000 |
parents | 6446e6aee91e |
children | deece487318e |
line wrap: on
line diff
--- a/utils.c Tue Nov 30 21:57:51 2004 +0000 +++ b/utils.c Wed Dec 01 02:28:28 2004 +0000 @@ -232,6 +232,9 @@ int fifo_size(FifoBuffer *f, uint8_t *rptr) { int size; + + if(!rptr) + rptr= f->rptr; if (f->wptr >= rptr) { size = f->wptr - rptr; @@ -244,9 +247,13 @@ /* get data from the fifo (return -1 if not enough data) */ int fifo_read(FifoBuffer *f, uint8_t *buf, int buf_size, uint8_t **rptr_ptr) { - uint8_t *rptr = *rptr_ptr; + uint8_t *rptr; int size, len; + if(!rptr_ptr) + rptr_ptr= &f->rptr; + rptr = *rptr_ptr; + if (f->wptr >= rptr) { size = f->wptr - rptr; } else { @@ -270,11 +277,34 @@ return 0; } +void fifo_realloc(FifoBuffer *f, int new_size){ + int old_size= f->end - f->buffer; + + if(old_size < new_size){ + uint8_t *old= f->buffer; + + f->buffer= av_realloc(f->buffer, new_size); + + f->rptr += f->buffer - old; + f->wptr += f->buffer - old; + + if(f->wptr < f->rptr){ + memmove(f->rptr + new_size - old_size, f->rptr, f->buffer + old_size - f->rptr); + f->rptr += new_size - old_size; + } + f->end= f->buffer + new_size; + } +} + void fifo_write(FifoBuffer *f, uint8_t *buf, int size, uint8_t **wptr_ptr) { int len; uint8_t *wptr; + + if(!wptr_ptr) + wptr_ptr= &f->wptr; wptr = *wptr_ptr; + while (size > 0) { len = f->end - wptr; if (len > size)