diff options
| -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  };  | 
