mirror of https://github.com/Xaymar/obs-StreamFX
source-mirror: Refactoring
This commit is contained in:
parent
410ba9df88
commit
c4942da235
|
@ -251,7 +251,7 @@ Source::Mirror::Mirror(obs_data_t* data, obs_source_t* src) {
|
||||||
}
|
}
|
||||||
|
|
||||||
Source::Mirror::~Mirror() {
|
Source::Mirror::~Mirror() {
|
||||||
m_audioKill = true;
|
m_killAudioThread = true;
|
||||||
m_audioNotify.notify_all();
|
m_audioNotify.notify_all();
|
||||||
if (m_audioThread.joinable())
|
if (m_audioThread.joinable())
|
||||||
m_audioThread.join();
|
m_audioThread.join();
|
||||||
|
@ -281,8 +281,8 @@ void Source::Mirror::update(obs_data_t* data) {
|
||||||
if (sourceName != m_mirrorName) {
|
if (sourceName != m_mirrorName) {
|
||||||
try {
|
try {
|
||||||
m_mirrorSource = std::make_unique<gfx::source_texture>(sourceName, m_source);
|
m_mirrorSource = std::make_unique<gfx::source_texture>(sourceName, m_source);
|
||||||
m_mirrorAudio = std::make_unique<obs::audio_capture>(m_mirrorSource->get_object());
|
m_audioCapture = std::make_unique<obs::audio_capture>(m_mirrorSource->get_object());
|
||||||
m_mirrorAudio->set_callback(std::bind(&Source::Mirror::audio_capture_cb, this,
|
m_audioCapture->set_callback(std::bind(&Source::Mirror::audio_capture_cb, this,
|
||||||
std::placeholders::_1, std::placeholders::_2, std::placeholders::_3));
|
std::placeholders::_1, std::placeholders::_2, std::placeholders::_3));
|
||||||
m_mirrorName = sourceName;
|
m_mirrorName = sourceName;
|
||||||
} catch (...) {
|
} catch (...) {
|
||||||
|
@ -471,19 +471,19 @@ void Source::Mirror::audio_capture_cb(void* data, const audio_data* audio, bool
|
||||||
m_audioOutput.samples_per_sec = aoi->samples_per_sec;
|
m_audioOutput.samples_per_sec = aoi->samples_per_sec;
|
||||||
m_audioOutput.speakers = aoi->speakers;
|
m_audioOutput.speakers = aoi->speakers;
|
||||||
|
|
||||||
m_audioExists = true;
|
m_haveAudioOutput = true;
|
||||||
m_audioNotify.notify_all();
|
m_audioNotify.notify_all();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Source::Mirror::audio_output_cb() {
|
void Source::Mirror::audio_output_cb() {
|
||||||
std::unique_lock<std::mutex> ulock(m_audioLock);
|
std::unique_lock<std::mutex> ulock(m_audioLock);
|
||||||
|
|
||||||
while (!m_audioKill) {
|
while (!m_killAudioThread) {
|
||||||
if (m_audioExists) {
|
if (m_haveAudioOutput) {
|
||||||
obs_source_output_audio(m_source, &m_audioOutput);
|
obs_source_output_audio(m_source, &m_audioOutput);
|
||||||
m_audioExists = false;
|
m_haveAudioOutput = false;
|
||||||
}
|
}
|
||||||
m_audioNotify.wait(ulock, [this]() { return m_audioExists || m_audioKill; });
|
m_audioNotify.wait(ulock, [this]() { return m_haveAudioOutput || m_killAudioThread; });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -76,14 +76,14 @@ namespace Source {
|
||||||
|
|
||||||
// Audio
|
// Audio
|
||||||
bool m_enableAudio = false;
|
bool m_enableAudio = false;
|
||||||
std::unique_ptr<obs::audio_capture> m_mirrorAudio;
|
std::unique_ptr<obs::audio_capture> m_audioCapture;
|
||||||
std::mutex m_audioLock;
|
std::mutex m_audioLock;
|
||||||
std::condition_variable m_audioNotify;
|
std::condition_variable m_audioNotify;
|
||||||
obs_source_audio m_audioOutput;
|
obs_source_audio m_audioOutput;
|
||||||
std::vector<std::vector<float_t>> m_audioData;
|
std::vector<std::vector<float_t>> m_audioData;
|
||||||
std::thread m_audioThread;
|
std::thread m_audioThread;
|
||||||
bool m_audioKill = false;
|
bool m_killAudioThread = false;
|
||||||
bool m_audioExists = false;
|
bool m_haveAudioOutput = false;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Mirror(obs_data_t*, obs_source_t*);
|
Mirror(obs_data_t*, obs_source_t*);
|
||||||
|
|
Loading…
Reference in New Issue