8 #ifndef CSCORE_CSCORE_CPP_H_
9 #define CSCORE_CSCORE_CPP_H_
17 #include <wpi/ArrayRef.h>
18 #include <wpi/SmallVector.h>
19 #include <wpi/StringRef.h>
20 #include <wpi/Twine.h>
27 #pragma warning(disable : 26495)
70 kUnknown = CS_PIXFMT_UNKNOWN,
71 kMJPEG = CS_PIXFMT_MJPEG,
72 kYUYV = CS_PIXFMT_YUYV,
73 kRGB565 = CS_PIXFMT_RGB565,
75 kGray = CS_PIXFMT_GRAY
83 VideoMode(PixelFormat pixelFormat_,
int width_,
int height_,
int fps_) {
84 pixelFormat = pixelFormat_;
89 explicit operator bool()
const {
return pixelFormat == kUnknown; }
91 bool operator==(
const VideoMode& other)
const {
92 return pixelFormat == other.pixelFormat && width == other.width &&
93 height == other.height && fps == other.fps;
96 bool operator!=(
const VideoMode& other)
const {
return !(*
this == other); }
104 kSourceCreated = CS_SOURCE_CREATED,
105 kSourceDestroyed = CS_SOURCE_DESTROYED,
106 kSourceConnected = CS_SOURCE_CONNECTED,
107 kSourceDisconnected = CS_SOURCE_DISCONNECTED,
108 kSourceVideoModesUpdated = CS_SOURCE_VIDEOMODES_UPDATED,
109 kSourceVideoModeChanged = CS_SOURCE_VIDEOMODE_CHANGED,
110 kSourcePropertyCreated = CS_SOURCE_PROPERTY_CREATED,
111 kSourcePropertyValueUpdated = CS_SOURCE_PROPERTY_VALUE_UPDATED,
112 kSourcePropertyChoicesUpdated = CS_SOURCE_PROPERTY_CHOICES_UPDATED,
113 kSinkSourceChanged = CS_SINK_SOURCE_CHANGED,
114 kSinkCreated = CS_SINK_CREATED,
115 kSinkDestroyed = CS_SINK_DESTROYED,
116 kSinkEnabled = CS_SINK_ENABLED,
117 kSinkDisabled = CS_SINK_DISABLED,
118 kNetworkInterfacesChanged = CS_NETWORK_INTERFACES_CHANGED,
119 kTelemetryUpdated = CS_TELEMETRY_UPDATED,
120 kSinkPropertyCreated = CS_SINK_PROPERTY_CREATED,
121 kSinkPropertyValueUpdated = CS_SINK_PROPERTY_VALUE_UPDATED,
122 kSinkPropertyChoicesUpdated = CS_SINK_PROPERTY_CHOICES_UPDATED
126 explicit RawEvent(RawEvent::Kind kind_) : kind{kind_} {}
128 : kind{kind_}, name{name_.
str()} {
129 if (kind_ == kSinkCreated || kind_ == kSinkDestroyed ||
130 kind_ == kSinkEnabled || kind_ == kSinkDisabled)
131 sinkHandle = handle_;
133 sourceHandle = handle_;
136 : kind{kSourceVideoModeChanged},
137 sourceHandle{source_},
144 sourceHandle{source_},
146 propertyHandle{property_},
147 propertyKind{propertyKind_},
149 valueStr{valueStr_.
str()} {}
154 CS_Source sourceHandle = CS_INVALID_HANDLE;
155 CS_Sink sinkHandle = CS_INVALID_HANDLE;
164 CS_Property propertyHandle;
167 std::string valueStr;
174 CS_PropertyKind GetPropertyKind(CS_Property property, CS_Status* status);
175 std::string GetPropertyName(CS_Property property, CS_Status* status);
179 int GetProperty(CS_Property property, CS_Status* status);
180 void SetProperty(CS_Property property,
int value, CS_Status* status);
181 int GetPropertyMin(CS_Property property, CS_Status* status);
182 int GetPropertyMax(CS_Property property, CS_Status* status);
183 int GetPropertyStep(CS_Property property, CS_Status* status);
184 int GetPropertyDefault(CS_Property property, CS_Status* status);
185 std::string GetStringProperty(CS_Property property, CS_Status* status);
189 void SetStringProperty(CS_Property property,
const wpi::Twine& value,
191 std::vector<std::string> GetEnumPropertyChoices(CS_Property property,
199 CS_Source CreateUsbCameraDev(
const wpi::Twine& name,
int dev,
205 CS_Source CreateHttpCamera(
const wpi::Twine& name,
216 CS_SourceKind GetSourceKind(CS_Source source, CS_Status* status);
217 std::string GetSourceName(CS_Source source, CS_Status* status);
220 std::string GetSourceDescription(CS_Source source, CS_Status* status);
224 uint64_t GetSourceLastFrameTime(CS_Source source, CS_Status* status);
225 void SetSourceConnectionStrategy(CS_Source source,
228 bool IsSourceConnected(CS_Source source, CS_Status* status);
229 bool IsSourceEnabled(CS_Source source, CS_Status* status);
230 CS_Property GetSourceProperty(CS_Source source,
const wpi::Twine& name,
235 VideoMode GetSourceVideoMode(CS_Source source, CS_Status* status);
236 bool SetSourceVideoMode(CS_Source source,
const VideoMode& mode,
238 bool SetSourcePixelFormat(CS_Source source, VideoMode::PixelFormat pixelFormat,
240 bool SetSourceResolution(CS_Source source,
int width,
int height,
242 bool SetSourceFPS(CS_Source source,
int fps, CS_Status* status);
245 bool SetSourceConfigJson(CS_Source source,
const wpi::json& config,
247 std::string GetSourceConfigJson(CS_Source source, CS_Status* status);
248 wpi::json GetSourceConfigJsonObject(CS_Source source, CS_Status* status);
249 std::vector<VideoMode> EnumerateSourceVideoModes(CS_Source source,
254 CS_Source CopySource(CS_Source source, CS_Status* status);
255 void ReleaseSource(CS_Source source, CS_Status* status);
262 void SetCameraBrightness(CS_Source source,
int brightness, CS_Status* status);
263 int GetCameraBrightness(CS_Source source, CS_Status* status);
264 void SetCameraWhiteBalanceAuto(CS_Source source, CS_Status* status);
265 void SetCameraWhiteBalanceHoldCurrent(CS_Source source, CS_Status* status);
266 void SetCameraWhiteBalanceManual(CS_Source source,
int value,
268 void SetCameraExposureAuto(CS_Source source, CS_Status* status);
269 void SetCameraExposureHoldCurrent(CS_Source source, CS_Status* status);
270 void SetCameraExposureManual(CS_Source source,
int value, CS_Status* status);
277 std::string GetUsbCameraPath(CS_Source source, CS_Status* status);
278 UsbCameraInfo GetUsbCameraInfo(CS_Source source, CS_Status* status);
288 std::vector<std::string> GetHttpCameraUrls(CS_Source source, CS_Status* status);
295 void NotifySourceError(CS_Source source,
const wpi::Twine& msg,
297 void SetSourceConnected(CS_Source source,
bool connected, CS_Status* status);
298 void SetSourceDescription(CS_Source source,
const wpi::Twine& description,
300 CS_Property CreateSourceProperty(CS_Source source,
const wpi::Twine& name,
302 int step,
int defaultValue,
int value,
304 void SetSourceEnumPropertyChoices(CS_Source source, CS_Property property,
313 CS_Sink CreateMjpegServer(
const wpi::Twine& name,
316 CS_Sink CreateCvSink(
const wpi::Twine& name, CS_Status* status);
317 CS_Sink CreateCvSinkCallback(
const wpi::Twine& name,
318 std::function<
void(uint64_t time)> processFrame,
327 CS_SinkKind GetSinkKind(CS_Sink sink, CS_Status* status);
328 std::string GetSinkName(CS_Sink sink, CS_Status* status);
331 std::string GetSinkDescription(CS_Sink sink, CS_Status* status);
334 CS_Property GetSinkProperty(CS_Sink sink,
const wpi::Twine& name,
338 void SetSinkSource(CS_Sink sink, CS_Source source, CS_Status* status);
339 CS_Property GetSinkSourceProperty(CS_Sink sink,
const wpi::Twine& name,
341 bool SetSinkConfigJson(CS_Sink sink,
wpi::StringRef config, CS_Status* status);
342 bool SetSinkConfigJson(CS_Sink sink,
const wpi::json& config,
344 std::string GetSinkConfigJson(CS_Sink sink, CS_Status* status);
345 wpi::json GetSinkConfigJsonObject(CS_Sink sink, CS_Status* status);
346 CS_Source GetSinkSource(CS_Sink sink, CS_Status* status);
347 CS_Sink CopySink(CS_Sink sink, CS_Status* status);
348 void ReleaseSink(CS_Sink sink, CS_Status* status);
355 std::string GetMjpegServerListenAddress(CS_Sink sink, CS_Status* status);
356 int GetMjpegServerPort(CS_Sink sink, CS_Status* status);
363 void SetSinkDescription(CS_Sink sink,
const wpi::Twine& description,
365 std::string GetSinkError(CS_Sink sink, CS_Status* status);
368 void SetSinkEnabled(CS_Sink sink,
bool enabled, CS_Status* status);
375 void SetListenerOnStart(std::function<
void()> onStart);
376 void SetListenerOnExit(std::function<
void()> onExit);
378 CS_Listener AddListener(std::function<
void(
const RawEvent& event)> callback,
379 int eventMask,
bool immediateNotify, CS_Status* status);
381 void RemoveListener(CS_Listener handle, CS_Status* status);
384 bool NotifierDestroyed();
390 void SetTelemetryPeriod(
double seconds);
391 double GetTelemetryElapsedTime();
402 using LogFunc = std::function<void(
unsigned int level,
const char* file,
403 unsigned int line,
const char* msg)>;
404 void SetLogger(LogFunc func,
unsigned int min_level);
405 void SetDefaultLogger(
unsigned int min_level);
419 std::vector<UsbCameraInfo> EnumerateUsbCameras(CS_Status* status);
426 std::string GetHostname();
428 std::vector<std::string> GetNetworkInterfaces();
440 #endif // CSCORE_CSCORE_CPP_H_