[vlc-devel] Re: On configuration callback paradigm
Gildas Bazin
gbazin at netcourrier.com
Sat Jul 26 20:47:13 CEST 2003
On Saturday 26 July 2003 18:01, rocky at panix.com wrote:
> In adding a dynamically changable configuration variable for a
> revised VCD input plugin, I came across the following awkwardness.
>
> I scanned the vlc source for a use of a callback on
> add_{integer,string} and couldn't find a single place where this was
> anything other than NULL. (This made me wonder...)
>
...
>
> The wierdness is having the callback routine retrieve the new value
> that was just set and store that into the right associated structure
> in the input thread. At first I naively thought that I could get this
> via the vlc_object_t pointer would be passed in the callback. Alas,
> vlc object is the "interface" rather than the VCD
> "input".
Ok, it's true that the callback mechanism should/could be modified to pass
the new value.
But let's do a bit of briefing on how the configuration variables work in
VLC.
First there's not really only one type of configuration variables. There are
actually 2, the ones I call "configuration variables" and the others
"object variables".
- Configuration variables: these variables basically reflect the state of
VLC's configuration file. These are used to store global settings (session
wide settings). If you use a "vcd-debug" config variable for instance,
every time a vcd input is started, it will use the value in there. If you
modify this value during run time (through the preferences panel or with
config_PutFoo() in your vcd input) then you modify the global state and the
next vcd inputs that will be started will use this new value. This is not
always the expected behaviour.
- Object variables (api defined in include/variables.h and implementation in
src/misc/variables.c): these variables are local to a vlc object (I suppose
you noticed that vlc is using a kind of object architecture). If you modify
them, they will only affect their owning object (for instance in your case,
the current vcd input).
These variables are much more powerful and are now the prefered way to
retreive a variable value (config or object). They implement callbacks the
way you want it, they are efficient speed wise, they implement inheritance
which allows you to retreive the value of the same variable (well, same
variable name) in a parent object or if none exist, from the corresponding
config variable. There are also some other nifty things.
Object variables are now also used extensively in the interfaces menus
because they allow to have generic code (knowing only how to deal with
object variables) to generate menus. For instance the "title" and "chapter"
variables are used to generate menus in the wxWindows and MacOSX
interfaces. (BTW you should really try the wxWindows interface for VLC
which implements all these things. The GTK interface is not maintained
anymore... well nobody seems to care about it anyway).
So rule of thumb is:
Configuration variables should only be used to store global settings
(session wide settings) and should only be modified by the preferences
panel of the interfaces. When you modify a setting in the preferences
panel, currently running objects are also not required to update their
status.
Object variables should be used if you want the user to modify a variable at
run time like fullscreen switching etc...
Usually you will still want to create a configuration variable but you will
not access it directly (with config_Get/Put), instead you will use object
variables with inheritance to get a default value for your variable.
Also note that with the current cvs version of VLC, you can use MRLs (Media
Resource Locators) that include options that will be used for the specific
input described in the MRL.
For instance ./vlc --no-video file1.mpg file2.mpeg :video
The first MRL is "file1.mpg" and will be played without video.
The second MRL is "file2.mpeg :video" and will be played with video. The
video option here overrides the global setting (--no-video).
You can also pass MRLs in the wxWindows interface so you can use this
facility as well.
>
> - - - -
>
> The VCD plugin is now at about a minimal stage where I think others
> might try it. However with the pending vlc 0.6.1 release, my thought
> is to wait for that release and make a patch on top of that.
>
Great, I'm looking forward to trying it.
--
Gildas
--
This is the vlc-devel mailing-list, see http://www.videolan.org/vlc/
To unsubscribe, please read http://developers.videolan.org/lists.html
If you are in trouble, please contact <postmaster at videolan.org>
More information about the vlc-devel
mailing list