diff --git a/src/Notifier.cpp b/src/Notifier.cpp index c3123799f9..7933246ae7 100644 --- a/src/Notifier.cpp +++ b/src/Notifier.cpp @@ -204,3 +204,15 @@ void Notifier::NotifySink(const SinkImpl& sink, CS_EventKind kind) { auto handleData = Sinks::GetInstance().Find(sink); NotifySink(sink.GetName(), handleData.first, kind); } + +void Notifier::NotifySinkSourceChanged(llvm::StringRef name, CS_Sink sink, + CS_Source source) { + auto thr = m_owner.GetThread(); + if (!thr) return; + + RawEvent event{name, sink, RawEvent::kSinkSourceChanged}; + event.sourceHandle = source; + + thr->m_notifications.emplace(std::move(event)); + thr->m_cond.notify_one(); +} diff --git a/src/Notifier.h b/src/Notifier.h index 3ec0203a3e..e8696ece7b 100644 --- a/src/Notifier.h +++ b/src/Notifier.h @@ -50,6 +50,8 @@ class Notifier { int value, llvm::StringRef valueStr); void NotifySink(llvm::StringRef name, CS_Sink sink, CS_EventKind kind); void NotifySink(const SinkImpl& sink, CS_EventKind kind); + void NotifySinkSourceChanged(llvm::StringRef name, CS_Sink sink, + CS_Source source); private: Notifier(); diff --git a/src/cscore_cpp.cpp b/src/cscore_cpp.cpp index a2d397285e..4abbbdbf8f 100644 --- a/src/cscore_cpp.cpp +++ b/src/cscore_cpp.cpp @@ -415,6 +415,8 @@ void SetSinkSource(CS_Sink sink, CS_Source source, CS_Status* status) { } data->sink->SetSource(sourceData->source); data->sourceHandle.store(source); + Notifier::GetInstance().NotifySinkSourceChanged(data->sink->GetName(), sink, + source); } CS_Source GetSinkSource(CS_Sink sink, CS_Status* status) {