Fix for crash on exit in FWasapiStreamManager destructor

#jira UE-202143
#rb jimmy.smith

[CL 30192837 by brian chrisman in ue5-main branch]
This commit is contained in:
brian chrisman
2023-12-07 16:45:27 -05:00
parent f08f6bb841
commit 2ec1401525
3 changed files with 11 additions and 18 deletions

View File

@@ -20,17 +20,27 @@ namespace Audio
class FAudioCaptureWasapiModule : public IModuleInterface
{
private:
/** Indicates if FWindowsPlatformMisc::CoInitialize() was successfull. */
bool bCoInitialized = false;
FAudioCaptureWasapiFactory AudioCaptureFactory;
public:
virtual void StartupModule() override
{
bCoInitialized = FWindowsPlatformMisc::CoInitialize();
IModularFeatures::Get().RegisterModularFeature(IAudioCaptureFactory::GetModularFeatureName(), &AudioCaptureFactory);
}
virtual void ShutdownModule() override
{
IModularFeatures::Get().UnregisterModularFeature(IAudioCaptureFactory::GetModularFeatureName(), &AudioCaptureFactory);
if (bCoInitialized)
{
FWindowsPlatformMisc::CoUninitialize();
}
}
};
}

View File

@@ -10,23 +10,9 @@ namespace Audio
{
FWasapiStreamManager::FWasapiStreamManager()
{
const bool bResult = FWindowsPlatformMisc::CoInitialize();
if (bResult)
{
bCoInitialized = true;
}
DeviceEnumerator.Initialize();
}
FWasapiStreamManager::~FWasapiStreamManager()
{
if (bCoInitialized)
{
FWindowsPlatformMisc::CoUninitialize();
}
}
FString FWasapiStreamManager::GetDefaultInputDeviceId()
{
return DeviceEnumerator.GetDefaultInputDeviceId();

View File

@@ -25,7 +25,7 @@ namespace Audio
FWasapiStreamManager(FWasapiStreamManager&& InOther) = delete;
FWasapiStreamManager(const FWasapiStreamManager& InOther) = delete;
virtual ~FWasapiStreamManager();
virtual ~FWasapiStreamManager() {}
FWasapiStreamManager& operator=(FWasapiStreamManager&& InOther) = delete;
FWasapiStreamManager& operator=(const FWasapiStreamManager& InOther) = delete;
@@ -101,9 +101,6 @@ namespace Audio
STREAM_CAPTURING
};
/** Indicates if FWindowsPlatformMisc::CoInitialize() was successfull. */
bool bCoInitialized = false;
/** Current state of the state machine. */
EStreamState State = EStreamState::STREAM_CLOSED;