[FFmpeg-devel] [PATCH] vsrc_buffer: remove dependency on AVFrame

Stefano Sabatini stefano.sabatini-lala at poste.it
Fri May 13 22:52:46 CEST 2011


On date Friday 2011-05-13 21:12:59 +0200, Michael Niedermayer encoded:
> On Fri, May 13, 2011 at 06:42:14PM +0200, Stefano Sabatini wrote:
> > Change the interface of av_vsrc_buffer_add_frame(), make it accept in input
> > an AVFilterBufferRef rather than an AVFrame.
> > 
> > This way the interface can be used without requiring the
> > inclusion/installation of libavcodec headers.
> 

> theres no need for headers to be installed, struct AVFrame or even
> void * can be used.

but in case you want to use the function in a pure libavfilter app you
can't.

> [...]
> > -                    // add it to be filtered
> > -                    av_vsrc_buffer_add_frame2(ost->input_video_filter, &picture, ""); //TODO user setable params
> > +
> > +                    picref = avfilter_get_video_buffer_ref_from_arrays(
> > +                        picture.data, picture.linesize, AV_PERM_WRITE,
> > +                        picture.width, picture.height, picture.format);
> > +                    avfilter_copy_frame_props(picref, &picture);
> > +                    av_vsrc_buffer_add_frame2(ost->input_video_filter, picref, ""); //TODO user setable params
> >                  }
> >              }
> >          }
> 
> This is much more complex for user applications and not extendable
> we just added these fields days ago. more will be added and this will
> always need updating.

But we should only rely on fields contained in the video filter
buffer, rather than in AVFrame which contains information which can't
be propagated in the filterchain. And the AVFrame <-> A/V filter
buffer mapping can be easily extended by extending
avfilter_copy_frame_props().

> Iam not against this patch if you want it but i think the people
> using libavfilter & libavcodec would prefer a simple interface
> that allows passing an AVFrame.

What about:

av_vsrc_buffer_add_frame2(ost->input_video_filter, avfilter_get_video_buffer_ref_from_frame(frame, perm), "");
?

Also I plan to move the sws_param from av_vsrc_buffer_add_frame2() to
the buffer init, which should simplify the interface even more.
-- 
FFmpeg = Fundamentalist and Fostering Multimedia Powered Elastic Gem


More information about the ffmpeg-devel mailing list