|
|
|
@ -40,28 +40,28 @@ AVFilterBufferRef *avfilter_default_get_video_buffer(AVFilterLink *link, int per |
|
|
|
|
uint8_t *data[4]; |
|
|
|
|
int i; |
|
|
|
|
AVFilterBufferRef *picref = NULL; |
|
|
|
|
AVFilterPool *pool= link->pool; |
|
|
|
|
AVFilterPool *pool = link->pool; |
|
|
|
|
|
|
|
|
|
if(pool) for(i=0; i<POOL_SIZE; i++){ |
|
|
|
|
picref= pool->pic[i]; |
|
|
|
|
if(picref && picref->buf->format == link->format && picref->buf->w == w && picref->buf->h == h){ |
|
|
|
|
AVFilterBuffer *pic= picref->buf; |
|
|
|
|
pool->pic[i]= NULL; |
|
|
|
|
if (pool) for (i = 0; i < POOL_SIZE; i++) { |
|
|
|
|
picref = pool->pic[i]; |
|
|
|
|
if (picref && picref->buf->format == link->format && picref->buf->w == w && picref->buf->h == h) { |
|
|
|
|
AVFilterBuffer *pic = picref->buf; |
|
|
|
|
pool->pic[i] = NULL; |
|
|
|
|
pool->count--; |
|
|
|
|
picref->video->w = w; |
|
|
|
|
picref->video->h = h; |
|
|
|
|
picref->perms = perms | AV_PERM_READ; |
|
|
|
|
picref->format= link->format; |
|
|
|
|
picref->format = link->format; |
|
|
|
|
pic->refcount = 1; |
|
|
|
|
memcpy(picref->data, pic->data, sizeof(picref->data)); |
|
|
|
|
memcpy(picref->linesize, pic->linesize, sizeof(picref->linesize)); |
|
|
|
|
return picref; |
|
|
|
|
} |
|
|
|
|
}else |
|
|
|
|
} 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) |
|
|
|
|
if ((i = av_image_alloc(data, linesize, w, h, link->format, 16)) < 0) |
|
|
|
|
return NULL; |
|
|
|
|
|
|
|
|
|
picref = avfilter_get_video_buffer_ref_from_arrays(data, linesize, |
|
|
|
@ -72,8 +72,8 @@ AVFilterBufferRef *avfilter_default_get_video_buffer(AVFilterLink *link, int per |
|
|
|
|
} |
|
|
|
|
memset(data[0], 128, i); |
|
|
|
|
|
|
|
|
|
picref->buf->priv= pool; |
|
|
|
|
picref->buf->free= NULL; |
|
|
|
|
picref->buf->priv = pool; |
|
|
|
|
picref->buf->free = NULL; |
|
|
|
|
|
|
|
|
|
return picref; |
|
|
|
|
} |
|
|
|
|