/[svn]/linuxsampler/trunk/src/drivers/audio/AudioOutputDeviceJack.cpp
ViewVC logotype

Diff of /linuxsampler/trunk/src/drivers/audio/AudioOutputDeviceJack.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 2410 by schoenebeck, Sat Feb 2 18:52:15 2013 UTC revision 2478 by persson, Sat Oct 19 07:52:33 2013 UTC
# Line 80  namespace LinuxSampler { Line 80  namespace LinuxSampler {
80          // disconnect all current bindings first          // disconnect all current bindings first
81          for (int i = 0; i < Bindings.size(); i++) {          for (int i = 0; i < Bindings.size(); i++) {
82              String dst_name = Bindings[i];              String dst_name = Bindings[i];
83              int res = jack_disconnect(pChannel->pDevice->hJackClient, src_name.c_str(), dst_name.c_str());              /*int res =*/ jack_disconnect(pChannel->pDevice->hJackClient, src_name.c_str(), dst_name.c_str());
84          }          }
85          // connect new bindings          // connect new bindings
86          for (int i = 0; i < vS.size(); i++) {          for (int i = 0; i < vS.size(); i++) {
# Line 184  namespace LinuxSampler { Line 184  namespace LinuxSampler {
184       * @see AcquireChannels()       * @see AcquireChannels()
185       */       */
186      AudioOutputDeviceJack::AudioOutputDeviceJack(std::map<String,DeviceCreationParameter*> Parameters) : AudioOutputDevice(Parameters) {      AudioOutputDeviceJack::AudioOutputDeviceJack(std::map<String,DeviceCreationParameter*> Parameters) : AudioOutputDevice(Parameters) {
187          JackClient* pJackClient = JackClient::CreateAudio(((DeviceCreationParameterString*)Parameters["NAME"])->ValueAsString());          pJackClient = JackClient::CreateAudio(((DeviceCreationParameterString*)Parameters["NAME"])->ValueAsString());
188          existingJackDevices++;          existingJackDevices++;
189          pJackClient->SetAudioOutputDevice(this);          pJackClient->SetAudioOutputDevice(this);
190          hJackClient = pJackClient->hJackClient;          hJackClient = pJackClient->hJackClient;
# Line 237  namespace LinuxSampler { Line 237  namespace LinuxSampler {
237          const float rate = jack_get_sample_rate(hJackClient);          const float rate = jack_get_sample_rate(hJackClient);
238          return size / rate;          return size / rate;
239      }      }
240        
241        jack_client_t* AudioOutputDeviceJack::jackClientHandle() {
242            return hJackClient;
243        }
244    
245      void AudioOutputDeviceJack::Play() {      void AudioOutputDeviceJack::Play() {
246          csIsPlaying.PushAndUnlock(true);          csIsPlaying.PushAndUnlock(true);
# Line 261  namespace LinuxSampler { Line 265  namespace LinuxSampler {
265      uint AudioOutputDeviceJack::SampleRate() {      uint AudioOutputDeviceJack::SampleRate() {
266          return jack_get_sample_rate(hJackClient);          return jack_get_sample_rate(hJackClient);
267      }      }
268        
269        void AudioOutputDeviceJack::addListener(JackListener* listener) {
270            pJackClient->addListener(listener);
271        }
272    
273      String AudioOutputDeviceJack::Name() {      String AudioOutputDeviceJack::Name() {
274          return "JACK";          return "JACK";
# Line 290  namespace LinuxSampler { Line 298  namespace LinuxSampler {
298          return static_cast<JackClient*>(arg)->Process(nframes);          return static_cast<JackClient*>(arg)->Process(nframes);
299      }      }
300    
301      void linuxsampler_libjack_shutdown_callback(void* arg) {  #if HAVE_JACK_ON_INFO_SHUTDOWN
302          static_cast<JackClient*>(arg)->Stop();      void JackClient::libjackShutdownCallback(jack_status_t code, const char* reason, void *arg)
303    #else
304        void JackClient::libjackShutdownCallback(void *arg)
305    #endif
306        {
307            JackClient* jackClient = static_cast<JackClient*>(arg);
308            jackClient->Stop();
309          fprintf(stderr, "Jack: Jack server shutdown, exiting.\n");          fprintf(stderr, "Jack: Jack server shutdown, exiting.\n");
310            for (int i = 0; i < jackClient->jackListeners.size(); ++i) {
311                JackListener* listener = jackClient->jackListeners[i];
312    #if HAVE_JACK_ON_INFO_SHUTDOWN
313                listener->onJackShutdown(code, reason);
314    #else
315                listener->onJackShutdown(JackFailure, "unknown");
316    #endif
317            }
318      }      }
319            
320      int JackClient::libjackSampleRateCallback(jack_nframes_t nframes, void *arg) {      int JackClient::libjackSampleRateCallback(jack_nframes_t nframes, void *arg) {
# Line 315  namespace LinuxSampler { Line 337  namespace LinuxSampler {
337          client->ConfigReader.Unlock();          client->ConfigReader.Unlock();
338          return 0;          return 0;
339      }      }
340        
341        void JackClient::addListener(JackListener* listener) {
342            jackListeners.push_back(listener);
343        }
344    
345      std::map<String, JackClient*> JackClient::Clients;      std::map<String, JackClient*> JackClient::Clients;
346    
# Line 360  namespace LinuxSampler { Line 386  namespace LinuxSampler {
386          if (!hJackClient)          if (!hJackClient)
387              throw Exception("Seems Jack server is not running.");              throw Exception("Seems Jack server is not running.");
388          jack_set_process_callback(hJackClient, linuxsampler_libjack_process_callback, this);          jack_set_process_callback(hJackClient, linuxsampler_libjack_process_callback, this);
389          jack_on_shutdown(hJackClient, linuxsampler_libjack_shutdown_callback, this);  #if HAVE_JACK_ON_INFO_SHUTDOWN
390            jack_on_info_shutdown(hJackClient, libjackShutdownCallback, this);
391    #else
392            jack_on_shutdown(hJackClient, libjackShutdownCallback, this);
393    #endif
394          jack_set_buffer_size_callback(hJackClient, libjackBufferSizeCallback, this);          jack_set_buffer_size_callback(hJackClient, libjackBufferSizeCallback, this);
395          jack_set_sample_rate_callback(hJackClient, libjackSampleRateCallback, this);          jack_set_sample_rate_callback(hJackClient, libjackSampleRateCallback, this);
396                    

Legend:
Removed from v.2410  
changed lines
  Added in v.2478

  ViewVC Help
Powered by ViewVC