Browse Source

avfilter_formats_unref() should remove the given reference, not the last

reference.

Commited in SoC by Bobby Bingham

Originally committed as revision 11892 to svn://svn.ffmpeg.org/ffmpeg/trunk
tags/v0.5
Vitor Sessak 18 years ago
parent
commit
88cfb80418
1 changed files with 15 additions and 0 deletions
  1. +15
    -0
      libavfilter/formats.c

+ 15
- 0
libavfilter/formats.c View 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);


Loading…
Cancel
Save