On 10/07/2013 05:39 PM, Arun Raghavan wrote: > Thie code was incorrect as it stood, but more importantly, we don't > support a separate PCM for devices conceptually (since devices are > mapped to ports). Well, one could imagine that changing port/device would require all PCMs to be closed, at least in an ASoC world. As such, switching ports could very well affect PCMs too, I suspect. And, you still insert the sink into the device's proplist, which is inconsistent with your reasoning that devices map to ports/mixer settings, rather than PCMs? > --- > src/modules/alsa/alsa-ucm.c | 30 ++++++++++++------------------ > src/modules/alsa/alsa-ucm.h | 4 ++-- > 2 files changed, 14 insertions(+), 20 deletions(-) > > diff --git a/src/modules/alsa/alsa-ucm.c b/src/modules/alsa/alsa-ucm.c > index 822f760..a451c88 100644 > --- a/src/modules/alsa/alsa-ucm.c > +++ b/src/modules/alsa/alsa-ucm.c > @@ -220,15 +220,12 @@ static int ucm_get_device_property( > pa_log("UCM playback channels %s for device %s out of range", value, device_name); > > /* get pcm */ > - value = pa_proplist_gets(device->proplist, PA_ALSA_PROP_UCM_SINK); > - if (!value) { /* take pcm from verb playback default */ > - value = pa_proplist_gets(verb->proplist, PA_ALSA_PROP_UCM_SINK); > - if (value) { > - pa_log_debug("UCM playback device %s fetch pcm from verb default %s", device_name, value); > - pa_proplist_sets(device->proplist, PA_ALSA_PROP_UCM_SINK, value); > - } else > - pa_log("UCM playback device %s fetch pcm failed", device_name); > - } > + value = pa_proplist_gets(verb->proplist, PA_ALSA_PROP_UCM_SINK); > + if (value) { > + pa_log_debug("UCM playback device %s fetch pcm from verb default %s", device_name, value); > + pa_proplist_sets(device->proplist, PA_ALSA_PROP_UCM_SINK, value); > + } else > + pa_log("UCM playback device %s fetch pcm failed", device_name); > } > > value = pa_proplist_gets(device->proplist, PA_ALSA_PROP_UCM_CAPTURE_CHANNELS); > @@ -240,15 +237,12 @@ static int ucm_get_device_property( > pa_log("UCM capture channels %s for device %s out of range", value, device_name); > > /* get pcm */ > - value = pa_proplist_gets(device->proplist, PA_ALSA_PROP_UCM_SOURCE); > - if (!value) { /* take pcm from verb capture default */ > - value = pa_proplist_gets(verb->proplist, PA_ALSA_PROP_UCM_SOURCE); > - if (value) { > - pa_log_debug("UCM capture device %s fetch pcm from verb default %s", device_name, value); > - pa_proplist_sets(device->proplist, PA_ALSA_PROP_UCM_SOURCE, value); > - } else > - pa_log("UCM capture device %s fetch pcm failed", device_name); > - } > + value = pa_proplist_gets(verb->proplist, PA_ALSA_PROP_UCM_SOURCE); > + if (value) { > + pa_log_debug("UCM capture device %s fetch pcm from verb default %s", device_name, value); > + pa_proplist_sets(device->proplist, PA_ALSA_PROP_UCM_SOURCE, value); > + } else > + pa_log("UCM capture device %s fetch pcm failed", device_name); > } > > if (device->playback_channels == 0 && device->capture_channels == 0) { > diff --git a/src/modules/alsa/alsa-ucm.h b/src/modules/alsa/alsa-ucm.h > index 36a491f..bae6b72 100644 > --- a/src/modules/alsa/alsa-ucm.h > +++ b/src/modules/alsa/alsa-ucm.h > @@ -38,10 +38,10 @@ typedef void snd_use_case_mgr_t; > /** For devices: List of supported devices per verb*/ > #define PA_ALSA_PROP_UCM_DESCRIPTION "alsa.ucm.description" > > -/** For devices: Playback device name e.g PlaybackPCM */ > +/** For verbs/modifiers: Playback device name e.g PlaybackPCM */ > #define PA_ALSA_PROP_UCM_SINK "alsa.ucm.sink" > > -/** For devices: Capture device name e.g CapturePCM*/ > +/** For verbs/modifiers: Capture device name e.g CapturePCM */ > #define PA_ALSA_PROP_UCM_SOURCE "alsa.ucm.source" > > /** For devices: Playback roles */ > -- David Henningsson, Canonical Ltd. https://launchpad.net/~diwic