Core: Abide by COM MTA requirement for cubeb on Windows. Partially based on https://github.com/dolphin-emu/dolphin/pull/8920#discussion_r459746604
Co-authored-by: Michael M <[email protected]>
This commit is contained in:
1 parent
59b1419a8e
commit
ca10e92ab9
4 files changed
+124
-37
No files matched your search
@@ -68,47 +68,51 @@ void CEXIMic::StreamStart()
|
||||
if (!m_cubeb_ctx)
|
||||
return;
|
||||
|
||||
// Open stream with current parameters
|
||||
stream_size = buff_size_samples * 500;
|
||||
stream_buffer = new s16[stream_size];
|
||||
CubebUtils::RunInCubebContext([&] {
|
||||
// Open stream with current parameters
|
||||
stream_size = buff_size_samples * 500;
|
||||
stream_buffer = new s16[stream_size];
|
||||
|
||||
cubeb_stream_params params;
|
||||
params.format = CUBEB_SAMPLE_S16LE;
|
||||
params.rate = sample_rate;
|
||||
params.channels = 1;
|
||||
params.layout = CUBEB_LAYOUT_MONO;
|
||||
cubeb_stream_params params{};
|
||||
params.format = CUBEB_SAMPLE_S16LE;
|
||||
params.rate = sample_rate;
|
||||
params.channels = 1;
|
||||
params.layout = CUBEB_LAYOUT_MONO;
|
||||
|
||||
u32 minimum_latency;
|
||||
if (cubeb_get_min_latency(m_cubeb_ctx.get(), ¶ms, &minimum_latency) != CUBEB_OK)
|
||||
{
|
||||
WARN_LOG_FMT(EXPANSIONINTERFACE, "Error getting minimum latency");
|
||||
}
|
||||
u32 minimum_latency;
|
||||
if (cubeb_get_min_latency(m_cubeb_ctx.get(), ¶ms, &minimum_latency) != CUBEB_OK)
|
||||
{
|
||||
WARN_LOG_FMT(EXPANSIONINTERFACE, "Error getting minimum latency");
|
||||
}
|
||||
|
||||
if (cubeb_stream_init(m_cubeb_ctx.get(), &m_cubeb_stream, "Dolphin Emulated GameCube Microphone",
|
||||
nullptr, ¶ms, nullptr, nullptr,
|
||||
std::max<u32>(buff_size_samples, minimum_latency), DataCallback,
|
||||
state_callback, this) != CUBEB_OK)
|
||||
{
|
||||
ERROR_LOG_FMT(EXPANSIONINTERFACE, "Error initializing cubeb stream");
|
||||
return;
|
||||
}
|
||||
if (cubeb_stream_init(m_cubeb_ctx.get(), &m_cubeb_stream,
|
||||
"Dolphin Emulated GameCube Microphone", nullptr, ¶ms, nullptr,
|
||||
nullptr, std::max<u32>(buff_size_samples, minimum_latency), DataCallback,
|
||||
state_callback, this) != CUBEB_OK)
|
||||
{
|
||||
ERROR_LOG_FMT(EXPANSIONINTERFACE, "Error initializing cubeb stream");
|
||||
return;
|
||||
}
|
||||
|
||||
if (cubeb_stream_start(m_cubeb_stream) != CUBEB_OK)
|
||||
{
|
||||
ERROR_LOG_FMT(EXPANSIONINTERFACE, "Error starting cubeb stream");
|
||||
return;
|
||||
}
|
||||
if (cubeb_stream_start(m_cubeb_stream) != CUBEB_OK)
|
||||
{
|
||||
ERROR_LOG_FMT(EXPANSIONINTERFACE, "Error starting cubeb stream");
|
||||
return;
|
||||
}
|
||||
|
||||
INFO_LOG_FMT(EXPANSIONINTERFACE, "started cubeb stream");
|
||||
INFO_LOG_FMT(EXPANSIONINTERFACE, "started cubeb stream");
|
||||
});
|
||||
}
|
||||
|
||||
void CEXIMic::StreamStop()
|
||||
{
|
||||
if (m_cubeb_stream)
|
||||
{
|
||||
if (cubeb_stream_stop(m_cubeb_stream) != CUBEB_OK)
|
||||
ERROR_LOG_FMT(EXPANSIONINTERFACE, "Error stopping cubeb stream");
|
||||
cubeb_stream_destroy(m_cubeb_stream);
|
||||
CubebUtils::RunInCubebContext([&] {
|
||||
if (cubeb_stream_stop(m_cubeb_stream) != CUBEB_OK)
|
||||
ERROR_LOG_FMT(EXPANSIONINTERFACE, "Error stopping cubeb stream");
|
||||
cubeb_stream_destroy(m_cubeb_stream);
|
||||
});
|
||||
m_cubeb_stream = nullptr;
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user