add new paramter ignore_dB= to alsa modules

This commit is contained in:
Lennart Poettering 2009-01-27 17:55:50 +01:00
parent d5f46e824e
commit 0ca16caff7
5 changed files with 25 additions and 9 deletions

View file

@ -1236,7 +1236,7 @@ pa_sink *pa_alsa_sink_new(pa_module *m, pa_modargs *ma, const char*driver, pa_ca
size_t frame_size; size_t frame_size;
snd_pcm_info_t *pcm_info = NULL; snd_pcm_info_t *pcm_info = NULL;
int err; int err;
pa_bool_t use_mmap = TRUE, b, use_tsched = TRUE, d; pa_bool_t use_mmap = TRUE, b, use_tsched = TRUE, d, ignore_dB = FALSE;
pa_usec_t usec; pa_usec_t usec;
pa_sink_new_data data; pa_sink_new_data data;
@ -1282,6 +1282,11 @@ pa_sink *pa_alsa_sink_new(pa_module *m, pa_modargs *ma, const char*driver, pa_ca
goto fail; goto fail;
} }
if (pa_modargs_get_value_boolean(ma, "ignore_dB", &ignore_dB) < 0) {
pa_log("Failed to parse ignore_dB argument.");
goto fail;
}
if (use_tsched && !pa_rtclock_hrtimer()) { if (use_tsched && !pa_rtclock_hrtimer()) {
pa_log_notice("Disabling timer-based scheduling because high-resolution timers are not available from the kernel."); pa_log_notice("Disabling timer-based scheduling because high-resolution timers are not available from the kernel.");
use_tsched = FALSE; use_tsched = FALSE;
@ -1503,8 +1508,8 @@ pa_sink *pa_alsa_sink_new(pa_module *m, pa_modargs *ma, const char*driver, pa_ca
} }
if (suitable) { if (suitable) {
if (snd_mixer_selem_get_playback_dB_range(u->mixer_elem, &u->hw_dB_min, &u->hw_dB_max) < 0) if (ignore_dB || snd_mixer_selem_get_playback_dB_range(u->mixer_elem, &u->hw_dB_min, &u->hw_dB_max) < 0)
pa_log_info("Mixer doesn't support dB information."); pa_log_info("Mixer doesn't support dB information or data is ignored.");
else { else {
#ifdef HAVE_VALGRIND_MEMCHECK_H #ifdef HAVE_VALGRIND_MEMCHECK_H
VALGRIND_MAKE_MEM_DEFINED(&u->hw_dB_min, sizeof(u->hw_dB_min)); VALGRIND_MAKE_MEM_DEFINED(&u->hw_dB_min, sizeof(u->hw_dB_min));

View file

@ -1072,7 +1072,7 @@ pa_source *pa_alsa_source_new(pa_module *m, pa_modargs *ma, const char*driver, p
size_t frame_size; size_t frame_size;
snd_pcm_info_t *pcm_info = NULL; snd_pcm_info_t *pcm_info = NULL;
int err; int err;
pa_bool_t use_mmap = TRUE, b, use_tsched = TRUE, d; pa_bool_t use_mmap = TRUE, b, use_tsched = TRUE, d, ignore_dB = FALSE;
pa_source_new_data data; pa_source_new_data data;
snd_pcm_info_alloca(&pcm_info); snd_pcm_info_alloca(&pcm_info);
@ -1116,6 +1116,11 @@ pa_source *pa_alsa_source_new(pa_module *m, pa_modargs *ma, const char*driver, p
goto fail; goto fail;
} }
if (pa_modargs_get_value_boolean(ma, "ignore_dB", &ignore_dB) < 0) {
pa_log("Failed to parse ignore_dB argument.");
goto fail;
}
if (use_tsched && !pa_rtclock_hrtimer()) { if (use_tsched && !pa_rtclock_hrtimer()) {
pa_log_notice("Disabling timer-based scheduling because high-resolution timers are not available from the kernel."); pa_log_notice("Disabling timer-based scheduling because high-resolution timers are not available from the kernel.");
use_tsched = FALSE; use_tsched = FALSE;
@ -1324,8 +1329,8 @@ pa_source *pa_alsa_source_new(pa_module *m, pa_modargs *ma, const char*driver, p
} }
if (suitable) { if (suitable) {
if (snd_mixer_selem_get_capture_dB_range(u->mixer_elem, &u->hw_dB_min, &u->hw_dB_max) < 0) if (ignore_dB || snd_mixer_selem_get_capture_dB_range(u->mixer_elem, &u->hw_dB_min, &u->hw_dB_max) < 0)
pa_log_info("Mixer doesn't support dB information."); pa_log_info("Mixer doesn't support dB information or data is ignored.");
else { else {
#ifdef HAVE_VALGRIND_MEMCHECK_H #ifdef HAVE_VALGRIND_MEMCHECK_H
VALGRIND_MAKE_MEM_DEFINED(&u->hw_dB_min, sizeof(u->hw_dB_min)); VALGRIND_MAKE_MEM_DEFINED(&u->hw_dB_min, sizeof(u->hw_dB_min));

View file

@ -51,7 +51,8 @@ PA_MODULE_USAGE(
"tsched=<enable system timer based scheduling mode?> " "tsched=<enable system timer based scheduling mode?> "
"tsched_buffer_size=<buffer size when using timer based scheduling> " "tsched_buffer_size=<buffer size when using timer based scheduling> "
"tsched_buffer_watermark=<lower fill watermark> " "tsched_buffer_watermark=<lower fill watermark> "
"profile=<profile name>"); "profile=<profile name> "
"ignore_dB=<ignore dB information from the device?>");
static const char* const valid_modargs[] = { static const char* const valid_modargs[] = {
"name", "name",
@ -68,6 +69,7 @@ static const char* const valid_modargs[] = {
"tsched_buffer_size", "tsched_buffer_size",
"tsched_buffer_watermark", "tsched_buffer_watermark",
"profile", "profile",
"ignore_dB",
NULL NULL
}; };

View file

@ -51,7 +51,8 @@ PA_MODULE_USAGE(
"mmap=<enable memory mapping?> " "mmap=<enable memory mapping?> "
"tsched=<enable system timer based scheduling mode?> " "tsched=<enable system timer based scheduling mode?> "
"tsched_buffer_size=<buffer size when using timer based scheduling> " "tsched_buffer_size=<buffer size when using timer based scheduling> "
"tsched_buffer_watermark=<lower fill watermark>"); "tsched_buffer_watermark=<lower fill watermark> "
"ignore_dB=<ignore dB information from the device?>");
static const char* const valid_modargs[] = { static const char* const valid_modargs[] = {
"name", "name",
@ -68,6 +69,7 @@ static const char* const valid_modargs[] = {
"tsched", "tsched",
"tsched_buffer_size", "tsched_buffer_size",
"tsched_buffer_watermark", "tsched_buffer_watermark",
"ignore_dB",
NULL NULL
}; };

View file

@ -75,7 +75,8 @@ PA_MODULE_USAGE(
"mmap=<enable memory mapping?> " "mmap=<enable memory mapping?> "
"tsched=<enable system timer based scheduling mode?> " "tsched=<enable system timer based scheduling mode?> "
"tsched_buffer_size=<buffer size when using timer based scheduling> " "tsched_buffer_size=<buffer size when using timer based scheduling> "
"tsched_buffer_watermark=<upper fill watermark>"); "tsched_buffer_watermark=<upper fill watermark> "
"ignore_dB=<ignore dB information from the device?>");
static const char* const valid_modargs[] = { static const char* const valid_modargs[] = {
"name", "name",
@ -92,6 +93,7 @@ static const char* const valid_modargs[] = {
"tsched", "tsched",
"tsched_buffer_size", "tsched_buffer_size",
"tsched_buffer_watermark", "tsched_buffer_watermark",
"ignore_dB",
NULL NULL
}; };