Mercurial > libavutil.hg
diff fifo.c @ 679:58a5033060c3 libavutil
Allocate AVFifoBuffer through the fifo API to reduce future API/ABI issues.
Yes this breaks ABI/API but ive already broken it and will bump avutil major
soon.
author | michael |
---|---|
date | Sun, 08 Mar 2009 14:16:55 +0000 |
parents | 5dd1730abf98 |
children | cb5d78a798ac |
line wrap: on
line diff
--- a/fifo.c Sun Mar 08 01:28:14 2009 +0000 +++ b/fifo.c Sun Mar 08 14:16:55 2009 +0000 @@ -22,20 +22,25 @@ #include "common.h" #include "fifo.h" -int av_fifo_init(AVFifoBuffer *f, unsigned int size) +AVFifoBuffer *av_fifo_alloc(unsigned int size) { + AVFifoBuffer *f= av_mallocz(sizeof(AVFifoBuffer)); + if(!f) + return NULL; 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; + av_freep(&f); + return f; } void av_fifo_free(AVFifoBuffer *f) { + if(f){ av_free(f->buffer); + av_free(f); + } } int av_fifo_size(AVFifoBuffer *f) @@ -59,15 +64,16 @@ if(old_size < new_size){ int len= av_fifo_size(f); - AVFifoBuffer f2; + AVFifoBuffer *f2= av_fifo_alloc(new_size); - if (av_fifo_init(&f2, new_size) < 0) + if (!f2) return -1; - av_fifo_read(f, f2.buffer, len); - f2.wptr += len; - f2.wndx += len; + av_fifo_read(f, f2->buffer, len); + f2->wptr += len; + f2->wndx += len; av_free(f->buffer); - *f= f2; + *f= *f2; + av_free(f2); } return 0; }