From cb88917543e23aa1a5365d131eac8ac6bcbfb975 Mon Sep 17 00:00:00 2001 From: Stephane Letz Date: Tue, 10 Jul 2012 06:52:15 +0200 Subject: [PATCH] alsa driver/adapter improvements to flexibly use playback/capture devices through dbus calls patch. --- linux/alsa/JackAlsaAdapter.cpp | 6 ++++++ linux/alsa/JackAlsaAdapter.h | 10 ++++++++-- linux/alsa/JackAlsaDriver.cpp | 10 ++++++---- 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/linux/alsa/JackAlsaAdapter.cpp b/linux/alsa/JackAlsaAdapter.cpp index a59a7ec3..25686c08 100644 --- a/linux/alsa/JackAlsaAdapter.cpp +++ b/linux/alsa/JackAlsaAdapter.cpp @@ -54,8 +54,14 @@ namespace Jack fPlaybackChannels = param->value.ui; break; case 'C': + if (strncmp(param->value.str,"none",4) != 0) { + fAudioInterface.fCaptureName = strdup ( param->value.str ); + } break; case 'P': + if (strncmp(param->value.str,"none",4) != 0) { + fAudioInterface.fPlaybackName = strdup ( param->value.str ); + } break; case 'D': break; diff --git a/linux/alsa/JackAlsaAdapter.h b/linux/alsa/JackAlsaAdapter.h index e0df9ba8..67733718 100644 --- a/linux/alsa/JackAlsaAdapter.h +++ b/linux/alsa/JackAlsaAdapter.h @@ -130,6 +130,8 @@ namespace Jack snd_pcm_access_t fSampleAccess; //channels + const char* fCaptureName; + const char* fPlaybackName; unsigned int fCardInputs; unsigned int fCardOutputs; @@ -182,6 +184,8 @@ namespace Jack fInputParams = 0; fOutputParams = 0; fPeriod = 2; + fCaptureName = NULL; + fPlaybackName = NULL; fInputCardBuffer = 0; fOutputCardBuffer = 0; @@ -200,6 +204,8 @@ namespace Jack { fInputCardBuffer = 0; fOutputCardBuffer = 0; + fCaptureName = NULL; + fPlaybackName = NULL; for ( int i = 0; i < 256; i++ ) { @@ -216,8 +222,8 @@ namespace Jack int open() { //open input/output streams - check_error ( snd_pcm_open ( &fInputDevice, fCardName, SND_PCM_STREAM_CAPTURE, 0 ) ); - check_error ( snd_pcm_open ( &fOutputDevice, fCardName, SND_PCM_STREAM_PLAYBACK, 0 ) ); + check_error ( snd_pcm_open ( &fInputDevice, (fCaptureName == NULL) ? fCardName : fCaptureName, SND_PCM_STREAM_CAPTURE, 0 ) ); + check_error ( snd_pcm_open ( &fOutputDevice, (fPlaybackName == NULL) ? fCardName : fPlaybackName, SND_PCM_STREAM_PLAYBACK, 0 ) ); //get hardware input parameters check_error ( snd_pcm_hw_params_malloc ( &fInputParams ) ); diff --git a/linux/alsa/JackAlsaDriver.cpp b/linux/alsa/JackAlsaDriver.cpp index 897594b9..c01e84e6 100644 --- a/linux/alsa/JackAlsaDriver.cpp +++ b/linux/alsa/JackAlsaDriver.cpp @@ -859,10 +859,12 @@ SERVER_EXPORT Jack::JackDriverClientInterface* driver_initialize(Jack::JackLocke break; case 'd': - playback_pcm_name = strdup (param->value.str); - capture_pcm_name = strdup (param->value.str); - jack_log("playback device %s", playback_pcm_name); - jack_log("capture device %s", capture_pcm_name); + if (strcmp (param->value.str, "none") != 0) { + playback_pcm_name = strdup (param->value.str); + capture_pcm_name = strdup (param->value.str); + jack_log("playback device %s", playback_pcm_name); + jack_log("capture device %s", capture_pcm_name); + } break; case 'H': -- 2.11.4.GIT