Bring back PortAudio support on Windows (#4770)
Population of the PortAudio setup widget has been delayed until it is shown, as it was causing crashes on some systems.
This commit is contained in:
committed by
Oskar Wallgren
parent
8d707df171
commit
505c642fbc
@@ -88,7 +88,6 @@ IF(LMMS_BUILD_WIN32)
|
||||
SET(WANT_ALSA OFF)
|
||||
SET(WANT_JACK OFF)
|
||||
SET(WANT_PULSEAUDIO OFF)
|
||||
SET(WANT_PORTAUDIO OFF)
|
||||
SET(WANT_SNDIO OFF)
|
||||
SET(WANT_SOUNDIO OFF)
|
||||
SET(WANT_WINMM ON)
|
||||
@@ -96,7 +95,6 @@ IF(LMMS_BUILD_WIN32)
|
||||
SET(STATUS_ALSA "<not supported on this platform>")
|
||||
SET(STATUS_JACK "<not supported on this platform>")
|
||||
SET(STATUS_PULSEAUDIO "<not supported on this platform>")
|
||||
SET(STATUS_PORTAUDIO "<disabled on this platform>")
|
||||
SET(STATUS_SOUNDIO "<disabled in this release>")
|
||||
SET(STATUS_WINMM "OK")
|
||||
SET(STATUS_APPLEMIDI "<not supported on this platform>")
|
||||
|
||||
@@ -34,6 +34,7 @@ class AudioPortAudioSetupUtil : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public slots:
|
||||
void updateBackends();
|
||||
void updateDevices();
|
||||
void updateChannels();
|
||||
|
||||
@@ -87,6 +88,7 @@ public:
|
||||
virtual ~setupWidget();
|
||||
|
||||
virtual void saveSettings();
|
||||
virtual void show();
|
||||
|
||||
private:
|
||||
ComboBox * m_backend;
|
||||
|
||||
@@ -27,6 +27,10 @@
|
||||
#include "AudioPortAudio.h"
|
||||
|
||||
#ifndef LMMS_HAVE_PORTAUDIO
|
||||
void AudioPortAudioSetupUtil::updateBackends()
|
||||
{
|
||||
}
|
||||
|
||||
void AudioPortAudioSetupUtil::updateDevices()
|
||||
{
|
||||
}
|
||||
@@ -328,6 +332,28 @@ int AudioPortAudio::_process_callback(
|
||||
|
||||
|
||||
|
||||
|
||||
void AudioPortAudioSetupUtil::updateBackends()
|
||||
{
|
||||
PaError err = Pa_Initialize();
|
||||
if( err != paNoError ) {
|
||||
printf( "Couldn't initialize PortAudio: %s\n", Pa_GetErrorText( err ) );
|
||||
return;
|
||||
}
|
||||
|
||||
const PaHostApiInfo * hi;
|
||||
for( int i = 0; i < Pa_GetHostApiCount(); ++i )
|
||||
{
|
||||
hi = Pa_GetHostApiInfo( i );
|
||||
m_backendModel.addItem( hi->name );
|
||||
}
|
||||
|
||||
Pa_Terminate();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void AudioPortAudioSetupUtil::updateDevices()
|
||||
{
|
||||
PaError err = Pa_Initialize();
|
||||
@@ -409,37 +435,6 @@ AudioPortAudio::setupWidget::setupWidget( QWidget * _parent ) :
|
||||
m_channels->setLabel( tr( "CHANNELS" ) );
|
||||
m_channels->move( 308, 20 );*/
|
||||
|
||||
// Setup models
|
||||
PaError err = Pa_Initialize();
|
||||
if( err != paNoError ) {
|
||||
printf( "Couldn't initialize PortAudio: %s\n", Pa_GetErrorText( err ) );
|
||||
return;
|
||||
}
|
||||
|
||||
// todo: setup backend model
|
||||
const PaHostApiInfo * hi;
|
||||
for( int i = 0; i < Pa_GetHostApiCount(); ++i )
|
||||
{
|
||||
hi = Pa_GetHostApiInfo( i );
|
||||
m_setupUtil.m_backendModel.addItem( hi->name );
|
||||
}
|
||||
|
||||
Pa_Terminate();
|
||||
|
||||
|
||||
const QString& backend = ConfigManager::inst()->value( "audioportaudio",
|
||||
"backend" );
|
||||
const QString& device = ConfigManager::inst()->value( "audioportaudio",
|
||||
"device" );
|
||||
|
||||
int i = qMax( 0, m_setupUtil.m_backendModel.findText( backend ) );
|
||||
m_setupUtil.m_backendModel.setValue( i );
|
||||
|
||||
m_setupUtil.updateDevices();
|
||||
|
||||
i = qMax( 0, m_setupUtil.m_deviceModel.findText( device ) );
|
||||
m_setupUtil.m_deviceModel.setValue( i );
|
||||
|
||||
connect( &m_setupUtil.m_backendModel, SIGNAL( dataChanged() ),
|
||||
&m_setupUtil, SLOT( updateDevices() ) );
|
||||
|
||||
@@ -478,6 +473,33 @@ void AudioPortAudio::setupWidget::saveSettings()
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void AudioPortAudio::setupWidget::show()
|
||||
{
|
||||
if( m_setupUtil.m_backendModel.size() == 0 )
|
||||
{
|
||||
// populate the backend model the first time we are shown
|
||||
m_setupUtil.updateBackends();
|
||||
|
||||
const QString& backend = ConfigManager::inst()->value(
|
||||
"audioportaudio", "backend" );
|
||||
const QString& device = ConfigManager::inst()->value(
|
||||
"audioportaudio", "device" );
|
||||
|
||||
int i = qMax( 0, m_setupUtil.m_backendModel.findText( backend ) );
|
||||
m_setupUtil.m_backendModel.setValue( i );
|
||||
|
||||
m_setupUtil.updateDevices();
|
||||
|
||||
i = qMax( 0, m_setupUtil.m_deviceModel.findText( device ) );
|
||||
m_setupUtil.m_deviceModel.setValue( i );
|
||||
}
|
||||
|
||||
AudioDeviceSetupWidget::show();
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user