On 06/17/2011 12:41 AM, Anton Khirnov wrote:
> Fixes encoder private options, which are broken now in ffmpeg, because
> opt_default2() can't find them, thus making opt_default() to fail.
> ---
> libavcodec/options.c | 21 ++++++++++++++++++++-
> 1 files changed, 20 insertions(+), 1 deletions(-)
>
> diff --git a/libavcodec/options.c b/libavcodec/options.c
> index 8f9aec4..ae9e0c9 100644
> --- a/libavcodec/options.c
> +++ b/libavcodec/options.c
> @@ -37,6 +37,25 @@ static const char* context_to_name(void* ptr) {
> return "NULL";
> }
>
> +static const AVOption *opt_find(void *obj, const char *name, const char
> *unit, int opt_flags, int search_flags)
> +{
> + AVCodecContext *s = obj;
> + AVCodec *c = NULL;
> +
> + if (s->priv_data) {
> + if (s->codec->priv_class)
> + return av_opt_find(s->priv_data, name, unit, opt_flags,
> search_flags);
> + return NULL;
> + }
> +
> + while ((c = av_codec_next(c))) {
> + const AVOption *o;
> + if (c->priv_class && (o = av_opt_find(&c->priv_class, name, unit,
> opt_flags, search_flags)))
> + return o;
> + }
> + return NULL;
> +}
> +
> #define OFFSET(x) offsetof(AVCodecContext,x)
> #define DEFAULT 0 //should be NAN but it does not work as it is not a
> constant in glibc as required by ANSI/ISO C
> //these names are too long to be readable
> @@ -457,7 +476,7 @@ static const AVOption options[]={
> #undef D
> #undef DEFAULT
>
> -static const AVClass av_codec_context_class = { "AVCodecContext",
> context_to_name, options, LIBAVUTIL_VERSION_INT, OFFSET(log_level_offset) };
> +static const AVClass av_codec_context_class = { "AVCodecContext",
> context_to_name, options, LIBAVUTIL_VERSION_INT, OFFSET(log_level_offset),
> .opt_find = opt_find};
>
> void avcodec_get_context_defaults2(AVCodecContext *s, enum AVMediaType
> codec_type){
> int flags=0;
looks good. and we need to get this into 0.7. The bug it fixes is very
important.
-Justin
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel