summaryrefslogtreecommitdiff
path: root/src/output/plugins/wasapi/WasapiOutputPlugin.cxx
diff options
context:
space:
mode:
authorMax Kellermann <max@musicpd.org>2021-03-10 17:21:26 +0100
committerMax Kellermann <max@musicpd.org>2021-03-10 17:23:41 +0100
commit3e93c392d77938b1b5e4a0345aad45ea01366551 (patch)
tree28ddf98d84eb0ff02304fa68631559f2eeb0e2c5 /src/output/plugins/wasapi/WasapiOutputPlugin.cxx
parent0a97e68aa9dfaea4dab9961479134d23c6007276 (diff)
output/wasapi: make `enumerator` a local variable
Diffstat (limited to 'src/output/plugins/wasapi/WasapiOutputPlugin.cxx')
-rw-r--r--src/output/plugins/wasapi/WasapiOutputPlugin.cxx30
1 files changed, 16 insertions, 14 deletions
diff --git a/src/output/plugins/wasapi/WasapiOutputPlugin.cxx b/src/output/plugins/wasapi/WasapiOutputPlugin.cxx
index eed47591b..5d1e546b9 100644
--- a/src/output/plugins/wasapi/WasapiOutputPlugin.cxx
+++ b/src/output/plugins/wasapi/WasapiOutputPlugin.cxx
@@ -233,7 +233,6 @@ class WasapiOutput final : public AudioOutput {
#endif
std::string device_config;
std::shared_ptr<COMWorker> com_worker;
- ComPtr<IMMDeviceEnumerator> enumerator;
ComPtr<IMMDevice> device;
ComPtr<IAudioClient> client;
WAVEFORMATEXTENSIBLE device_format;
@@ -293,9 +292,11 @@ private:
bool TryFormatExclusive(const AudioFormat &audio_format);
void FindExclusiveFormatSupported(AudioFormat &audio_format);
void FindSharedFormatSupported(AudioFormat &audio_format);
- void EnumerateDevices();
- ComPtr<IMMDevice> GetDevice(unsigned int index);
- ComPtr<IMMDevice> SearchDevice(std::string_view name);
+ static void EnumerateDevices(IMMDeviceEnumerator &enumerator);
+ static ComPtr<IMMDevice> GetDevice(IMMDeviceEnumerator &enumerator,
+ unsigned index);
+ static ComPtr<IMMDevice> SearchDevice(IMMDeviceEnumerator &enumerator,
+ std::string_view name);
};
WasapiOutput &
@@ -434,7 +435,6 @@ WasapiOutput::DoDisable() noexcept
assert(!thread);
device.reset();
- enumerator.reset();
}
/// run inside COMWorkerThread
@@ -695,12 +695,13 @@ WasapiOutput::Cancel() noexcept
void
WasapiOutput::OpenDevice()
{
+ ComPtr<IMMDeviceEnumerator> enumerator;
enumerator.CoCreateInstance(__uuidof(MMDeviceEnumerator), nullptr,
CLSCTX_INPROC_SERVER);
if (enumerate_devices) {
try {
- EnumerateDevices();
+ EnumerateDevices(*enumerator);
} catch (...) {
LogError(std::current_exception());
}
@@ -709,12 +710,12 @@ WasapiOutput::OpenDevice()
if (!device_config.empty()) {
unsigned int id;
if (!SafeSilenceTry([this, &id]() { id = std::stoul(device_config); })) {
- device = SearchDevice(device_config);
+ device = SearchDevice(*enumerator, device_config);
if (!device)
throw FormatRuntimeError("Device '%s' not found",
device_config.c_str());
} else
- device = GetDevice(id);
+ device = GetDevice(*enumerator, id);
} else {
device = GetDefaultAudioEndpoint(*enumerator);
}
@@ -915,9 +916,9 @@ WasapiOutput::FindSharedFormatSupported(AudioFormat &audio_format)
/// run inside COMWorkerThread
void
-WasapiOutput::EnumerateDevices()
+WasapiOutput::EnumerateDevices(IMMDeviceEnumerator &enumerator)
{
- const auto device_collection = EnumAudioEndpoints(*enumerator);
+ const auto device_collection = EnumAudioEndpoints(enumerator);
const UINT count = GetCount(*device_collection);
for (UINT i = 0; i < count; ++i) {
@@ -938,17 +939,18 @@ WasapiOutput::EnumerateDevices()
/// run inside COMWorkerThread
ComPtr<IMMDevice>
-WasapiOutput::GetDevice(unsigned int index)
+WasapiOutput::GetDevice(IMMDeviceEnumerator &enumerator, unsigned index)
{
- const auto device_collection = EnumAudioEndpoints(*enumerator);
+ const auto device_collection = EnumAudioEndpoints(enumerator);
return Item(*device_collection, index);
}
/// run inside COMWorkerThread
ComPtr<IMMDevice>
-WasapiOutput::SearchDevice(std::string_view name)
+WasapiOutput::SearchDevice(IMMDeviceEnumerator &enumerator,
+ std::string_view name)
{
- const auto device_collection = EnumAudioEndpoints(*enumerator);
+ const auto device_collection = EnumAudioEndpoints(enumerator);
const UINT count = GetCount(*device_collection);
for (UINT i = 0; i < count; ++i) {