[FFmpeg-devel] [PATCH] libavfilter: constify filter list

wm4 nfxjfg at googlemail.com
Wed Jan 31 13:24:43 EET 2018


On Wed, 31 Jan 2018 12:11:25 +0100
Michael Niedermayer <michael at niedermayer.cc> wrote:

> On Wed, Jan 31, 2018 at 10:03:58AM +0100, wm4 wrote:
> > On Wed, 31 Jan 2018 09:08:23 +0100
> > Tobias Rapp <t.rapp at noa-archive.com> wrote:
> >   
> > > On 30.01.2018 20:37, Michael Niedermayer wrote:  
> > > > On Tue, Jan 30, 2018 at 08:27:27PM +0700, Muhammad Faiz wrote:    
> > > >> On Tue, Jan 30, 2018 at 7:50 PM, Michael Niedermayer
> > > >> <michael at niedermayer.cc> wrote:    
> > > >>> Its also a step away from supporting plugins.
> > > >>> Why plugins matter ? Because having plugin
> > > >>> support is a big advantage, it allows a much wider
> > > >>> community to work on, write and maintain filters.
> > > >>>
> > > >>> With plugins, people can write filters that are
> > > >>> written in languages other than C. Or filters which
> > > >>> some developer in FFmpeg doesnt want. Or they can be
> > > >>> maintained externally by people who just do not like us.
> > > >>> Or by people who perfer a FOSS license different from
> > > >>> LGPL/GPL/BSD. Iam sure others can come up with more
> > > >>> reasons ...
> > > >>>
> > > >>> Of course avfilter_register() isnt enough for plugins
> > > >>> but it or something equivalent is needed for plugins.
> > > >>>
> > > >>> So i would prefer if avfilter_register() stays supported
> > > >>> indefinitly or in case a different system is written for
> > > >>> plugins then until that system is in place.    
> > > >>
> > > >> It just returns error and logs error message that currently external
> > > >> filter is unsupported. If someone wants to implement support for
> > > >> external filter, it can be easily added later using separate
> > > >> list/table.    
> > > > 
> > > > Iam not sure "easily" is true
> > > > 
> > > > We started out with a fully public API that allowed external filters.
> > > > and little by little its removed or made private.
> > > > each individual change may be easy to undo but as a whole moving
> > > > libavfilter back to having a public API is not that easy anymore
> > > > 
> > > > IIRC the arguments to make things private where that people wanted to
> > > > improve the API. But from the idea and impression of a plan like:
> > > > 1. make it private
> > > > 2. design and implement better API
> > > > 3. make it public again
> > > > 
> > > > Somehow now people lost sight and interrest in 3. and even 2. is becoming
> > > > less interresting. But the problem is really without 2 + 3 actually happening
> > > > doing 1 seems like not a good idea at all.
> > > > 
> > > > To me it seems even mentioning external filters and public API makes some
> > > > people angry.
> > > > But really that has to be the goal at some point. To again have a public API    
> > > 
> > > I agree that having (again) a public filter API would be good. This 
> > > would give users the freedom to implement their own special-purpose 
> > > filters (see the "dumpwave" discussion).  
> > 
> > Someone needs to design and write it.
> > 
> > Whether we have external filters is completely orthogonal to this
> > change.   
> 
> > They were not possible before, because not enough API for
> > implementing them is public.   
> 
> This is correct if by "before" you mean today before this is applied.
> But longer ago, as in years, it was possible
> 
> 
> > They can be possible in the future, but
> > then registering them would need a different API anyway (one that
> > doesn't use global mutable state, but uses some sort of context
> > instead).  
> 
> i understand that you arent a native english speaker nor am i but
> what you write here is not true.
> 
> Several people desire to eliminate all "global mutable state"
> and thats fine, iam happy if that is achieved. But its not
> that its neccessary for a fully functional API register or otherwise.
> The registering code with "global mutable state" and some form
> of thread synchronization would work perfectly fine.
> 
> What exactly is in relation to registering the problem with 
> "global mutable state" ?
> 
> One application registering a filter with a common name and another 
> application unintentionally using that ?

Yes. It's not library-safe.

> This is not even possible because each application is in its own process and
> will have its own independant copy of libavfilter in its address space only
> with "read only" pages shared or with pages with "copy on write".

This is a library. There can be multiple users of a library in the same
process.

> The "one registers the other uses it by mistake" issue is as far as i
> understand only possible if an application uses libavfilter and that
> application uses also a lib that itself uses libavfilter too or
> similar cases. 
> And then both mess with registering custom filters and using custom
> filters.
> That looks like a very rare situation. If thats the only issue, i would
> really not say theres a "need" to avoid "global mutable state"

I don't agree. It will cause problems you're not even thinking about
now. Look at any library that thought global mutable state is fine for
some thing, and what problems it caused. Besides someone will have the
idea to create some sort of plugin loader, and then all bets are off.

Why are you even stirring up an offtopic discussion again. I've also
mentioned multiple times how the main problem is creating public API
so filters can be implemented. This is not a trivial task, but adding
some sort of filter register API is absolutely trivial (even if it
readds the current API, which I hope it won't). So why bring it up
again and cause tons of fruitless discussions? Just why? Please explain
this.


More information about the ffmpeg-devel mailing list