avfilter_formats_unref() should remove the given reference, not the last
authorVitor Sessak <vitor1001@gmail.com>
Sun, 10 Feb 2008 18:03:18 +0000 (18:03 +0000)
committerVitor Sessak <vitor1001@gmail.com>
Sun, 10 Feb 2008 18:03:18 +0000 (18:03 +0000)
reference.

Commited in SoC by Bobby Bingham

Originally committed as revision 11892 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavfilter/formats.c

index 49a74c2..5846b9b 100644 (file)
@@ -109,8 +109,23 @@ void avfilter_formats_ref(AVFilterFormats *f, AVFilterFormats **ref)
     f->refs[f->refcount-1] = ref;
 }
 
+static int find_ref_index(AVFilterFormats *f, AVFilterFormats **ref)
+{
+    int i;
+    for(i = 0; i < (*ref)->refcount; i ++)
+        if((*ref)->refs[i] == ref)
+            return i;
+    return -1;
+}
+
 void avfilter_formats_unref(AVFilterFormats **ref)
 {
+    int idx;
+
+    if((idx = find_ref_index(*ref, ref)) >= 0)
+        memmove((*ref)->refs + idx, (*ref)->refs + idx+1,
+            sizeof(AVFilterFormats**) * ((*ref)->refcount-idx-1));
+
     if(!--(*ref)->refcount) {
         av_free((*ref)->formats);
         av_free((*ref)->refs);