# HG changeset patch # User michael # Date 1236459728 0 # Node ID 5e391d180d814c495848c87e4d53195770ac0430 # Parent 361d5a76087d4167a9ddc1ed02b9c69c6b6d568d Try to fix the 1 byte cannot be used issue. diff -r 361d5a76087d -r 5e391d180d81 fifo.c --- a/fifo.c Thu Mar 05 21:20:13 2009 +0000 +++ b/fifo.c Sat Mar 07 21:02:08 2009 +0000 @@ -24,10 +24,10 @@ int av_fifo_init(AVFifoBuffer *f, unsigned int size) { - size= FFMAX(size, size+1); f->wptr = f->rptr = f->buffer = av_malloc(size); f->end = f->buffer + size; + f->rndx = f->wndx = 0; if (!f->buffer) return -1; return 0; @@ -40,10 +40,7 @@ int av_fifo_size(AVFifoBuffer *f) { - int size = f->wptr - f->rptr; - if (size < 0) - size += f->end - f->buffer; - return size; + return (uint32_t)(f->wndx - f->rndx); } int av_fifo_read(AVFifoBuffer *f, uint8_t *buf, int buf_size) @@ -60,7 +57,7 @@ int av_fifo_realloc2(AVFifoBuffer *f, unsigned int new_size) { unsigned int old_size= f->end - f->buffer; - if(old_size <= new_size){ + if(old_size < new_size){ int len= av_fifo_size(f); AVFifoBuffer f2; @@ -68,6 +65,7 @@ return -1; av_fifo_read(f, f2.buffer, len); f2.wptr += len; + f2.wndx += len; av_free(f->buffer); *f= f2; } @@ -96,6 +94,7 @@ f->wptr += len; if (f->wptr >= f->end) f->wptr = f->buffer; + f->wndx += len; size -= len; } while (size > 0); return total - size; @@ -123,4 +122,5 @@ f->rptr += size; if (f->rptr >= f->end) f->rptr -= f->end - f->buffer; + f->rndx += size; } diff -r 361d5a76087d -r 5e391d180d81 fifo.h --- a/fifo.h Thu Mar 05 21:20:13 2009 +0000 +++ b/fifo.h Sat Mar 07 21:02:08 2009 +0000 @@ -31,6 +31,7 @@ typedef struct AVFifoBuffer { uint8_t *buffer; uint8_t *rptr, *wptr, *end; + uint32_t rndx, wndx; } AVFifoBuffer; /**