diff options
Diffstat (limited to 'ffmpeg/libavutil/fifo.c')
| -rw-r--r-- | ffmpeg/libavutil/fifo.c | 38 |
1 files changed, 22 insertions, 16 deletions
diff --git a/ffmpeg/libavutil/fifo.c b/ffmpeg/libavutil/fifo.c index bafa9e9..ca25bc5 100644 --- a/ffmpeg/libavutil/fifo.c +++ b/ffmpeg/libavutil/fifo.c @@ -19,16 +19,18 @@ * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ + +#include "avassert.h" #include "common.h" #include "fifo.h" AVFifoBuffer *av_fifo_alloc(unsigned int size) { - AVFifoBuffer *f= av_mallocz(sizeof(AVFifoBuffer)); + AVFifoBuffer *f = av_mallocz(sizeof(AVFifoBuffer)); if (!f) return NULL; f->buffer = av_malloc(size); - f->end = f->buffer + size; + f->end = f->buffer + size; av_fifo_reset(f); if (!f->buffer) av_freep(&f); @@ -64,7 +66,7 @@ int av_fifo_realloc2(AVFifoBuffer *f, unsigned int new_size) unsigned int old_size = f->end - f->buffer; if (old_size < new_size) { - int len = av_fifo_size(f); + int len = av_fifo_size(f); AVFifoBuffer *f2 = av_fifo_alloc(new_size); if (!f2) @@ -92,8 +94,10 @@ int av_fifo_grow(AVFifoBuffer *f, unsigned int size) return 0; } -// src must NOT be const as it can be a context for func that may need updating (like a pointer or byte counter) -int av_fifo_generic_write(AVFifoBuffer *f, void *src, int size, int (*func)(void*, void*, int)) +/* src must NOT be const as it can be a context for func that may need + * updating (like a pointer or byte counter) */ +int av_fifo_generic_write(AVFifoBuffer *f, void *src, int size, + int (*func)(void *, void *, int)) { int total = size; uint32_t wndx= f->wndx; @@ -106,30 +110,31 @@ int av_fifo_generic_write(AVFifoBuffer *f, void *src, int size, int (*func)(void break; } else { memcpy(wptr, src, len); - src = (uint8_t*)src + len; + src = (uint8_t *)src + len; } // Write memory barrier needed for SMP here in theory wptr += len; if (wptr >= f->end) wptr = f->buffer; - wndx += len; - size -= len; + wndx += len; + size -= len; } while (size > 0); f->wndx= wndx; f->wptr= wptr; return total - size; } - -int av_fifo_generic_read(AVFifoBuffer *f, void *dest, int buf_size, void (*func)(void*, void*, int)) +int av_fifo_generic_read(AVFifoBuffer *f, void *dest, int buf_size, + void (*func)(void *, void *, int)) { // Read memory barrier needed for SMP here in theory do { int len = FFMIN(f->end - f->rptr, buf_size); - if(func) func(dest, f->rptr, len); - else{ + if (func) + func(dest, f->rptr, len); + else { memcpy(dest, f->rptr, len); - dest = (uint8_t*)dest + len; + dest = (uint8_t *)dest + len; } // memory barrier needed for SMP here in theory av_fifo_drain(f, len); @@ -141,6 +146,7 @@ int av_fifo_generic_read(AVFifoBuffer *f, void *dest, int buf_size, void (*func) /** Discard data from the FIFO. */ void av_fifo_drain(AVFifoBuffer *f, int size) { + av_assert2(av_fifo_size(f) >= size); f->rptr += size; if (f->rptr >= f->end) f->rptr -= f->end - f->buffer; @@ -160,9 +166,9 @@ int main(void) av_fifo_generic_write(fifo, &i, sizeof(int), NULL); /* peek at FIFO */ - n = av_fifo_size(fifo)/sizeof(int); - for (i = -n+1; i < n; i++) { - int *v = (int *)av_fifo_peek2(fifo, i*sizeof(int)); + n = av_fifo_size(fifo) / sizeof(int); + for (i = -n + 1; i < n; i++) { + int *v = (int *)av_fifo_peek2(fifo, i * sizeof(int)); printf("%d: %d\n", i, *v); } printf("\n"); |
