static void store_in_pool(AVFilterBufferRef *ref)
{
int i;
- AVFilterLink *link= ref->buf->priv;
- AVFilterPool *pool;
+ AVFilterPool *pool= ref->buf->priv;
av_assert0(ref->buf->data[0]);
- if(!link->pool)
- link->pool = av_mallocz(sizeof(AVFilterPool));
- pool= link->pool;
-
if(pool->count == POOL_SIZE){
AVFilterBufferRef *ref1= pool->pic[0];
av_freep(&ref1->video);
if ((link = filter->inputs[i])) {
if (link->src)
link->src->outputs[link->srcpad - link->src->output_pads] = NULL;
- av_freep(&link->pool);
avfilter_formats_unref(&link->in_formats);
avfilter_formats_unref(&link->out_formats);
}
if ((link = filter->outputs[i])) {
if (link->dst)
link->dst->inputs[link->dstpad - link->dst->input_pads] = NULL;
- av_freep(&link->pool);
avfilter_formats_unref(&link->in_formats);
avfilter_formats_unref(&link->out_formats);
}
memcpy(picref->linesize, pic->linesize, sizeof(picref->linesize));
return picref;
}
- }
+ }else
+ pool = link->pool = av_mallocz(sizeof(AVFilterPool));
// +2 is needed for swscaler, +16 to be SIMD-friendly
if ((i=av_image_alloc(data, linesize, w, h, link->format, 16)) < 0)
}
memset(data[0], 128, i);
- picref->buf->priv= link;
+ picref->buf->priv= pool;
picref->buf->free= NULL;
return picref;