[FFmpeg-devel] Filters & AVOptions

Clément Bœsch ubitux at gmail.com
Thu Apr 11 19:29:27 CEST 2013


Some little comments about what's been done these last hours about the
filters and AVOptions.

But first, some little story/context. A while ago, we introduced the
shorthand for filters. Basically, the ability to have "c=3:a=1:b=2" or
"1:c=3:b=2" or "1:2:3" and use internals/helper to auto parse these
options to initialize the local filter context. The order of the
short-hands (the parameters without a key) was defined in each filter with
something like:
    const char *const shorthand = {"a", "b", "c", NULL};

A few days ago though, the fork introduced a similar feature making use of
the filters' AVOption options declaration instead. This has some
advantages, and some drawbacks over our own solution. Anyway, it was
decided to switch to this new shorthand system (because the new system
will allow some dictionary init which might be relevant). For the users,
not much things should change.

Most of the filters are now compatible with this new system: the filters
have either a priv_class/avoptions/etc or nothing if they take no

The problem for the remaining filters is mainly that they can't use ':'
freely anymore: it's the separator used for separating options, and the
parsing has completely moved to avfilter internals. Basically, filters can
not receive a string as initializer anymore (the idea is to have a
dictionary init form only). Various temporary solutions are available to
deal with this problem, the main one being a ':'-to-'|' replace in the
compat layer (see lavfi/avfilter.c:avfilter_init_filter). Then the filter
only uses '|' as an item separator (most of the time the abuse of ':' was
to separate a list of items).

We've dealt with most of the filters, but some are remaining and need to
be updated ASAP before the next incoming evil wave. Here is the list and
the problem we have to handle (this list is from

    Still use shorthands, should be possible to update without much problems
    Patch to drop that filter posted
    resample filter now uses a dict init, we need to have the same
    Might be problematic because of the process_command system
    Similar to abuffer
    I can't test it, so I'm not the best person to update this
    Stefano has a pending patch for this
    This one is a bit troublesome since most mplayer filter make use of
    We use ':' as a dynamic separator, so we need to switch to '|'. It
    should be similar to the changes done for aevalsrc
    This one might be messy because of the compat layers we had, I'm not
    the best person to comment on these
    Similar to scale

I don't plan to deal with more filters myself since I won't be efficient
at all with those remaining.

Anyway, some random comments about this new system:

 - the mixed short/long system is now restored (the fork only supports one
   or another), so there should be no compatibility break

 - /!\ it might be relevant to notice in the doc that the usage of
   shorthands in *unstable* and should not be used in scripting (the fork
   could insert some options at the end of an options list, while we added
   some options in the meantime). This is the main drawback of the new
   system IMO. /!\

 - the aliases are correctly handled (thanks to Michael) so no worry about

 - the new lavfi opt wave is incoming, so we probably need to get things
   done ASAP

 - it's possible the fork did not use the same name for options as we did
   when porting our filters to avoptions. So a deep pass on the
   documentation and code consistency should be done, where we should
   check the names, and order of the options (to keep the same shorthands
   as the fork).


Clément B.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 490 bytes
Desc: not available
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20130411/aeb3cbc8/attachment.asc>

More information about the ffmpeg-devel mailing list