[FFmpeg-devel] [PATCH 1/6] avutil/opt: add AV_OPT_FLAG_CHILD_CONSTS

Marton Balint cus at passwd.hu
Tue May 12 20:34:00 EEST 2020



On Tue, 12 May 2020, Michael Niedermayer wrote:

> On Mon, May 11, 2020 at 09:35:17PM +0200, Marton Balint wrote:
>> This will be used for AVCodecContext->profile. By specifying constants in the
>> encoders we won't have to use the common AVCodecContext options table and
>> different encoders can use the same profile name even with different values.
>>
>> Signed-off-by: Marton Balint <cus at passwd.hu>
>> ---
>>  doc/APIchanges      | 3 +++
>>  libavutil/opt.c     | 3 ++-
>>  libavutil/opt.h     | 1 +
>>  libavutil/version.h | 2 +-
>>  4 files changed, 7 insertions(+), 2 deletions(-)
>>
>> diff --git a/doc/APIchanges b/doc/APIchanges
>> index 75cfdb08b0..235888c174 100644
>> --- a/doc/APIchanges
>> +++ b/doc/APIchanges
>> @@ -15,6 +15,9 @@ libavutil:     2017-10-21
>>
>>  API changes, most recent first:
>>
>> +2020-05-xx - xxxxxxxxxx - lavu 56.44.101 - opt.h
>> +  Add AV_OPT_FLAG_CHILD_CONSTS.
>> +
>>  2020-05-10 - xxxxxxxxxx - lavu 56.44.100 - hwcontext_vulkan.h
>>    Add enabled_inst_extensions, num_enabled_inst_extensions, enabled_dev_extensions
>>    and num_enabled_dev_extensions fields to AVVulkanDeviceContext
>> diff --git a/libavutil/opt.c b/libavutil/opt.c
>> index b792dec01c..423313bce2 100644
>> --- a/libavutil/opt.c
>> +++ b/libavutil/opt.c
>> @@ -256,11 +256,12 @@ static int set_string_number(void *obj, void *target_obj, const AVOption *o, con
>>          }
>>
>>          {
>> -            const AVOption *o_named = av_opt_find(target_obj, i ? buf : val, o->unit, 0, 0);
>>              int res;
>>              int ci = 0;
>>              double const_values[64];
>>              const char * const_names[64];
>> +            int search_flags = (o->flags & AV_OPT_FLAG_CHILD_CONSTS) ? AV_OPT_SEARCH_CHILDREN : 0;
>> +            const AVOption *o_named = av_opt_find(target_obj, i ? buf : val, o->unit, 0, search_flags);
>>              if (o_named && o_named->type == AV_OPT_TYPE_CONST)
>>                  d = DEFAULT_NUMVAL(o_named);
>>              else {
>> diff --git a/libavutil/opt.h b/libavutil/opt.h
>> index 1969c984dd..e46119572a 100644
>> --- a/libavutil/opt.h
>> +++ b/libavutil/opt.h
>> @@ -291,6 +291,7 @@ typedef struct AVOption {
>>  #define AV_OPT_FLAG_RUNTIME_PARAM   (1<<15) ///< a generic parameter which can be set by the user at runtime
>>  #define AV_OPT_FLAG_FILTERING_PARAM (1<<16) ///< a generic parameter which can be set by the user for filtering
>>  #define AV_OPT_FLAG_DEPRECATED      (1<<17) ///< set if option is deprecated, users should refer to AVOption.help text for more information
>
>> +#define AV_OPT_FLAG_CHILD_CONSTS    (1<<18) ///< set if option constants can also reside in child objects
>
> why is this needed and not default ?

Because a child object can possibly use the same option name with 
different semantics or for a different purpose.

In order for this to not cause problems, the unit name used have to be 
somewhat unique, and AV_OPT_FLAG_CHILD_CONSTS should only be set for 
cases where it already is. That is why I change the unit name of 
AVCodecContext->profile to "avctx.profile" in a later patch.

Regards,
Marton

>
> thx
>
> [...]
> -- 
> Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
>
> Modern terrorism, a quick summary: Need oil, start war with country that
> has oil, kill hundread thousand in war. Let country fall into chaos,
> be surprised about raise of fundamantalists. Drop more bombs, kill more
> people, be surprised about them taking revenge and drop even more bombs
> and strip your own citizens of their rights and freedoms. to be continued
>


More information about the ffmpeg-devel mailing list