On Sat, Apr 30, 2011 at 22:35, <[email protected]> wrote: > Hi, > there's a number of known problems with AVOptions: > 1) Current design doesn't allow demuxer or decoder-specific options, > because private data isn't allocated until > avcodec_open/av_open_input_stream and after that it's already too late > to set options. > 2) Current API is pretty messy and unpleasant to use, have a look at > cmdutils.c:opt_default() and set_context_defaults() for an example. > 3) Default value is a double, so no string or binary defaults. > 4) ??? > > I've been working on solving that, as it stands in the way of moving > private options where they belong (and I expect demuxer-private options > to be useful for my gsoc project). > Intermediate WIP results can be found in the opts branch in > git://git.khirnov.net/git/libav > > I) As suggested by unused AVOption2, I've replaced default_val by a > union, thus allowing arbitrary defaults (this breaks FATE for yet > unknown reasons) > II) I've introduced a new API, where the options are stored in a > temporary storage until the open() call. Then they are recursively > distributed where they belong. This enables using private options like > this: > avformat_alloc_context() > avopt_set() on the above context > av_open_input_stream() <- options are actually set here, private > contexts are tried first > > Demuxer-private options are already written and appear to work. > > Decoder-private options pose a little problem -- options state in > AVCodecContext is currently inited during avcodec_alloc_context() and > freed in avcodec_close(). The problem is that e.g. av_find_stream_info() > opens and closes the codec, so the option context is not there anymore > when the options are processed and codec is openened again. > Suggestions welcome. > > -strict is also broken atm, since ffmpeg expects to be able to read the > options back immediately, which isn't possible now. > > Comments/tests/fixes very much welcome. > > -- > Anton Khirnov >
I like the idea. please consider that options are also useful for protocols, like buffer size in UDP, live=1 in RTMP etc. currently these options are encoded in the URL itself, which isn't optimal IMHO. -- Aviad Rozenhek
_______________________________________________ libav-devel mailing list [email protected] https://lists.libav.org/mailman/listinfo/libav-devel
