mirror of
https://github.com/obsproject/obs-studio.git
synced 2024-09-20 04:42:18 +02:00
1d5d4b29e7
Splits the WASAPINotify class out of win-wasapi.cpp and makes it a shared object in the plugin, then also creates a callback to reset audio monitoring if the default output device changes.
76 lines
1.5 KiB
C++
76 lines
1.5 KiB
C++
#include "wasapi-notify.hpp"
|
|
|
|
#include <obs-module.h>
|
|
|
|
#include <util/windows/win-version.h>
|
|
|
|
OBS_DECLARE_MODULE()
|
|
OBS_MODULE_USE_DEFAULT_LOCALE("win-wasapi", "en-US")
|
|
|
|
MODULE_EXPORT const char *obs_module_description(void)
|
|
{
|
|
return "Windows WASAPI audio input/output sources";
|
|
}
|
|
|
|
void RegisterWASAPIInput();
|
|
void RegisterWASAPIDeviceOutput();
|
|
void RegisterWASAPIProcessOutput();
|
|
|
|
WASAPINotify *notify = nullptr;
|
|
|
|
static void default_device_changed_callback(EDataFlow flow, ERole, LPCWSTR)
|
|
{
|
|
const char *id;
|
|
obs_get_audio_monitoring_device(nullptr, &id);
|
|
|
|
if (!id || strcmp(id, "default") != 0)
|
|
return;
|
|
|
|
if (flow != eRender)
|
|
return;
|
|
|
|
auto task = [](void *) {
|
|
obs_reset_audio_monitoring();
|
|
};
|
|
|
|
obs_queue_task(OBS_TASK_UI, task, nullptr, false);
|
|
}
|
|
|
|
bool obs_module_load(void)
|
|
{
|
|
/* MS says 20348, but process filtering seems to work earlier */
|
|
struct win_version_info ver;
|
|
get_win_ver(&ver);
|
|
struct win_version_info minimum;
|
|
minimum.major = 10;
|
|
minimum.minor = 0;
|
|
minimum.build = 19041;
|
|
minimum.revis = 0;
|
|
const bool process_filter_supported =
|
|
win_version_compare(&ver, &minimum) >= 0;
|
|
|
|
RegisterWASAPIInput();
|
|
RegisterWASAPIDeviceOutput();
|
|
if (process_filter_supported)
|
|
RegisterWASAPIProcessOutput();
|
|
|
|
notify = new WASAPINotify();
|
|
notify->AddDefaultDeviceChangedCallback(
|
|
obs_current_module(), default_device_changed_callback);
|
|
|
|
return true;
|
|
}
|
|
|
|
void obs_module_unload(void)
|
|
{
|
|
if (notify) {
|
|
delete notify;
|
|
notify = nullptr;
|
|
}
|
|
}
|
|
|
|
WASAPINotify *GetNotify()
|
|
{
|
|
return notify;
|
|
}
|