Commit a4257e51 authored by Max Kellermann's avatar Max Kellermann

output/wasapi: reimplement SearchDevice() without EnumerateDevices()

parent 2f2b3f1c
...@@ -804,8 +804,6 @@ void WasapiOutput::EnumerateDevices() { ...@@ -804,8 +804,6 @@ void WasapiOutput::EnumerateDevices() {
return; return;
} }
HRESULT result;
const auto device_collection = EnumAudioEndpoints(*enumerator); const auto device_collection = EnumAudioEndpoints(*enumerator);
const UINT count = GetCount(*device_collection); const UINT count = GetCount(*device_collection);
...@@ -838,20 +836,19 @@ WasapiOutput::GetDevice(unsigned int index) ...@@ -838,20 +836,19 @@ WasapiOutput::GetDevice(unsigned int index)
ComPtr<IMMDevice> ComPtr<IMMDevice>
WasapiOutput::SearchDevice(std::string_view name) WasapiOutput::SearchDevice(std::string_view name)
{ {
if (!SafeTry([this]() { EnumerateDevices(); })) { const auto device_collection = EnumAudioEndpoints(*enumerator);
return nullptr;
} const UINT count = GetCount(*device_collection);
auto iter = for (UINT i = 0; i < count; ++i) {
std::find_if(device_desc.cbegin(), device_desc.cend(), auto d = Item(*device_collection, i);
[&name](const auto &desc) { return desc.second == name; });
if (iter == device_desc.cend()) { const auto property_store = OpenPropertyStore(*d);
FormatError(wasapi_output_domain, "Device %.*s not founded.", auto n = GetString(*property_store, PKEY_Device_FriendlyName);
int(name.size()), name.data()); if (n != nullptr && name.compare(n) == 0)
return nullptr; return d;
} }
FormatInfo(wasapi_output_domain, "Select device \"%u\" \"%s\"", iter->first,
iter->second.c_str()); return nullptr;
return GetDevice(iter->first);
} }
static bool wasapi_output_test_default_device() { return true; } static bool wasapi_output_test_default_device() { return true; }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment