[Summary] Made device control panel open request synchronized with other critical device operations. Made device reset correctly when control panel is closed.

Conflicts:
	gtk2_ardour/tracks_control_panel.logic.cc
	libs/ardour/ardour/audioengine.h
	libs/backends/wavesaudio/wavesapi/devicemanager/WCMRPortAudioDeviceManager.cpp
This commit is contained in:
Greg Zharun 2015-02-24 23:01:16 +02:00 committed by Paul Davis
parent 91ae97d5c9
commit ce069da682
3 changed files with 21 additions and 4 deletions

View File

@ -74,7 +74,7 @@ class LIBARDOUR_API AudioEngine : public SessionHandlePtr, public PortManager
bool setup_required () const;
ProcessThread* main_thread() const { return _main_thread; }
/* START BACKEND PROXY API
*
* See audio_backend.h for full documentation and semantics. These wrappers
@ -106,6 +106,7 @@ class LIBARDOUR_API AudioEngine : public SessionHandlePtr, public PortManager
void request_backend_reset();
void request_device_list_update();
void launch_device_control_app();
bool is_realtime() const;
bool connected() const;

View File

@ -376,6 +376,16 @@ AudioEngine::process_callback (pframes_t nframes)
}
void
AudioEngine::launch_device_control_app()
{
if (_state_lock.trylock () ) {
_backend->launch_control_app ();
_state_lock.unlock ();
}
}
void
AudioEngine::request_backend_reset()
{

View File

@ -1321,7 +1321,7 @@ WTErr WCMRPortAudioDevice::ShowConfigPanel (void *pParam)
AUTO_FUNC_DEBUG;
WTErr retVal = eNoErr;
if (Active())
if (Active() && !m_ResetRequested )
{
#ifdef PLATFORM_WINDOWS
if(Pa_GetHostApiInfo(Pa_GetDeviceInfo(m_DeviceID)->hostApi)->type == paASIO)
@ -1329,15 +1329,21 @@ WTErr WCMRPortAudioDevice::ShowConfigPanel (void *pParam)
// stop and deactivate the device
bool wasStreaming = Streaming();
SetActive(false);
// show control panel for the device
if (PaAsio_ShowControlPanel (m_DeviceID, pParam) != paNoError)
retVal = eGenericErr;
// reset device to pick up changes
ResetDevice();
// restore previous state for the device
SetActive(true);
if (wasStreaming)
SetStreaming(true);
// reset device to pick up changes
if (!m_ResetRequested) {
m_pMyManager->NotifyClient (WCMRAudioDeviceManagerClient::RequestReset);
}
}
#else
pParam = pParam;