diff options
Diffstat (limited to 'src/modules')
-rw-r--r-- | src/modules/alsa/alsa-sink.c | 2 | ||||
-rw-r--r-- | src/modules/alsa/alsa-source.c | 2 | ||||
-rw-r--r-- | src/modules/alsa/alsa-util.c | 13 | ||||
-rw-r--r-- | src/modules/alsa/alsa-util.h | 2 | ||||
-rw-r--r-- | src/modules/alsa/module-alsa-sink.c | 4 | ||||
-rw-r--r-- | src/modules/alsa/module-alsa-source.c | 4 |
6 files changed, 19 insertions, 8 deletions
diff --git a/src/modules/alsa/alsa-sink.c b/src/modules/alsa/alsa-sink.c index 0296f64e..0dc0e2b3 100644 --- a/src/modules/alsa/alsa-sink.c +++ b/src/modules/alsa/alsa-sink.c @@ -1644,7 +1644,7 @@ pa_sink *pa_alsa_sink_new(pa_module *m, pa_modargs *ma, const char*driver, pa_ca /* ALSA might tweak the sample spec, so recalculate the frame size */ frame_size = pa_frame_size(&ss); - pa_alsa_find_mixer_and_elem(u->pcm_handle, &u->mixer_handle, &u->mixer_elem); + pa_alsa_find_mixer_and_elem(u->pcm_handle, &u->mixer_handle, &u->mixer_elem, pa_modargs_get_value(ma, "control", NULL)); pa_sink_new_data_init(&data); data.driver = driver; diff --git a/src/modules/alsa/alsa-source.c b/src/modules/alsa/alsa-source.c index ef365a21..348cd082 100644 --- a/src/modules/alsa/alsa-source.c +++ b/src/modules/alsa/alsa-source.c @@ -1496,7 +1496,7 @@ pa_source *pa_alsa_source_new(pa_module *m, pa_modargs *ma, const char*driver, p /* ALSA might tweak the sample spec, so recalculate the frame size */ frame_size = pa_frame_size(&ss); - pa_alsa_find_mixer_and_elem(u->pcm_handle, &u->mixer_handle, &u->mixer_elem); + pa_alsa_find_mixer_and_elem(u->pcm_handle, &u->mixer_handle, &u->mixer_elem, pa_modargs_get_value(ma, "control", NULL)); pa_source_new_data_init(&data); data.driver = driver; diff --git a/src/modules/alsa/alsa-util.c b/src/modules/alsa/alsa-util.c index 2d0ca107..5b5270b8 100644 --- a/src/modules/alsa/alsa-util.c +++ b/src/modules/alsa/alsa-util.c @@ -1094,7 +1094,8 @@ success: int pa_alsa_find_mixer_and_elem( snd_pcm_t *pcm, snd_mixer_t **_m, - snd_mixer_elem_t **_e) { + snd_mixer_elem_t **_e, + const char *control_name) { int err; snd_mixer_t *m; @@ -1146,11 +1147,17 @@ int pa_alsa_find_mixer_and_elem( switch (snd_pcm_stream(pcm)) { case SND_PCM_STREAM_PLAYBACK: - e = pa_alsa_find_elem(m, "Master", "PCM", TRUE); + if (control_name) + e = pa_alsa_find_elem(m, control_name, NULL, TRUE); + else + e = pa_alsa_find_elem(m, "Master", "PCM", TRUE); break; case SND_PCM_STREAM_CAPTURE: - e = pa_alsa_find_elem(m, "Capture", "Mic", FALSE); + if (control_name) + e = pa_alsa_find_elem(m, control_name, NULL, FALSE); + else + e = pa_alsa_find_elem(m, "Capture", "Mic", FALSE); break; default: diff --git a/src/modules/alsa/alsa-util.h b/src/modules/alsa/alsa-util.h index 68496d51..5cad2958 100644 --- a/src/modules/alsa/alsa-util.h +++ b/src/modules/alsa/alsa-util.h @@ -54,7 +54,7 @@ int pa_alsa_set_sw_params(snd_pcm_t *pcm, snd_pcm_uframes_t avail_min); int pa_alsa_prepare_mixer(snd_mixer_t *mixer, const char *dev); snd_mixer_elem_t *pa_alsa_find_elem(snd_mixer_t *mixer, const char *name, const char *fallback, pa_bool_t playback); -int pa_alsa_find_mixer_and_elem(snd_pcm_t *pcm, snd_mixer_t **_m, snd_mixer_elem_t **_e); +int pa_alsa_find_mixer_and_elem(snd_pcm_t *pcm, snd_mixer_t **_m, snd_mixer_elem_t **_e, const char *control_name); typedef struct pa_alsa_profile_info { pa_channel_map map; diff --git a/src/modules/alsa/module-alsa-sink.c b/src/modules/alsa/module-alsa-sink.c index c728a446..8e600ab8 100644 --- a/src/modules/alsa/module-alsa-sink.c +++ b/src/modules/alsa/module-alsa-sink.c @@ -52,7 +52,8 @@ PA_MODULE_USAGE( "tsched=<enable system timer based scheduling mode?> " "tsched_buffer_size=<buffer size when using timer based scheduling> " "tsched_buffer_watermark=<lower fill watermark> " - "ignore_dB=<ignore dB information from the device?>"); + "ignore_dB=<ignore dB information from the device?> " + "control=<name of mixer control>"); static const char* const valid_modargs[] = { "name", @@ -70,6 +71,7 @@ static const char* const valid_modargs[] = { "tsched_buffer_size", "tsched_buffer_watermark", "ignore_dB", + "control", NULL }; diff --git a/src/modules/alsa/module-alsa-source.c b/src/modules/alsa/module-alsa-source.c index 6188019f..e6b27b3d 100644 --- a/src/modules/alsa/module-alsa-source.c +++ b/src/modules/alsa/module-alsa-source.c @@ -76,7 +76,8 @@ PA_MODULE_USAGE( "tsched=<enable system timer based scheduling mode?> " "tsched_buffer_size=<buffer size when using timer based scheduling> " "tsched_buffer_watermark=<upper fill watermark> " - "ignore_dB=<ignore dB information from the device?>"); + "ignore_dB=<ignore dB information from the device?> " + "control=<name of mixer control>"); static const char* const valid_modargs[] = { "name", @@ -94,6 +95,7 @@ static const char* const valid_modargs[] = { "tsched_buffer_size", "tsched_buffer_watermark", "ignore_dB", + "control", NULL }; |