Notify on source and sink create and destroy.

This commit is contained in:
Peter Johnson
2016-11-18 08:49:20 -08:00
parent 154ae5dcbf
commit b245725941
5 changed files with 30 additions and 7 deletions

View File

@@ -16,6 +16,7 @@
#include "c_util.h"
#include "Handle.h"
#include "Log.h"
#include "Notifier.h"
using namespace cs;
@@ -97,14 +98,18 @@ namespace cs {
CS_Sink CreateCvSink(llvm::StringRef name, CS_Status* status) {
auto sink = std::make_shared<CvSinkImpl>(name);
return Sinks::GetInstance().Allocate(CS_SINK_CV, sink);
auto handle = Sinks::GetInstance().Allocate(CS_SINK_CV, sink);
Notifier::GetInstance().NotifySink(name, handle, CS_SINK_CREATED);
return handle;
}
CS_Sink CreateCvSinkCallback(llvm::StringRef name,
std::function<void(uint64_t time)> processFrame,
CS_Status* status) {
auto sink = std::make_shared<CvSinkImpl>(name, processFrame);
return Sinks::GetInstance().Allocate(CS_SINK_CV, sink);
auto handle = Sinks::GetInstance().Allocate(CS_SINK_CV, sink);
Notifier::GetInstance().NotifySink(name, handle, CS_SINK_CREATED);
return handle;
}
void SetSinkDescription(CS_Sink sink, llvm::StringRef description,

View File

@@ -16,6 +16,7 @@
#include "c_util.h"
#include "Handle.h"
#include "Log.h"
#include "Notifier.h"
using namespace cs;
@@ -157,7 +158,9 @@ namespace cs {
CS_Source CreateCvSource(llvm::StringRef name, const VideoMode& mode,
CS_Status* status) {
auto source = std::make_shared<CvSourceImpl>(name, mode);
return Sources::GetInstance().Allocate(CS_SOURCE_CV, source);
auto handle = Sources::GetInstance().Allocate(CS_SOURCE_CV, source);
Notifier::GetInstance().NotifySource(name, handle, CS_SOURCE_CREATED);
return handle;
}
void PutSourceFrame(CS_Source source, cv::Mat& image, CS_Status* status) {

View File

@@ -18,6 +18,7 @@
#include "cscore_cpp.h"
#include "Handle.h"
#include "Log.h"
#include "Notifier.h"
#include "SourceImpl.h"
using namespace cs;
@@ -696,7 +697,9 @@ CS_Sink CreateMJPEGServer(llvm::StringRef name, llvm::StringRef listenAddress,
name, desc.str(),
std::unique_ptr<wpi::NetworkAcceptor>(
new wpi::TCPAcceptor(port, str.c_str(), Logger::GetInstance())));
return Sinks::GetInstance().Allocate(CS_SINK_MJPEG, sink);
auto handle = Sinks::GetInstance().Allocate(CS_SINK_MJPEG, sink);
Notifier::GetInstance().NotifySink(name, handle, CS_SINK_CREATED);
return handle;
}
} // namespace cs

View File

@@ -37,6 +37,7 @@
#include "c_util.h"
#include "Handle.h"
#include "Log.h"
#include "Notifier.h"
using namespace cs;
@@ -1360,7 +1361,9 @@ CS_Source CreateUSBCameraDev(llvm::StringRef name, int dev, CS_Status* status) {
CS_Source CreateUSBCameraPath(llvm::StringRef name, llvm::StringRef path,
CS_Status* status) {
auto source = std::make_shared<USBCameraImpl>(name, path);
return Sources::GetInstance().Allocate(CS_SOURCE_USB, source);
auto handle = Sources::GetInstance().Allocate(CS_SOURCE_USB, source);
Notifier::GetInstance().NotifySource(name, handle, CS_SOURCE_CREATED);
return handle;
}
std::vector<USBCameraInfo> EnumerateUSBCameras(CS_Status* status) {

View File

@@ -13,6 +13,7 @@
#include "SinkImpl.h"
#include "SourceImpl.h"
#include "Handle.h"
#include "Notifier.h"
using namespace cs;
@@ -341,7 +342,11 @@ void ReleaseSource(CS_Source source, CS_Status* status) {
*status = CS_INVALID_HANDLE;
return;
}
if (data->refCount-- == 0) inst.Free(source);
if (data->refCount-- == 0) {
Notifier::GetInstance().NotifySource(data->source->GetName(), source,
CS_SOURCE_DESTROYED);
inst.Free(source);
}
}
//
@@ -450,7 +455,11 @@ void ReleaseSink(CS_Sink sink, CS_Status* status) {
*status = CS_INVALID_HANDLE;
return;
}
if (data->refCount-- == 0) inst.Free(sink);
if (data->refCount-- == 0) {
Notifier::GetInstance().NotifySink(data->sink->GetName(), sink,
CS_SINK_DESTROYED);
inst.Free(sink);
}
}
//