[pulseaudio-discuss] [PATCH 1/2] alsa: Allow sample spec override in mappings
Tanu Kaskinen
tanu.kaskinen at linux.intel.com
Wed Aug 7 23:19:00 PDT 2013
On Wed, 2013-08-07 at 23:26 +0530, Arun Raghavan wrote:
> This allows mappings to override some or all of the sample_spec used to
> open the ALSA device. The intention, to start with, is to use this for
> devices in UCM that need to be opened at a specific rate (like modem
> devices). This can be extended to allow overrides in profile-sets as
> well.
> ---
> src/modules/alsa/alsa-mixer.c | 1 +
> src/modules/alsa/alsa-mixer.h | 1 +
> src/modules/alsa/alsa-sink.c | 11 +++++++++++
> src/modules/alsa/alsa-source.c | 11 +++++++++++
> 4 files changed, 24 insertions(+)
>
> diff --git a/src/modules/alsa/alsa-mixer.c b/src/modules/alsa/alsa-mixer.c
> index fe5b7b1..07c0e5d 100644
> --- a/src/modules/alsa/alsa-mixer.c
> +++ b/src/modules/alsa/alsa-mixer.c
> @@ -3368,6 +3368,7 @@ pa_alsa_mapping *pa_alsa_mapping_get(pa_alsa_profile_set *ps, const char *name)
> m = pa_xnew0(pa_alsa_mapping, 1);
> m->profile_set = ps;
> m->name = pa_xstrdup(name);
> + pa_sample_spec_init(&m->sample_spec);
> pa_channel_map_init(&m->channel_map);
> m->proplist = pa_proplist_new();
>
> diff --git a/src/modules/alsa/alsa-mixer.h b/src/modules/alsa/alsa-mixer.h
> index 432e4de..995a34b 100644
> --- a/src/modules/alsa/alsa-mixer.h
> +++ b/src/modules/alsa/alsa-mixer.h
> @@ -251,6 +251,7 @@ struct pa_alsa_mapping {
> /* These are copied over to the resultant sink/source */
> pa_proplist *proplist;
>
> + pa_sample_spec sample_spec;
> pa_channel_map channel_map;
>
> char **device_strings;
> diff --git a/src/modules/alsa/alsa-sink.c b/src/modules/alsa/alsa-sink.c
> index f910d19..261536a 100644
> --- a/src/modules/alsa/alsa-sink.c
> +++ b/src/modules/alsa/alsa-sink.c
> @@ -2035,6 +2035,17 @@ pa_sink *pa_alsa_sink_new(pa_module *m, pa_modargs *ma, const char*driver, pa_ca
> goto fail;
> }
>
> + /* Pick sample spec overrides from the mapping, if any */
> + if (mapping->sample_spec.format != PA_SAMPLE_INVALID)
> + ss.format = mapping->sample_spec.format;
> + if (mapping->sample_spec.rate != 0)
> + ss.rate = mapping->sample_spec.rate;
> + if (mapping->sample_spec.channels != 0) {
> + ss.channels = mapping->sample_spec.channels;
> + if (pa_channel_map_valid(&mapping->channel_map))
> + pa_assert(pa_channel_map_compatible(&mapping->channel_map, &ss));
> + }
I think module arguments should override the values from the mapping.
--
Tanu
More information about the pulseaudio-discuss
mailing list