From 0a71e78ce4947ccf553442dcc59578c1a20d169b Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Sat, 7 Mar 2009 21:02:08 +0000 Subject: [PATCH] Try to fix the 1 byte cannot be used issue. Originally committed as revision 17865 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavutil/fifo.c | 12 ++++++------ libavutil/fifo.h | 1 + 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/libavutil/fifo.c b/libavutil/fifo.c index 86236f740..4bc8be07f 100644 --- a/libavutil/fifo.c +++ b/libavutil/fifo.c @@ -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 @@ void av_fifo_free(AVFifoBuffer *f) 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 @@ void av_fifo_realloc(AVFifoBuffer *f, unsigned int new_size) { 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 @@ int av_fifo_realloc2(AVFifoBuffer *f, unsigned int new_size) { 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 @@ int av_fifo_generic_write(AVFifoBuffer *f, void *src, int size, int (*func)(void 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 @@ void av_fifo_drain(AVFifoBuffer *f, int size) f->rptr += size; if (f->rptr >= f->end) f->rptr -= f->end - f->buffer; + f->rndx += size; } diff --git a/libavutil/fifo.h b/libavutil/fifo.h index 1a549f254..a62ef7d07 100644 --- a/libavutil/fifo.h +++ b/libavutil/fifo.h @@ -31,6 +31,7 @@ typedef struct AVFifoBuffer { uint8_t *buffer; uint8_t *rptr, *wptr, *end; + uint32_t rndx, wndx; } AVFifoBuffer; /** -- 2.34.1