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>
64 kUnknown = CS_PIXFMT_UNKNOWN,
65 kMJPEG = CS_PIXFMT_MJPEG,
66 kYUYV = CS_PIXFMT_YUYV,
67 kRGB565 = CS_PIXFMT_RGB565,
69 kGray = CS_PIXFMT_GRAY
77 VideoMode(PixelFormat pixelFormat_,
int width_,
int height_,
int fps_) {
78 pixelFormat = pixelFormat_;
83 explicit operator bool()
const {
return pixelFormat == kUnknown; }
85 bool operator==(
const VideoMode& other)
const {
86 return pixelFormat == other.pixelFormat && width == other.width &&
87 height == other.height && fps == other.fps;
90 bool operator!=(
const VideoMode& other)
const {
return !(*
this == other); }
98 kSourceCreated = CS_SOURCE_CREATED,
99 kSourceDestroyed = CS_SOURCE_DESTROYED,
100 kSourceConnected = CS_SOURCE_CONNECTED,
101 kSourceDisconnected = CS_SOURCE_DISCONNECTED,
102 kSourceVideoModesUpdated = CS_SOURCE_VIDEOMODES_UPDATED,
103 kSourceVideoModeChanged = CS_SOURCE_VIDEOMODE_CHANGED,
104 kSourcePropertyCreated = CS_SOURCE_PROPERTY_CREATED,
105 kSourcePropertyValueUpdated = CS_SOURCE_PROPERTY_VALUE_UPDATED,
106 kSourcePropertyChoicesUpdated = CS_SOURCE_PROPERTY_CHOICES_UPDATED,
107 kSinkSourceChanged = CS_SINK_SOURCE_CHANGED,
108 kSinkCreated = CS_SINK_CREATED,
109 kSinkDestroyed = CS_SINK_DESTROYED,
110 kSinkEnabled = CS_SINK_ENABLED,
111 kSinkDisabled = CS_SINK_DISABLED,
112 kNetworkInterfacesChanged = CS_NETWORK_INTERFACES_CHANGED,
113 kTelemetryUpdated = CS_TELEMETRY_UPDATED,
114 kSinkPropertyCreated = CS_SINK_PROPERTY_CREATED,
115 kSinkPropertyValueUpdated = CS_SINK_PROPERTY_VALUE_UPDATED,
116 kSinkPropertyChoicesUpdated = CS_SINK_PROPERTY_CHOICES_UPDATED
120 explicit RawEvent(RawEvent::Kind kind_) : kind{kind_} {}
122 : kind{kind_}, name{name_.
str()} {
123 if (kind_ == kSinkCreated || kind_ == kSinkDestroyed ||
124 kind_ == kSinkEnabled || kind_ == kSinkDisabled)
125 sinkHandle = handle_;
127 sourceHandle = handle_;
130 : kind{kSourceVideoModeChanged},
131 sourceHandle{source_},
138 sourceHandle{source_},
140 propertyHandle{property_},
141 propertyKind{propertyKind_},
143 valueStr{valueStr_.
str()} {}
148 CS_Source sourceHandle = CS_INVALID_HANDLE;
149 CS_Sink sinkHandle = CS_INVALID_HANDLE;
158 CS_Property propertyHandle;
161 std::string valueStr;
168 CS_PropertyKind GetPropertyKind(CS_Property property, CS_Status* status);
169 std::string GetPropertyName(CS_Property property, CS_Status* status);
173 int GetProperty(CS_Property property, CS_Status* status);
174 void SetProperty(CS_Property property,
int value, CS_Status* status);
175 int GetPropertyMin(CS_Property property, CS_Status* status);
176 int GetPropertyMax(CS_Property property, CS_Status* status);
177 int GetPropertyStep(CS_Property property, CS_Status* status);
178 int GetPropertyDefault(CS_Property property, CS_Status* status);
179 std::string GetStringProperty(CS_Property property, CS_Status* status);
183 void SetStringProperty(CS_Property property,
const wpi::Twine& value,
185 std::vector<std::string> GetEnumPropertyChoices(CS_Property property,
193 CS_Source CreateUsbCameraDev(
const wpi::Twine& name,
int dev,
199 CS_Source CreateHttpCamera(
const wpi::Twine& name,
210 CS_SourceKind GetSourceKind(CS_Source source, CS_Status* status);
211 std::string GetSourceName(CS_Source source, CS_Status* status);
214 std::string GetSourceDescription(CS_Source source, CS_Status* status);
218 uint64_t GetSourceLastFrameTime(CS_Source source, CS_Status* status);
219 void SetSourceConnectionStrategy(CS_Source source,
222 bool IsSourceConnected(CS_Source source, CS_Status* status);
223 bool IsSourceEnabled(CS_Source source, CS_Status* status);
224 CS_Property GetSourceProperty(CS_Source source,
const wpi::Twine& name,
229 VideoMode GetSourceVideoMode(CS_Source source, CS_Status* status);
230 bool SetSourceVideoMode(CS_Source source,
const VideoMode& mode,
232 bool SetSourcePixelFormat(CS_Source source, VideoMode::PixelFormat pixelFormat,
234 bool SetSourceResolution(CS_Source source,
int width,
int height,
236 bool SetSourceFPS(CS_Source source,
int fps, CS_Status* status);
239 bool SetSourceConfigJson(CS_Source source,
const wpi::json& config,
241 std::string GetSourceConfigJson(CS_Source source, CS_Status* status);
242 wpi::json GetSourceConfigJsonObject(CS_Source source, CS_Status* status);
243 std::vector<VideoMode> EnumerateSourceVideoModes(CS_Source source,
248 CS_Source CopySource(CS_Source source, CS_Status* status);
249 void ReleaseSource(CS_Source source, CS_Status* status);
256 void SetCameraBrightness(CS_Source source,
int brightness, CS_Status* status);
257 int GetCameraBrightness(CS_Source source, CS_Status* status);
258 void SetCameraWhiteBalanceAuto(CS_Source source, CS_Status* status);
259 void SetCameraWhiteBalanceHoldCurrent(CS_Source source, CS_Status* status);
260 void SetCameraWhiteBalanceManual(CS_Source source,
int value,
262 void SetCameraExposureAuto(CS_Source source, CS_Status* status);
263 void SetCameraExposureHoldCurrent(CS_Source source, CS_Status* status);
264 void SetCameraExposureManual(CS_Source source,
int value, CS_Status* status);
271 std::string GetUsbCameraPath(CS_Source source, CS_Status* status);
272 UsbCameraInfo GetUsbCameraInfo(CS_Source source, CS_Status* status);
282 std::vector<std::string> GetHttpCameraUrls(CS_Source source, CS_Status* status);
289 void PutSourceFrame(CS_Source source, cv::Mat& image, CS_Status* status);
290 void NotifySourceError(CS_Source source,
const wpi::Twine& msg,
292 void SetSourceConnected(CS_Source source,
bool connected, CS_Status* status);
293 void SetSourceDescription(CS_Source source,
const wpi::Twine& description,
295 CS_Property CreateSourceProperty(CS_Source source,
const wpi::Twine& name,
297 int step,
int defaultValue,
int value,
299 void SetSourceEnumPropertyChoices(CS_Source source, CS_Property property,
308 CS_Sink CreateMjpegServer(
const wpi::Twine& name,
311 CS_Sink CreateCvSink(
const wpi::Twine& name, CS_Status* status);
312 CS_Sink CreateCvSinkCallback(
const wpi::Twine& name,
313 std::function<
void(uint64_t time)> processFrame,
321 CS_SinkKind GetSinkKind(CS_Sink sink, CS_Status* status);
322 std::string GetSinkName(CS_Sink sink, CS_Status* status);
325 std::string GetSinkDescription(CS_Sink sink, CS_Status* status);
328 CS_Property GetSinkProperty(CS_Sink sink,
const wpi::Twine& name,
332 void SetSinkSource(CS_Sink sink, CS_Source source, CS_Status* status);
333 CS_Property GetSinkSourceProperty(CS_Sink sink,
const wpi::Twine& name,
335 bool SetSinkConfigJson(CS_Sink sink,
wpi::StringRef config, CS_Status* status);
336 bool SetSinkConfigJson(CS_Sink sink,
const wpi::json& config,
338 std::string GetSinkConfigJson(CS_Sink sink, CS_Status* status);
339 wpi::json GetSinkConfigJsonObject(CS_Sink sink, CS_Status* status);
340 CS_Source GetSinkSource(CS_Sink sink, CS_Status* status);
341 CS_Sink CopySink(CS_Sink sink, CS_Status* status);
342 void ReleaseSink(CS_Sink sink, CS_Status* status);
349 std::string GetMjpegServerListenAddress(CS_Sink sink, CS_Status* status);
350 int GetMjpegServerPort(CS_Sink sink, CS_Status* status);
357 void SetSinkDescription(CS_Sink sink,
const wpi::Twine& description,
359 uint64_t GrabSinkFrame(CS_Sink sink, cv::Mat& image, CS_Status* status);
360 uint64_t GrabSinkFrameTimeout(CS_Sink sink, cv::Mat& image,
double timeout,
362 std::string GetSinkError(CS_Sink sink, CS_Status* status);
365 void SetSinkEnabled(CS_Sink sink,
bool enabled, CS_Status* status);
372 void SetListenerOnStart(std::function<
void()> onStart);
373 void SetListenerOnExit(std::function<
void()> onExit);
375 CS_Listener AddListener(std::function<
void(
const RawEvent& event)> callback,
376 int eventMask,
bool immediateNotify, CS_Status* status);
378 void RemoveListener(CS_Listener handle, CS_Status* status);
381 bool NotifierDestroyed();
387 void SetTelemetryPeriod(
double seconds);
388 double GetTelemetryElapsedTime();
399 using LogFunc = std::function<void(
unsigned int level,
const char* file,
400 unsigned int line,
const char* msg)>;
401 void SetLogger(LogFunc func,
unsigned int min_level);
402 void SetDefaultLogger(
unsigned int min_level);
416 std::vector<UsbCameraInfo> EnumerateUsbCameras(CS_Status* status);
423 std::string GetHostname();
425 std::vector<std::string> GetNetworkInterfaces();
439 uint64_t CS_GrabSinkFrameCpp(CS_Sink sink, cv::Mat* image, CS_Status* status);
440 uint64_t CS_GrabSinkFrameTimeoutCpp(CS_Sink sink, cv::Mat* image,
441 double timeout, CS_Status* status);
442 void CS_PutSourceFrameCpp(CS_Source source, cv::Mat* image, CS_Status* status);
446 #endif // CSCORE_CSCORE_CPP_H_
CS_TelemetryKind
Telemetry kinds.
Definition: cscore_c.h:177
CameraServer (cscore) namespace.
Definition: cscore_oo.inl:11
CS_HttpCameraKind
HTTP Camera kinds.
Definition: cscore_c.h:137
CS_SinkKind
Sink kinds.
Definition: cscore_c.h:147
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory)...
Definition: ArrayRef.h:41
Listener event.
Definition: cscore_cpp.h:96
Definition: cscore_cpp.h:24
WPILib C++ utilities (wpiutil) namespace.
Definition: SmallString.h:21
std::vector< std::string > otherPaths
Other path aliases to device (e.g.
Definition: cscore_cpp.h:56
std::string str() const
Return the twine contents as a std::string.
CS_ConnectionStrategy
Connection strategy.
Definition: cscore_c.h:183
CS_SourceKind
Source kinds.
Definition: cscore_c.h:127
USB camera information.
Definition: cscore_cpp.h:48
a class to store JSON values
Definition: json.h:2714
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:49
int dev
Device number (e.g.
Definition: cscore_cpp.h:50
CS_PropertyKind
Property kinds.
Definition: cscore_c.h:116
std::string path
Path to device if available (e.g.
Definition: cscore_cpp.h:52
std::string name
Vendor/model name of the camera as provided by the USB driver.
Definition: cscore_cpp.h:54
Twine - A lightweight data structure for efficiently representing the concatenation of temporary valu...
Definition: Twine.h:79
Video mode.
Definition: cscore_cpp.h:62
Video mode.
Definition: cscore_c.h:106