[alsa-devel] [PATCH] ascenario: Add scenario support to alsa-lib
Takashi Iwai
tiwai at suse.de
Tue Oct 6 10:41:29 CEST 2009
At Tue, 6 Oct 2009 10:23:56 +0200 (CEST),
Jaroslav Kysela wrote:
>
> Hi,
>
> Some ideas, proposal for further discussion...
>
> On Mon, 5 Oct 2009, Stefan Schmidt wrote:
>
> > Hello.
> >
> > On Mon, 2009-10-05 at 11:14, Jaroslav Kysela wrote:
> >> On Mon, 5 Oct 2009, Stefan Schmidt wrote:
> >>
> >>> On Thu, 2009-10-01 at 17:08, Stefan Schmidt wrote:
> >>>>
> >>>> For an updated patch with all your comments inlcuded see below.
> >>>
> >>> Here is another update on this patch. Fixed a problem I introduced in the last
> >>> iteration and changed the config tokens from MasterPlaybackVolume to Master
> >>> Playback Volume, etc. That's based on a siggestion from Mark which we had
> >>> offlist. Let me quote it here to explain the good reasoning behind it.
> >>
> >> Question: What's the IDs (integers) returned with
> >> snd_scenario_get_master_playback_volume() etc. functions?
> >
> > That is part of the code Liam wrote, but let me answer it (and maybe
> > Liam chime in if it is wrong or needs more explanation).
> >
> > It's just the numid of an alsa control which should be used as master
> > playback, etc in this scenario. It aliases the function we can use with
> > ascenario to the real ones in alsa which can bedifferent for different
> > scenarios.
>
> It's not very clear. The exported functions should be documented at least
> with doxygen.
>
> Also, I would move all _get_ functions to one with this interface:
>
> #define SND_SCENARIO_KEY_KCTL_MASTER_PLAYBACK_VOLUME 1
> .....
>
> int snd_scenario_get(scenario, int key, void *result);
>
> It will allow us to extend this interface without adding many functions in
> future, something like:
>
> #define SND_SCENARIO_KEY_PCM_PLAYBACK 11
> .....
I find it's good to have a generic interface, too, but a void pointer
is discouraging. It's too ambiguous and inconvenient when you use it
("What type do I have to pass for SND_SCENARIO_XXX on earth???").
OTOH, union is also no good about type-binding and even less
extensibility...
> Also, using numid's is not much ideal if something changes in the driver.
> I would prefer to use standard ctl IDs (string, index, interface -
> result should be snd_ctl_elem_id_t).
Agreed.
> >> Please, include also some test configuration files to review the
> >> configurationsyntax.
> >
> > Attached. default.conf is the main configuration file located at
> > /etc/alsa/scenario/default.conf
>
> Again, I would make configuration syntax compatible with other alsa-lib
> configuration files. The changes in the configuration files will be small
> and it will allow us to rewrite the code using parsers in alsa-lib.
>
> Something like:
>
> default.conf:
>
> scenario."playback speaker" {
> file playback_spk
> qos HIFI
> "Master Playback Volume" 8
> # should be rather something like:
> kcontrol.'Master Playback Volume' "'Master Playback Volume':33"
> # or a short form might be implemented (:33 is ctl_id index, ctl_id.name
> # would be copied from the variable key name):
> kcontrol.'Master Playback Volume' ":33"
> ...
> }
>
> scenario."playback headphones" {
> ...
> }
>
> About "playback_hs_*" files. It seems that the purpose of files is quite
> similar. I don't understand the reason to have 2 different descriptions.
I personally have no particular preference regarding the configuration
syntax between these two, but...
> Also, I would like to consider moving the parser from alsactl
> initialization code (see alsactl_init.c in alsa-utils package) to alsa-lib
> and use this parser also for these files. It gives much flexibility,
> although udev-like syntax is not ideal, I know.
Not ideal, it's awful :) So please don't spread it over...
Takashi
More information about the Alsa-devel
mailing list