[MPlayer-G2-dev] About final cfg.h (config layer 0 discussion)

Arpi arpi at thot.banki.hu
Sun May 25 14:19:12 CEST 2003


Hi,

> 1. Why did you dropped CONF_TYPE_SUBCONFIG ? I've just noticed that. It's
>   because all such options are modules parameters and you want to parse
>   they by different way?

yes
there is CONF_TYPE_MODLIST now
it handles -option module1[=[paramname=]param1:param2...][,module2=...]...
format options (like -vf, -vo, -ao etc).
the 'priv' field of the config_t entry points to a function which retrieve
module_info_t* for a named module (ro NULL if it doesn't exists).
the result (config_t->p) is stored in a config_modlist_t array, which
contains module_info_t* and config_data_t* for each entry.

see -vf in pre29. pretty clear and simple!

anyway there is subconfig parser func in layer-1, used by CONF_TYPE_MODLIST
parser too. so adding subconfig support is just a few lines, but until we
find a good reason for it i don't add.

imho we should keep g2's commandline syntax as consistent and logical as
possible, it also means avoid subconfigs.
as you (and others) said, subconfig in g1 was to pass module-specific stuff.
since it's now handled in clean way (MODLIST, MODULE types) it has no use.

> 2. Do you still have something to argue about CONF_TYPE_LIST option type?

isn't my CONF_TYPE_SELECT the same?

> 3. Will we change CONF_NOGUI to CONF_NOUI ?

i like Rich's answer - UIs producing visual option lists are considered
GUIs, even if they are actually CUI :)

> 4. Let's change unsigned short type, version to unsigned short version,
>   type in module_info_t definition to have compatibility forever. :)

no
i'm thinking about add type-specific versions
so if we change vf API we don't have to force demuxer, stream, vo etc plugin
authors/users to recompile their plugins just to get version number bumped.

>     Discussion about CONF_TYPE_GROUP isn't my concern right now since
> that option is application level only and it's marked as TODO anyway. :)

actually i've added CONF_TYPE_MODULE which does the same as you expected
from CONF_TYPE_GROUP.

>     Also about how to apply new config level 0 to video filters (and to
> all other in the future, of course). We have to describe how parameters
> will be passed to modules. So:
> 
> 1. vf_open_filter(), vf_open_encoder(), and vf_insert_filter() functions
>   have to get not char *args but void *args and that void * have to be
>   preallocated array with parsed parameters (see module info);

of course, it's already changed (see pre29)

> 2. we have to introduce VFCTRL_GET_PARAMS and VFCTRL_SET_PARAMS requests

yes, it's a TODO

>   for vf->control(). These requests will have void *data as parameters
>   array, preallocated by caller: for VFCTRL_GET_PARAMS it's array with
>   undefined values and filter has to set all changeable parameters there;
>   VFCTRL_SET_PARAMS will ask the filter to apply changed parameters to
>   the instance. Size of that array defined by config_size in module info.

imho VFCTRL_GET_PARAMS is useless.
config_data_t* (the struct containing the preallocated config vars)
is part of the instance structs (vf_instance_t), and is used by the filter
to keep the config data. (ie it's free()'d only at filter uninit).

it's always readable by upper layer (so VFCTRL_GET_PARAMS is useless), but
we should add VFCTRL_SET_PARAMS (or better name) to notify filter about
config changes made by UI. i'm not completely sure about this one yet.
(runtime config change is always a mess...)

>     It must be documented before we have all filters/encoders ported from
> G1 since it'll be huge headache after that. ;)

yes

and we (i) should migrate the already ported modules first, so we can test
(and find errors in) new config layer, and give some nice examples for
porters.

>     For example, I want to port vf_dint.c to G2 but I still cannot until
> we decide all above and I wait for it...
> 
>     BTW, we have in VF API functions for inserting filter into begin of
> chain and to somewhere inside chain but how about adding filter at the
> end of chain? May be better is something like:
> 
> vf_instance_t* vf_insert_filter(vf_instance_t *last, vf_instance_t *next,
> char *name, void *args);
> 
> which will insert filter between instances last and next, and so if
> last==NULL then we'll insert filter at begin of chain (as vf_open_filter
> does) and if next==NULL then we'll add filter at end of chain. I think

no
but i'l mayeb rename functions to insert_above and insert_below instead of
append and insert.

> it's the best way to do it. BTW, with new layer 0 concept it may be more
> correct if we will use module_info_t* instead of char *name.

of course. see pre29...

A'rpi / Astral & ESP-team

--
Developer of MPlayer G2, the Movie Framework for all - http://www.MPlayerHQ.hu



More information about the MPlayer-G2-dev mailing list