Use MMCSS task in audio capture thread

This commit is contained in:
ns6089 2023-08-16 02:13:31 +03:00 committed by Cameron Gutman
parent 4d94bcc3b0
commit 3ceee008f3
2 changed files with 17 additions and 0 deletions

View File

@ -204,6 +204,7 @@ if(WIN32)
dwmapi
userenv
synchronization.lib
avrt
${CURL_STATIC_LIBRARIES})
set_source_files_properties(third-party/ViGEmClient/src/ViGEmClient.cpp

View File

@ -13,6 +13,8 @@
#include <newdev.h>
#include <avrt.h>
#include "src/config.h"
#include "src/main.h"
#include "src/platform/common.h"
@ -449,6 +451,14 @@ namespace platf::audio {
return -1;
}
{
DWORD task_index = 0;
mmcss_task_handle = AvSetMmThreadCharacteristics("Pro Audio", &task_index);
if (!mmcss_task_handle) {
BOOST_LOG(error) << "Couldn't associate audio capture thread with Pro Audio MMCSS task [0x" << util::hex(GetLastError()).to_string_view() << ']';
}
}
status = audio_client->Start();
if (FAILED(status)) {
BOOST_LOG(error) << "Couldn't start recording [0x"sv << util::hex(status).to_string_view() << ']';
@ -467,6 +477,10 @@ namespace platf::audio {
if (audio_client) {
audio_client->Stop();
}
if (mmcss_task_handle) {
AvRevertMmThreadCharacteristics(mmcss_task_handle);
}
}
private:
@ -571,6 +585,8 @@ namespace platf::audio {
util::buffer_t<std::int16_t> sample_buf;
std::int16_t *sample_buf_pos;
int channels;
HANDLE mmcss_task_handle = NULL;
};
class audio_control_t: public ::platf::audio_control_t {