[pulseaudio-discuss] [PATCH 2/2] alsa-ucm: Use playback/capture rate specification from UCM

Tanu Kaskinen tanu.kaskinen at linux.intel.com
Wed Aug 7 23:41:40 PDT 2013


On Wed, 2013-08-07 at 23:26 +0530, Arun Raghavan wrote:
> Add new PlaybackRate/CaptureRate values for UCM that can be used to
> specify custom rates for devices. This value can either be set on the
> verb, which makes it apply to all devices, or on the device to override
> the verb setting.
> ---
>  src/modules/alsa/alsa-ucm.c | 29 +++++++++++++++++++++++++++--
>  src/modules/alsa/alsa-ucm.h |  9 +++++++++
>  2 files changed, 36 insertions(+), 2 deletions(-)
> 
> diff --git a/src/modules/alsa/alsa-ucm.c b/src/modules/alsa/alsa-ucm.c
> index 7f6b9f1..787dc9e 100644
> --- a/src/modules/alsa/alsa-ucm.c
> +++ b/src/modules/alsa/alsa-ucm.c
> @@ -84,10 +84,12 @@ static struct ucm_items item[] = {
>      {"PlaybackVolume", PA_ALSA_PROP_UCM_PLAYBACK_VOLUME},
>      {"PlaybackSwitch", PA_ALSA_PROP_UCM_PLAYBACK_SWITCH},
>      {"PlaybackPriority", PA_ALSA_PROP_UCM_PLAYBACK_PRIORITY},
> +    {"PlaybackRate", PA_ALSA_PROP_UCM_PLAYBACK_RATE},
>      {"PlaybackChannels", PA_ALSA_PROP_UCM_PLAYBACK_CHANNELS},
>      {"CaptureVolume", PA_ALSA_PROP_UCM_CAPTURE_VOLUME},
>      {"CaptureSwitch", PA_ALSA_PROP_UCM_CAPTURE_SWITCH},
>      {"CapturePriority", PA_ALSA_PROP_UCM_CAPTURE_PRIORITY},
> +    {"CaptureRate", PA_ALSA_PROP_UCM_CAPTURE_RATE},

Are these UCM Value items standardized?

>      {"CaptureChannels", PA_ALSA_PROP_UCM_CAPTURE_CHANNELS},
>      {"TQ", PA_ALSA_PROP_UCM_QOS},
>      {NULL, NULL},
> @@ -256,8 +258,18 @@ static int ucm_get_device_property(
>          device->capture_channels = 2;
>      }
>  
> -    /* get priority of device */
> +    /* get rate and priority of device */
>      if (device->playback_channels) { /* sink device */
> +        /* get rate */
> +        if ((value = pa_proplist_gets(device->proplist, PA_ALSA_PROP_UCM_PLAYBACK_RATE)) ||
> +            (value = pa_proplist_gets(verb->proplist, PA_ALSA_PROP_UCM_PLAYBACK_RATE))) {
> +            if (pa_atou(value, &ui) == 0 && ui < PA_RATE_MAX) {

I don't think 0 should be accepted as a valid rate.

> +                pa_log_debug("UCM playback device %s rate %d", device_name, ui);
> +                device->playback_rate = ui;
> +            } else
> +                pa_log_debug("UCM playback device %s has bad rate %s", device_name, value);
> +        }
> +
>          value = pa_proplist_gets(device->proplist, PA_ALSA_PROP_UCM_PLAYBACK_PRIORITY);
>          if (value) {
>              /* get priority from ucm config */
> @@ -269,6 +281,16 @@ static int ucm_get_device_property(
>      }
>  
>      if (device->capture_channels) { /* source device */
> +        /* get rate */
> +        if ((value = pa_proplist_gets(device->proplist, PA_ALSA_PROP_UCM_CAPTURE_RATE)) ||
> +            (value = pa_proplist_gets(verb->proplist, PA_ALSA_PROP_UCM_CAPTURE_RATE))) {
> +            if (pa_atou(value, &ui) == 0 && ui < PA_RATE_MAX) {
> +                pa_log_debug("UCM playback device %s rate %d", device_name, ui);

Copy-paste error here...

> +                device->capture_rate = ui;
> +            } else
> +                pa_log_debug("UCM playback device %s has bad rate %s", device_name, value);

...and here.

-- 
Tanu



More information about the pulseaudio-discuss mailing list