X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavutil%2Ffifo.c;h=3ebd5f9b202f15f330eb5b461fbcadd95292ccc5;hb=eac673d506eaefc29b0fc74b5043e41a2bf0967d;hp=d10198972d4c5a95ed48192d57601ac9e1fe1ee8;hpb=d303e0affd9274381a098da55ef4eca954f23b74;p=ffmpeg diff --git a/libavutil/fifo.c b/libavutil/fifo.c index d10198972d4..3ebd5f9b202 100644 --- a/libavutil/fifo.c +++ b/libavutil/fifo.c @@ -25,7 +25,7 @@ AVFifoBuffer *av_fifo_alloc(unsigned int size) { AVFifoBuffer *f= av_mallocz(sizeof(AVFifoBuffer)); - if(!f) + if (!f) return NULL; f->buffer = av_malloc(size); f->end = f->buffer + size; @@ -37,7 +37,7 @@ AVFifoBuffer *av_fifo_alloc(unsigned int size) void av_fifo_free(AVFifoBuffer *f) { - if(f){ + if (f) { av_freep(&f->buffer); av_free(f); } @@ -59,20 +59,21 @@ int av_fifo_space(AVFifoBuffer *f) return f->end - f->buffer - av_fifo_size(f); } -int av_fifo_realloc2(AVFifoBuffer *f, unsigned int new_size) { - unsigned int old_size= f->end - f->buffer; +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); - AVFifoBuffer *f2= av_fifo_alloc(new_size); + if (old_size < new_size) { + int len = av_fifo_size(f); + AVFifoBuffer *f2 = av_fifo_alloc(new_size); if (!f2) - return -1; + return AVERROR(ENOMEM); av_fifo_generic_read(f, f2->buffer, len, NULL); f2->wptr += len; f2->wndx += len; av_free(f->buffer); - *f= *f2; + *f = *f2; av_free(f2); } return 0; @@ -84,8 +85,8 @@ int av_fifo_generic_write(AVFifoBuffer *f, void *src, int size, int (*func)(void int total = size; do { int len = FFMIN(f->end - f->wptr, size); - if(func) { - if(func(src, f->wptr, len) <= 0) + if (func) { + if (func(src, f->wptr, len) <= 0) break; } else { memcpy(f->wptr, src, len); @@ -127,3 +128,39 @@ void av_fifo_drain(AVFifoBuffer *f, int size) f->rptr -= f->end - f->buffer; f->rndx += size; } + +#ifdef TEST + +#undef printf + +int main(void) +{ + /* create a FIFO buffer */ + AVFifoBuffer *fifo = av_fifo_alloc(13 * sizeof(int)); + int i, j, n; + + /* fill data */ + for (i = 0; av_fifo_space(fifo) >= sizeof(int); i++) + 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)); + printf("%d: %d\n", i, *v); + } + printf("\n"); + + /* read data */ + for (i = 0; av_fifo_size(fifo) >= sizeof(int); i++) { + av_fifo_generic_read(fifo, &j, sizeof(int), NULL); + printf("%d ", j); + } + printf("\n"); + + av_fifo_free(fifo); + + return 0; +} + +#endif