On 05/22/2011 01:00 PM, Martin Storsjö wrote:
> On Sun, 22 May 2011, Justin Ruggles wrote:
>
>> On 05/20/2011 07:59 AM, Martin Storsjö wrote:
>>
>>> ---
>>> libavutil/opt.c | 3 ++-
>>> 1 files changed, 2 insertions(+), 1 deletions(-)
>>>
>>> diff --git a/libavutil/opt.c b/libavutil/opt.c
>>> index 57e3248..9ff0a9a 100644
>>> --- a/libavutil/opt.c
>>> +++ b/libavutil/opt.c
>>> @@ -262,7 +262,7 @@ static int av_get_number(void *obj, const char *name,
>>> const AVOption **o_out, do
>>> {
>>> const AVOption *o= av_find_opt(obj, name, NULL, 0, 0);
>>> void *dst;
>>> - if (!o || o->offset<=0)
>>> + if (!o || (o->offset<=0 && o->type != FF_OPT_TYPE_CONST))
>>> goto error;
>>>
>>> dst= ((uint8_t*)obj) + o->offset;
>>> @@ -278,6 +278,7 @@ static int av_get_number(void *obj, const char *name,
>>> const AVOption **o_out, do
>>> case FF_OPT_TYPE_RATIONAL: *intnum= ((AVRational*)dst)->num;
>>> *den = ((AVRational*)dst)->den;
>>> return 0;
>>> + case FF_OPT_TYPE_CONST: *intnum= o->default_val.dbl;return 0;
>>> }
>>> error:
>>> *den=*intnum=0;
>>
>>
>> Does this fix something? If not, does it make some user-level task easier?
>
> It makes it possible to check whether a particular flag is set, without
> knowing the exact value of the flag (which after this patch could be
> queried with this function). You can set such flags with e.g.
> av_set_string3(ctx, "flags", "flag1+flag2") - but given ctx, you can't
> query for what constant "flag1" corresponds to, making it impossible to
> opaquely inspect whether that flag is set in the flags field.
That makes sense.
One thing I'm worried about is duplicate names. The constant options
don't have to be unique. See "auto" in the libavcodec options for
example. The av_find_opt() call in av_get_number() doesn't specify the
unit parameter, which would distinguish between duplicate names.
-Justin
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel