8 #ifndef CSCORE_CSCORE_CV_H_
9 #define CSCORE_CSCORE_CV_H_
13 #ifdef CSCORE_CSCORE_RAW_CV_H_
14 #error "Cannot include both cscore_cv.h and cscore_raw_cv.h in the same file"
18 #include "cscore_oo.h"
22 #if CV_VERSION_MAJOR < 4
30 void CS_PutSourceFrame(CS_Source source,
struct CvMat* image,
33 uint64_t CS_GrabSinkFrame(CS_Sink sink,
struct CvMat* image, CS_Status* status);
34 uint64_t CS_GrabSinkFrameTimeout(CS_Sink sink,
struct CvMat* image,
35 double timeout, CS_Status* status);
41 #endif // CV_VERSION_MAJOR < 4
45 #include "cscore_oo.h"
60 uint64_t CS_GrabSinkFrameCpp(CS_Sink sink, cv::Mat* image, CS_Status* status);
61 uint64_t CS_GrabSinkFrameTimeoutCpp(CS_Sink sink, cv::Mat* image,
62 double timeout, CS_Status* status);
63 void CS_PutSourceFrameCpp(CS_Source source, cv::Mat* image, CS_Status* status);
67 void PutSourceFrame(CS_Source source, cv::Mat& image, CS_Status* status);
68 uint64_t GrabSinkFrame(CS_Sink sink, cv::Mat& image, CS_Status* status);
69 uint64_t GrabSinkFrameTimeout(CS_Sink sink, cv::Mat& image,
double timeout,
78 class CvSource :
public ImageSource {
88 CvSource(
const wpi::Twine& name,
const VideoMode& mode);
99 CvSource(
const wpi::Twine& name, VideoMode::PixelFormat pixelFormat,
100 int width,
int height,
int fps);
111 void PutFrame(cv::Mat& image);
120 class CvSink :
public ImageSink {
147 std::function<
void(uint64_t time)> processFrame);
158 uint64_t GrabFrame(cv::Mat& image,
double timeout = 0.225)
const;
168 uint64_t GrabFrameNoTimeout(cv::Mat& image)
const;
171 inline CvSource::CvSource(
const wpi::Twine& name,
const VideoMode& mode) {
172 m_handle = CreateCvSource(name, mode, &m_status);
175 inline CvSource::CvSource(
const wpi::Twine& name, VideoMode::PixelFormat format,
176 int width,
int height,
int fps) {
178 CreateCvSource(name, VideoMode{
format, width, height, fps}, &m_status);
181 inline void CvSource::PutFrame(cv::Mat& image) {
183 PutSourceFrame(m_handle, image, &m_status);
186 inline CvSink::CvSink(
const wpi::Twine& name) {
187 m_handle = CreateCvSink(name, &m_status);
191 std::function<
void(uint64_t time)> processFrame) {
192 m_handle = CreateCvSinkCallback(name, processFrame, &m_status);
195 inline uint64_t CvSink::GrabFrame(cv::Mat& image,
double timeout)
const {
197 return GrabSinkFrameTimeout(m_handle, image, timeout, &m_status);
200 inline uint64_t CvSink::GrabFrameNoTimeout(cv::Mat& image)
const {
202 return GrabSinkFrame(m_handle, image, &m_status);
209 #endif // CSCORE_CSCORE_CV_H_