From 6a75c48dba2baacb7ca02a607f5ff80ca2f375d8 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Mon, 8 Mar 2021 13:44:10 +0100 Subject: [PATCH] win32/HResult: add MakeHResultError() None of the current FormatHResultError() callers need the format string. --- src/mixer/plugins/WasapiMixerPlugin.cxx | 12 ++++++------ src/output/plugins/wasapi/AudioClient.hxx | 18 +++++++++--------- src/output/plugins/wasapi/Device.hxx | 18 +++++++++--------- .../plugins/wasapi/WasapiOutputPlugin.cxx | 15 +++++++-------- src/win32/Com.hxx | 4 ++-- src/win32/ComPtr.hxx | 2 +- src/win32/HResult.hxx | 7 +++++++ 7 files changed, 41 insertions(+), 35 deletions(-) diff --git a/src/mixer/plugins/WasapiMixerPlugin.cxx b/src/mixer/plugins/WasapiMixerPlugin.cxx index d87f1ca26..d0145405a 100644 --- a/src/mixer/plugins/WasapiMixerPlugin.cxx +++ b/src/mixer/plugins/WasapiMixerPlugin.cxx @@ -59,9 +59,9 @@ public: result = endpoint_volume->GetMasterVolumeLevelScalar( &volume_level); if (FAILED(result)) { - throw FormatHResultError(result, - "Unable to get master " - "volume level"); + throw MakeHResultError(result, + "Unable to get master " + "volume level"); } } else { auto session_volume = @@ -69,7 +69,7 @@ public: result = session_volume->GetMasterVolume(&volume_level); if (FAILED(result)) { - throw FormatHResultError( + throw MakeHResultError( result, "Unable to get master volume"); } } @@ -95,7 +95,7 @@ public: result = endpoint_volume->SetMasterVolumeLevelScalar( volume_level, nullptr); if (FAILED(result)) { - throw FormatHResultError( + throw MakeHResultError( result, "Unable to set master volume level"); } @@ -106,7 +106,7 @@ public: result = session_volume->SetMasterVolume(volume_level, nullptr); if (FAILED(result)) { - throw FormatHResultError( + throw MakeHResultError( result, "Unable to set master volume"); } } diff --git a/src/output/plugins/wasapi/AudioClient.hxx b/src/output/plugins/wasapi/AudioClient.hxx index 3ed3da319..70ec56a69 100644 --- a/src/output/plugins/wasapi/AudioClient.hxx +++ b/src/output/plugins/wasapi/AudioClient.hxx @@ -33,8 +33,8 @@ GetBufferSizeInFrames(IAudioClient &client) HRESULT result = client.GetBufferSize(&buffer_size_in_frames); if (FAILED(result)) - throw FormatHResultError(result, - "Unable to get audio client buffer size"); + throw MakeHResultError(result, + "Unable to get audio client buffer size"); return buffer_size_in_frames; } @@ -46,8 +46,8 @@ GetCurrentPaddingFrames(IAudioClient &client) HRESULT result = client.GetCurrentPadding(&padding_frames); if (FAILED(result)) - throw FormatHResultError(result, - "Failed to get current padding"); + throw MakeHResultError(result, + "Failed to get current padding"); return padding_frames; } @@ -59,7 +59,7 @@ GetMixFormat(IAudioClient &client) HRESULT result = client.GetMixFormat(&f); if (FAILED(result)) - throw FormatHResultError(result, "GetMixFormat failed"); + throw MakeHResultError(result, "GetMixFormat failed"); return ComHeapPtr{f}; } @@ -69,7 +69,7 @@ Start(IAudioClient &client) { HRESULT result = client.Start(); if (FAILED(result)) - throw FormatHResultError(result, "Failed to start client"); + throw MakeHResultError(result, "Failed to start client"); } inline void @@ -77,7 +77,7 @@ Stop(IAudioClient &client) { HRESULT result = client.Stop(); if (FAILED(result)) - throw FormatHResultError(result, "Failed to stop client"); + throw MakeHResultError(result, "Failed to stop client"); } inline void @@ -85,7 +85,7 @@ SetEventHandle(IAudioClient &client, HANDLE h) { HRESULT result = client.SetEventHandle(h); if (FAILED(result)) - throw FormatHResultError(result, "Unable to set event handle"); + throw MakeHResultError(result, "Unable to set event handle"); } template @@ -95,7 +95,7 @@ GetService(IAudioClient &client) T *p = nullptr; HRESULT result = client.GetService(IID_PPV_ARGS(&p)); if (FAILED(result)) - throw FormatHResultError(result, "Unable to get service"); + throw MakeHResultError(result, "Unable to get service"); return ComPtr{p}; } diff --git a/src/output/plugins/wasapi/Device.hxx b/src/output/plugins/wasapi/Device.hxx index 863f327a7..87663c0dc 100644 --- a/src/output/plugins/wasapi/Device.hxx +++ b/src/output/plugins/wasapi/Device.hxx @@ -33,8 +33,8 @@ GetDefaultAudioEndpoint(IMMDeviceEnumerator &e) HRESULT result = e.GetDefaultAudioEndpoint(eRender, eMultimedia, &device); if (FAILED(result)) - throw FormatHResultError(result, - "Unable to get default device for multimedia"); + throw MakeHResultError(result, + "Unable to get default device for multimedia"); return ComPtr{device}; } @@ -47,7 +47,7 @@ EnumAudioEndpoints(IMMDeviceEnumerator &e) HRESULT result = e.EnumAudioEndpoints(eRender, DEVICE_STATE_ACTIVE, &dc); if (FAILED(result)) - throw FormatHResultError(result, "Unable to enumerate devices"); + throw MakeHResultError(result, "Unable to enumerate devices"); return ComPtr{dc}; } @@ -59,7 +59,7 @@ GetCount(IMMDeviceCollection &dc) HRESULT result = dc.GetCount(&count); if (FAILED(result)) - throw FormatHResultError(result, "Collection->GetCount failed"); + throw MakeHResultError(result, "Collection->GetCount failed"); return count; } @@ -71,7 +71,7 @@ Item(IMMDeviceCollection &dc, UINT i) auto result = dc.Item(i, &device); if (FAILED(result)) - throw FormatHResultError(result, "Collection->Item failed"); + throw MakeHResultError(result, "Collection->Item failed"); return ComPtr{device}; } @@ -83,7 +83,7 @@ GetState(IMMDevice &device) HRESULT result = device.GetState(&state);; if (FAILED(result)) - throw FormatHResultError(result, "Unable to get device status"); + throw MakeHResultError(result, "Unable to get device status"); return state; } @@ -96,7 +96,7 @@ Activate(IMMDevice &device) HRESULT result = device.Activate(__uuidof(T), CLSCTX_ALL, nullptr, (void **)&p); if (FAILED(result)) - throw FormatHResultError(result, "Unable to activate device"); + throw MakeHResultError(result, "Unable to activate device"); return ComPtr{p}; } @@ -108,8 +108,8 @@ OpenPropertyStore(IMMDevice &device) HRESULT result = device.OpenPropertyStore(STGM_READ, &property_store); if (FAILED(result)) - throw FormatHResultError(result, - "Device->OpenPropertyStore failed"); + throw MakeHResultError(result, + "Device->OpenPropertyStore failed"); return ComPtr{property_store}; } diff --git a/src/output/plugins/wasapi/WasapiOutputPlugin.cxx b/src/output/plugins/wasapi/WasapiOutputPlugin.cxx index f9dfb5429..f49d9748b 100644 --- a/src/output/plugins/wasapi/WasapiOutputPlugin.cxx +++ b/src/output/plugins/wasapi/WasapiOutputPlugin.cxx @@ -336,7 +336,7 @@ void WasapiOutputThread::Work() noexcept { if (HRESULT result = render_client->GetBuffer(write_in_frames, &data); FAILED(result)) { - throw FormatHResultError(result, "Failed to get buffer"); + throw MakeHResultError(result, "Failed to get buffer"); } AtScopeExit(&) { @@ -457,7 +457,7 @@ void WasapiOutput::DoOpen(AudioFormat &audio_format) { if (HRESULT result = client->GetDevicePeriod(&default_device_period, &min_device_period); FAILED(result)) { - throw FormatHResultError(result, "Unable to get device period"); + throw MakeHResultError(result, "Unable to get device period"); } FormatDebug(wasapi_output_domain, "Default device period: %I64u ns, Minimum device period: " @@ -505,8 +505,7 @@ void WasapiOutput::DoOpen(AudioFormat &audio_format) { } if (FAILED(result)) { - throw FormatHResultError( - result, "Unable to initialize audio client"); + throw MakeHResultError(result, "Unable to initialize audio client"); } } } else { @@ -515,8 +514,8 @@ void WasapiOutput::DoOpen(AudioFormat &audio_format) { buffer_duration, 0, reinterpret_cast(&device_format), nullptr); FAILED(result)) { - throw FormatHResultError(result, - "Unable to initialize audio client"); + throw MakeHResultError(result, + "Unable to initialize audio client"); } } @@ -773,7 +772,7 @@ void WasapiOutput::FindSharedFormatSupported(AudioFormat &audio_format) { } if (FAILED(result) && result != AUDCLNT_E_UNSUPPORTED_FORMAT) { - throw FormatHResultError(result, "IsFormatSupported failed"); + throw MakeHResultError(result, "IsFormatSupported failed"); } switch (result) { @@ -802,7 +801,7 @@ void WasapiOutput::FindSharedFormatSupported(AudioFormat &audio_format) { result_string.c_str()); } if (FAILED(result)) { - throw FormatHResultError(result, "Format is not supported"); + throw MakeHResultError(result, "Format is not supported"); } break; case S_FALSE: diff --git a/src/win32/Com.hxx b/src/win32/Com.hxx index a2aa062a1..34350b62d 100644 --- a/src/win32/Com.hxx +++ b/src/win32/Com.hxx @@ -31,7 +31,7 @@ public: COM() { if (HRESULT result = CoInitializeEx(nullptr, COINIT_MULTITHREADED); FAILED(result)) { - throw FormatHResultError( + throw MakeHResultError( result, "Unable to initialize COM with COINIT_MULTITHREADED"); } @@ -39,7 +39,7 @@ public: COM(bool) { if (HRESULT result = CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED); FAILED(result)) { - throw FormatHResultError( + throw MakeHResultError( result, "Unable to initialize COM with COINIT_APARTMENTTHREADED"); } diff --git a/src/win32/ComPtr.hxx b/src/win32/ComPtr.hxx index 01a8ef525..c7efa88b8 100644 --- a/src/win32/ComPtr.hxx +++ b/src/win32/ComPtr.hxx @@ -85,7 +85,7 @@ public: ::CoCreateInstance(class_id, unknown_outer, class_context, __uuidof(T), reinterpret_cast(&ptr)); if (FAILED(result)) { - throw FormatHResultError(result, "Unable to create instance"); + throw MakeHResultError(result, "Unable to create instance"); } } diff --git a/src/win32/HResult.hxx b/src/win32/HResult.hxx index 2f48c08f2..e61447fb6 100644 --- a/src/win32/HResult.hxx +++ b/src/win32/HResult.hxx @@ -74,6 +74,13 @@ static inline const std::error_category &hresult_category() noexcept { return hresult_category_instance; } +inline std::system_error +MakeHResultError(HRESULT result, const char *msg) noexcept +{ + return std::system_error(std::error_code(result, hresult_category()), + msg); +} + gcc_printf(2, 3) std::system_error FormatHResultError(HRESULT result, const char *fmt, ...) noexcept;