[FFmpeg-devel] [PATCH 2/2] lavf: use a video frame pool for each link of the filtergraph
Matthieu Bouron
matthieu.bouron at gmail.com
Mon Dec 14 14:29:11 CET 2015
On Fri, Dec 11, 2015 at 2:04 PM, Clément Bœsch <u at pkh.me> wrote:
> On Fri, Dec 11, 2015 at 01:32:47PM +0100, Matthieu Bouron wrote:
> [...]
> > 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. */
>
> Pasting the whole comment for context:
> /* TODO: set the buffer's priv member to a context structure for the
> whole
> * filter chain. This will allow for a buffer pool instead of the
> constant
> * alloc & free cycle currently implemented. */
>
> Is this comment still relevant?
>
Nope, I removed it in the newer version of the patch.
>
> > 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) {
>
> If pool_align > BUFFER_ALIGN it can also work, no?
>
Yes.
>
> Same question if the pool_width and height are actually larger? Maybe you
> want
> to shrink the memory requirement in this case though.
>
This is something I will address with a future change in the API of the
FFVideoFramePool if it's not a blocker.
Matthieu
[...]
More information about the ffmpeg-devel
mailing list