static void store_in_pool(AVFilterBufferRef *ref) { int i; AVFilterPool *pool= ref->buf->priv; av_assert0(ref->buf->data[0]); av_assert0(pool->refcount>0); if (pool->count == POOL_SIZE) { AVFilterBufferRef *ref1 = pool->pic[0]; av_freep(&ref1->video); av_freep(&ref1->audio); av_freep(&ref1->buf->data[0]); av_freep(&ref1->buf); av_free(ref1); memmove(&pool->pic[0], &pool->pic[1], sizeof(void*)*(POOL_SIZE-1)); pool->count--; pool->pic[POOL_SIZE-1] = NULL; } for (i = 0; i < POOL_SIZE; i++) { if (!pool->pic[i]) { pool->pic[i] = ref; pool->count++; break; } } if (pool->draining) { ff_free_pool(pool); } else --pool->refcount; }
void avfilter_link_free(AVFilterLink **link) { if (!*link) return; if ((*link)->pool) ff_free_pool((*link)->pool); av_freep(link); }
void avfilter_link_free(AVFilterLink **link) { if (!*link) return; if ((*link)->pool) ff_free_pool((*link)->pool); avfilter_unref_bufferp(&(*link)->partial_buf); av_freep(link); }