Fix crash in Settings window if no audio devices present

master
Richard Stanway 2014-08-07 17:17:20 +02:00
parent b1fff2621b
commit eccaa7a127
3 changed files with 16 additions and 6 deletions

View File

@ -45,7 +45,7 @@ struct BlankAudioPlayback
HRESULT err;
err = CoCreateInstance(CLSID_MMDeviceEnumerator, NULL, CLSCTX_ALL, IID_IMMDeviceEnumerator, (void**)&mmEnumerator);
if(FAILED(err))
CrashError(TEXT("Could not create IMMDeviceEnumerator"));
CrashError(TEXT("Could not create IMMDeviceEnumerator: 0x%08lx"), err);
if (scmpi(lpDevice, TEXT("Default")) == 0)
err = mmEnumerator->GetDefaultAudioEndpoint(eRender, eConsole, &mmDevice);

View File

@ -35,7 +35,7 @@ void GetAudioDevices(AudioDeviceList &deviceList, AudioDeviceType deviceType, bo
err = CoCreateInstance(CLSID_MMDeviceEnumerator, NULL, CLSCTX_ALL, IID_IMMDeviceEnumerator, (void**)&mmEnumerator);
if(FAILED(err))
{
AppWarning(TEXT("GetAudioDevices: Could not create IMMDeviceEnumerator"));
AppWarning(TEXT("GetAudioDevices: Could not create IMMDeviceEnumerator: 0x%08lx"), err);
return;
}

View File

@ -234,8 +234,18 @@ void SettingsAudio::RefreshDevices(AudioDeviceType desktopDeviceType)
for(UINT i=0; i<storage.recordingDevices.devices.Num(); i++)
SendMessage(hwndTemp, CB_ADDSTRING, 0, (LPARAM)storage.recordingDevices.devices[i].strName.Array());
String strPlaybackID = AppConfig->GetString(TEXT("Audio"), TEXT("PlaybackDevice"), storage.playbackDevices.devices[0].strID);
String strDeviceID = AppConfig->GetString(TEXT("Audio"), TEXT("Device"), storage.recordingDevices.devices[0].strID);
String strPlaybackID;
String strDeviceID;
if (storage.playbackDevices.devices.Num())
AppConfig->GetString(TEXT("Audio"), TEXT("PlaybackDevice"), storage.playbackDevices.devices[0].strID);
else
AppConfig->GetString(TEXT("Audio"), TEXT("PlaybackDevice"));
if (storage.recordingDevices.devices.Num())
strDeviceID = AppConfig->GetString(TEXT("Audio"), TEXT("Device"), storage.recordingDevices.devices[0].strID);
else
strDeviceID = AppConfig->GetString(TEXT("Audio"), TEXT("Device"));
UINT iPlaybackDevice;
for(iPlaybackDevice=0; iPlaybackDevice<storage.playbackDevices.devices.Num(); iPlaybackDevice++)
@ -257,7 +267,7 @@ void SettingsAudio::RefreshDevices(AudioDeviceType desktopDeviceType)
}
}
if(iPlaybackDevice == storage.playbackDevices.devices.Num())
if (iPlaybackDevice && iPlaybackDevice == storage.playbackDevices.devices.Num())
{
AppConfig->SetString(TEXT("Audio"), TEXT("PlaybackDevice"), storage.playbackDevices.devices[0].strID);
SendMessage(hwndPlayback, CB_SETCURSEL, 0, 0);
@ -265,7 +275,7 @@ void SettingsAudio::RefreshDevices(AudioDeviceType desktopDeviceType)
SetChangedSettings(true);
}
if(iDevice == storage.recordingDevices.devices.Num())
if (iDevice && iDevice == storage.recordingDevices.devices.Num())
{
AppConfig->SetString(TEXT("Audio"), TEXT("Device"), storage.recordingDevices.devices[0].strID);
SendMessage(hwndTemp, CB_SETCURSEL, 0, 0);