[FFmpeg-devel] [PATCH] swscale: Support setting filters through AVOptions

Stefano Sabatini stefasab at gmail.com
Mon Nov 4 23:38:55 CET 2013


On date Monday 2013-11-04 22:30:25 +0100, wm4 encoded:
> On Mon, 4 Nov 2013 14:32:23 +0100
> Stefano Sabatini <stefasab at gmail.com> wrote:
> 
> > On date Tuesday 2013-10-29 20:16:21 +0100, wm4 encoded:
[...]
> > > The description isn't terribly clear IMHO. It's not
> > > really clear to me how to do what sws_getDefaultFilter() and
> > > sws_getGaussianVec() did (because these were the only real uses for
> > > this filter stuff apparently). Does the user have to reimplement them,
> > > and then convert the array of coefficients to a string separated by
> > > ','?
> > 
> > I could easily support gauss() and const() vector operators.
> > 
> > At this point we need to extend the syntax. Probably something like:
> > 
> > vector  ::= [domain=][function|sequence]
> > vectors ::= vector [&vector]
> > filter  ::= vectors
> 
> Yes, if you want to go this way, this should be added. The new API
> should cover all uses of the old API (unless they're deemed as not
> worth supporting).

This doesn't yet support vectors operators like convolve or scalar
product. I don't know if it is really worth since this will require
the implementation of a proper parser/mini-language.

> 
> > > (Also what's the difference between '|' and ','?)
> > > Or maybe use the original functions, and then convert the SwsFilter
> > > manually to a string?
> > > 
> > > All in all pretty weird IMO. It's geared towards somehow making the
> > > filter vectors settable through ffmpeg/ffplay (because apparently these
> > > tools are too dumb to have their own option parsers), instead of making
> > > it usable to API users.
> > 

> > What's the problem with API users? Can't they set them directly in the
> > SwsContext with sws_getCachedContext()?
> 
> Using a set of functions is easier than generating a string. (Both for
> users and implementers of an API!)

struct SwsContext *sws_getCachedContext(struct SwsContext *context,
                                        int srcW, int srcH, enum AVPixelFormat srcFormat,
                                        int dstW, int dstH, enum AVPixelFormat dstFormat,
                                        int flags, SwsFilter *srcFilter,
                                        SwsFilter *dstFilter, const double *param);

This implies that you can set the filter directly by using the
vector/filter functions (or alternatively specifying a filter and
parsing it).

> 
> > > What exactly is the advantage of this, and the
> > > use case? Everything becomes more awkward, but at least it's supported
> > > by the glorious AVOption API? I'm quite a bit skeptic about this.
> > 
> > Why "more awkward"? The idea is to be able to set it through external
> > components (e.g. libavfilter) and to let the high-level user (with no
> > direct interface to libswscale internals) to define them. Note that
> > this is orthogonal to setting it programmatically.
> 

> User interface issues shouldn't be the job of a very low level core
> library like libswscale.

So where do you suggest to implement such stuff?

[...]
-- 
FFmpeg = Forgiving and Formidable Meaningless Picky Enigmatic Gymnast


More information about the ffmpeg-devel mailing list