diff options
Diffstat (limited to 'libavfilter/video.c')
-rw-r--r-- | libavfilter/video.c | 51 |
1 files changed, 45 insertions, 6 deletions
diff --git a/libavfilter/video.c b/libavfilter/video.c index 23bf867a82..b2740705a8 100644 --- a/libavfilter/video.c +++ b/libavfilter/video.c @@ -1,24 +1,29 @@ /* - * This file is part of Libav. + * Copyright 2007 Bobby Bingham + * Copyright Stefano Sabatini <stefasab gmail com> + * Copyright Vitor Sessak <vitor1001 gmail com> * - * Libav is free software; you can redistribute it and/or + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * - * Libav is distributed in the hope that it will be useful, + * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public - * License along with Libav; if not, write to the Free Software + * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include <string.h> #include <stdio.h> +#include "libavutil/avassert.h" #include "libavutil/buffer.h" #include "libavutil/imgutils.h" #include "libavutil/mem.h" @@ -40,6 +45,32 @@ AVFrame *ff_default_get_video_buffer(AVFilterLink *link, int w, int h) AVFrame *frame = av_frame_alloc(); int ret; +#if 0 //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; + pool->count--; + av_assert0(!picref->video->qp_table); + picref->video->w = w; + picref->video->h = h; + picref->perms = full_perms; + picref->format = link->format; + pic->refcount = 1; + memcpy(picref->data, pic->data, sizeof(picref->data)); + memcpy(picref->linesize, pic->linesize, sizeof(picref->linesize)); + pool->refcount++; + return picref; + } + } + } else { + pool = link->pool = av_mallocz(sizeof(AVFilterPool)); + pool->refcount = 1; + } +#endif if (!frame) return NULL; @@ -51,12 +82,20 @@ AVFrame *ff_default_get_video_buffer(AVFilterLink *link, int w, int h) if (ret < 0) av_frame_free(&frame); +#if 0 //POOL + memset(data[0], 128, i); + + picref->buf->priv = pool; + picref->buf->free = NULL; + pool->refcount++; +#endif + return frame; } #if FF_API_AVFILTERBUFFER AVFilterBufferRef * -avfilter_get_video_buffer_ref_from_arrays(uint8_t *data[4], int linesize[4], int perms, +avfilter_get_video_buffer_ref_from_arrays(uint8_t * const data[4], const int linesize[4], int perms, int w, int h, enum AVPixelFormat format) { AVFilterBuffer *pic = av_mallocz(sizeof(AVFilterBuffer)); @@ -106,7 +145,7 @@ AVFrame *ff_get_video_buffer(AVFilterLink *link, int w, int h) AVFrame *ret = NULL; av_unused char buf[16]; - FF_DPRINTF_START(NULL, get_video_buffer); ff_dlog_link(NULL, link, 0); + FF_TPRINTF_START(NULL, get_video_buffer); ff_tlog_link(NULL, link, 0); if (link->dstpad->get_video_buffer) ret = link->dstpad->get_video_buffer(link, w, h); |