changeset 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 bcd0e6fe83d8
children cb5d78a798ac
files fifo.c fifo.h
diffstat 2 files changed, 18 insertions(+), 13 deletions(-) [+]
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;
 }
--- a/fifo.h	Sun Mar 08 01:28:14 2009 +0000
+++ b/fifo.h	Sun Mar 08 14:16:55 2009 +0000
@@ -36,11 +36,10 @@
 
 /**
  * Initializes an AVFifoBuffer.
- * @param *f AVFifoBuffer to initialize
  * @param size of FIFO
- * @return <0 for failure >=0 otherwise
+ * @return AVFifoBuffer or NULL if mem allocation failure
  */
-int av_fifo_init(AVFifoBuffer *f, unsigned int size);
+AVFifoBuffer *av_fifo_alloc(unsigned int size);
 
 /**
  * Frees an AVFifoBuffer.