On Tue, Dec 15, 2015 at 10:00 AM, Michael Niedermayer <michae...@gmx.at> wrote:
> On Mon, Dec 14, 2015 at 02:26:38PM +0100, Matthieu Bouron wrote: > > On Fri, Dec 11, 2015 at 1:32 PM, Matthieu Bouron < > matthieu.bou...@gmail.com> > > wrote: > > > > > From: Matthieu Bouron <matthieu.bou...@stupeflix.com> > > > > > > --- > > > libavfilter/avfilter.c | 1 + > > > libavfilter/avfilter.h | 5 +++++ > > > libavfilter/video.c | 38 +++++++++++++++++++++++++++----------- > > > 3 files changed, 33 insertions(+), 11 deletions(-) > > > > > > diff --git a/libavfilter/avfilter.c b/libavfilter/avfilter.c > > > index c5c3044..bec8f81 100644 > > > --- a/libavfilter/avfilter.c > > > +++ b/libavfilter/avfilter.c > > > @@ -168,6 +168,7 @@ void avfilter_link_free(AVFilterLink **link) > > > return; > > > > > > av_frame_free(&(*link)->partial_buf); > > > + av_video_frame_pool_uninit(&(*link)->video_frame_pool); > > > > > > av_freep(link); > > > } > > > diff --git a/libavfilter/avfilter.h b/libavfilter/avfilter.h > > > index 7aac3cf..e7d0a65 100644 > > > --- a/libavfilter/avfilter.h > > > +++ b/libavfilter/avfilter.h > > > @@ -509,6 +509,11 @@ struct AVFilterLink { > > > * Number of past frames sent through the link. > > > */ > > > int64_t frame_count; > > > + > > > + /** > > > + * Video frame pool. > > > + */ > > > + AVVideoFramePool *video_frame_pool; > > > }; > > > > > > /** > > > diff --git a/libavfilter/video.c b/libavfilter/video.c > > > index 0274fc1..5b0b7f9 100644 > > > --- a/libavfilter/video.c > > > +++ b/libavfilter/video.c > > > @@ -32,6 +32,8 @@ > > > #include "internal.h" > > > #include "video.h" > > > > > > +#define BUFFER_ALIGN 32 > > > + > > > AVFrame *ff_null_get_video_buffer(AVFilterLink *link, int w, int h) > > > { > > > return ff_get_video_buffer(link->dst->outputs[0], w, h); > > > @@ -42,21 +44,35 @@ AVFrame *ff_null_get_video_buffer(AVFilterLink > *link, > > > int w, int h) > > > * alloc & free cycle currently implemented. */ > > > AVFrame *ff_default_get_video_buffer(AVFilterLink *link, int w, int h) > > > { > > > - AVFrame *frame = av_frame_alloc(); > > > - int ret; > > > + int pool_width = 0; > > > + int pool_height = 0; > > > + int pool_align = 0; > > > + enum AVPixelFormat pool_format = AV_PIX_FMT_NONE; > > > > > > - if (!frame) > > > - return NULL; > > > + if (!link->video_frame_pool) { > > > + link->video_frame_pool = > > > av_video_frame_pool_init(av_buffer_allocz, w, h, > > > + > link->format, > > > BUFFER_ALIGN); > > > + if (!link->video_frame_pool) > > > + return NULL; > > > + } else { > > > + if (av_video_frame_pool_get_config(link->video_frame_pool, > > > + &pool_width, &pool_height, > > > + &pool_format, &pool_align) > < > > > 0) { > > > + return NULL; > > > + } > > > > > > - frame->width = w; > > > - frame->height = h; > > > - frame->format = link->format; > > > + if (pool_width != w || pool_height != h || > > > + pool_format != link->format || pool_align != > BUFFER_ALIGN) { > > > > > > - ret = av_frame_get_buffer(frame, 32); > > > - if (ret < 0) > > > - av_frame_free(&frame); > > > + av_video_frame_pool_uninit(&link->video_frame_pool); > > > + link->video_frame_pool = > > > av_video_frame_pool_init(av_buffer_allocz, w, h, > > > + > > > link->format, BUFFER_ALIGN); > > > + if (!link->video_frame_pool) > > > + return NULL; > > > + } > > > + } > > > > > > - return frame; > > > + return av_video_frame_pool_get(link->video_frame_pool); > > > } > > > > > > AVFrame *ff_get_video_buffer(AVFilterLink *link, int w, int h) > > > -- > > > 2.6.3 > > > > > > > > New patch attached. It does not rely anymore on the public > AVVideoFramePool > > but rather on a private FFVideoFramePool declared inside libavfilter > since > > I would like this API to cover both audio and video and maybe have the > > ability to reconfigure itself (without the need of changing the > underlying > > pools if the width and height are lower than the original ones for > example) > > before having it public. The plan is also to factorize this code with the > > one in libavcodec/FramePool as much as possible. > > > Makefile | 1 > > avfilter.c | 1 > > avfilter.h | 5 + > > framepool.c | 189 > ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > > framepool.h | 84 ++++++++++++++++++++++++++ > > internal.h | 1 > > video.c | 42 ++++++++----- > > 7 files changed, 309 insertions(+), 14 deletions(-) > > 33310aff0621b3255a2723dd8b7388b825a8a5ae > 0001-lavfi-use-a-video-frame-pool-for-each-link-of-the-fi.patch > > From a307a65bfcbde03bce21928024ab53a901cf3620 Mon Sep 17 00:00:00 2001 > > From: Matthieu Bouron <matthieu.bou...@stupeflix.com> > > Date: Fri, 11 Dec 2015 13:32:47 +0100 > > Subject: [PATCH] lavfi: use a video frame pool for each link of the > > filtergraph > > should be ok, assuming its the same as the previous patch just privatized > Pushed. Thanks. [...] _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel