[FFmpeg-devel] [PATCH] lavc: add new API for iterating codecs and codec parsers

wm4 nfxjfg at googlemail.com
Sun Dec 24 03:31:16 EET 2017

On Sun, 24 Dec 2017 02:06:40 +0100
Michael Niedermayer <michael at niedermayer.cc> wrote:

> If you and others agree we can also easily maintain support for user apps
> to register codecs. The only thing needed is to make the array bigger and
> add codecs which arent ours in there as long as there is space.
> doing this would be very easy, a atomic integer pointing to the begin of
> the free space which is atomically increased for each register is all that
> is needed

Not sure how often I repeated this (specifically for you), but:

- users can't provide AVCodec, because it would require accessing
  internal API and private ABI unstable fields
- if we provide the ability to add user codecs (which I'm not
  fundamentally against), then it should not modify global state.
  Having named user codecs in a process wide list would definitely lead
  to name clashes or other conflicts
- also, we would have to provide stable/public API for implementing
  codecs in the first place (all AVCodec callback fields are private),
  and we're nowhere near the state of adding it
- dropping avcodec_register() is definitely not the worst blocker for
  user codecs - it's very, very far from it, because once we have
  fixed the things above, we can just add a new public API for
  registering (which would have to have a different function signature
  to avoid global mutable lists). So I don't know why you complain.
- these points are technical, not ideological

Can you point out any user application which registers its own codecs
(and this violates the API)?

> > +AVCodec *av_codec_next(const AVCodec *c)
> > +{
> > +    pthread_once(&av_codec_next_init, av_codec_init_next);
> > +
> > +    if (c)
> > +        return c->next;  
> AVCodec->next should be removed as it makes the structs non constant

That has to happen after a deprecation phase, unless you have an idea
how to make av_codec_next() not O(n^2) without this.

More information about the ffmpeg-devel mailing list