From 753f57c71bdefb5d250bce4e9603f4154ba3d855 Mon Sep 17 00:00:00 2001 From: loki Date: Sat, 1 Feb 2020 10:25:37 +0100 Subject: [PATCH] Remove dependency on a library for a single function --- CMakeLists.txt | 1 - sunshine/main.cpp | 1 + sunshine/platform/common.h | 7 +++++++ sunshine/platform/linux_evdev.cpp | 2 ++ sunshine/platform/windows_wasapi.cpp | 16 +++++++++++++++- tools/CMakeLists.txt | 1 - tools/audio.cpp | 8 ++++++-- 7 files changed, 31 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 56997b69..1adcf1af 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -71,7 +71,6 @@ if(WIN32) wsock32 ws2_32 iphlpapi - windowsapp d3d11 dxgi setupapi ) diff --git a/sunshine/main.cpp b/sunshine/main.cpp index a75f7d07..034bc6de 100644 --- a/sunshine/main.cpp +++ b/sunshine/main.cpp @@ -126,6 +126,7 @@ int main(int argc, char *argv[]) { proc::proc = std::move(*proc_opt); + auto deinit_guard = platf::init(); reed_solomon_init(); task_pool.start(1); diff --git a/sunshine/platform/common.h b/sunshine/platform/common.h index 8d3d04f4..184c0d38 100644 --- a/sunshine/platform/common.h +++ b/sunshine/platform/common.h @@ -37,6 +37,11 @@ struct gamepad_state_t { std::int16_t rsY; }; +class deinit_t { +public: + virtual ~deinit_t() = default; +}; + struct img_t { public: std::uint8_t *data {}; @@ -93,6 +98,8 @@ void gamepad(input_t &input, int nr, const gamepad_state_t &gamepad_state); int alloc_gamepad(input_t &input, int nr); void free_gamepad(input_t &input, int nr); + +[[nodiscard]] std::unique_ptr init(); } #endif //SUNSHINE_COMMON_H diff --git a/sunshine/platform/linux_evdev.cpp b/sunshine/platform/linux_evdev.cpp index 38958ffc..af9e39ed 100644 --- a/sunshine/platform/linux_evdev.cpp +++ b/sunshine/platform/linux_evdev.cpp @@ -501,4 +501,6 @@ void freeInput(void *p) { auto *input = (input_raw_t*)p; delete input; } + +std::unique_ptr init() { return nullptr; } } diff --git a/sunshine/platform/windows_wasapi.cpp b/sunshine/platform/windows_wasapi.cpp index 4c773a33..a55d1c05 100644 --- a/sunshine/platform/windows_wasapi.cpp +++ b/sunshine/platform/windows_wasapi.cpp @@ -38,6 +38,17 @@ using audio_capture_t = util::safe_ptr>; using handle_t = util::safe_ptr_v2; +class co_init_t : public deinit_t { +public: + co_init_t() { + CoInitializeEx(nullptr, COINIT_MULTITHREADED | COINIT_SPEED_OVER_MEMORY); + } + + ~co_init_t() override { + CoUninitialize(); + } +}; + class mic_wasapi_t : public mic_t { public: capture_e sample(std::vector &sample_in) override { @@ -317,7 +328,6 @@ public: }; std::unique_ptr microphone(std::uint32_t sample_rate) { - Windows::Foundation::Initialize(RO_INIT_MULTITHREADED); auto mic = std::make_unique(); if(mic->init(sample_rate)) { @@ -326,4 +336,8 @@ std::unique_ptr microphone(std::uint32_t sample_rate) { return mic; } + +std::unique_ptr init() { + return std::make_unique(); +} } \ No newline at end of file diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt index e013cb9a..8d59af33 100644 --- a/tools/CMakeLists.txt +++ b/tools/CMakeLists.txt @@ -17,6 +17,5 @@ set_target_properties(audio-info PROPERTIES CXX_STANDARD 17) target_link_libraries(audio-info ${CMAKE_THREAD_LIBS_INIT} ksuser - windowsapp ${PLATFORM_LIBRARIES}) target_compile_options(audio-info PRIVATE ${SUNSHINE_COMPILE_OPTIONS}) diff --git a/tools/audio.cpp b/tools/audio.cpp index 41b3d286..05717b23 100644 --- a/tools/audio.cpp +++ b/tools/audio.cpp @@ -172,6 +172,12 @@ void print_help() { } int main(int argc, char *argv[]) { + CoInitializeEx(nullptr, COINIT_MULTITHREADED | COINIT_SPEED_OVER_MEMORY); + + auto fg = util::fail_guard([]() { + CoUninitialize(); + }); + if(argc > 1) { device_state_filter = 0; } @@ -205,8 +211,6 @@ int main(int argc, char *argv[]) { } } - Windows::Foundation::Initialize(RO_INIT_MULTITHREADED); - HRESULT status; audio::device_enum_t::pointer device_enum_p{};