8 #ifndef CSCORE_CSCORE_RAW_H_
9 #define CSCORE_CSCORE_RAW_H_
14 #include "cscore_oo.h"
37 void CS_AllocateRawFrameData(
CS_RawFrame* frame,
int requestedSize);
40 uint64_t CS_GrabRawSinkFrame(CS_Sink sink,
struct CS_RawFrame* rawImage,
42 uint64_t CS_GrabRawSinkFrameTimeout(CS_Sink sink,
struct CS_RawFrame* rawImage,
43 double timeout, CS_Status* status);
45 CS_Sink CS_CreateRawSink(
const char* name, CS_Status* status);
47 CS_Sink CS_CreateRawSinkCallback(
const char* name,
void* data,
48 void (*processFrame)(
void* data,
52 void CS_PutRawSourceFrame(CS_Source source,
const struct CS_RawFrame* image,
55 CS_Source CS_CreateRawSource(
const char* name,
const CS_VideoMode* mode,
70 pixelFormat = CS_PIXFMT_UNKNOWN;
76 ~RawFrame() { CS_FreeRawFrameData(
this); }
84 CS_Source CreateRawSource(
const wpi::Twine& name,
const VideoMode& mode,
87 CS_Sink CreateRawSink(
const wpi::Twine& name, CS_Status* status);
88 CS_Sink CreateRawSinkCallback(
const wpi::Twine& name,
89 std::function<
void(uint64_t time)> processFrame,
92 void PutSourceFrame(CS_Source source,
const CS_RawFrame& image,
94 uint64_t GrabSinkFrame(CS_Sink sink,
CS_RawFrame& image, CS_Status* status);
95 uint64_t GrabSinkFrameTimeout(CS_Sink sink,
CS_RawFrame& image,
double timeout,
103 class RawSource :
public ImageSource {
105 RawSource() =
default;
113 RawSource(
const wpi::Twine& name,
const VideoMode& mode);
124 RawSource(
const wpi::Twine& name, VideoMode::PixelFormat pixelFormat,
125 int width,
int height,
int fps);
133 void PutFrame(RawFrame& image);
141 class RawSink :
public ImageSink {
168 std::function<
void(uint64_t time)> processFrame);
180 uint64_t GrabFrame(RawFrame& image,
double timeout = 0.225)
const;
190 uint64_t GrabFrameNoTimeout(RawFrame& image)
const;
193 inline RawSource::RawSource(
const wpi::Twine& name,
const VideoMode& mode) {
194 m_handle = CreateRawSource(name, mode, &m_status);
197 inline RawSource::RawSource(
const wpi::Twine& name,
198 VideoMode::PixelFormat format,
int width,
199 int height,
int fps) {
201 CreateRawSource(name, VideoMode{
format, width, height, fps}, &m_status);
204 inline void RawSource::PutFrame(RawFrame& image) {
206 PutSourceFrame(m_handle, image, &m_status);
209 inline RawSink::RawSink(
const wpi::Twine& name) {
210 m_handle = CreateRawSink(name, &m_status);
213 inline RawSink::RawSink(
const wpi::Twine& name,
214 std::function<
void(uint64_t time)> processFrame) {
215 m_handle = CreateRawSinkCallback(name, processFrame, &m_status);
218 inline uint64_t RawSink::GrabFrame(RawFrame& image,
double timeout)
const {
220 return GrabSinkFrameTimeout(m_handle, image, timeout, &m_status);
223 inline uint64_t RawSink::GrabFrameNoTimeout(RawFrame& image)
const {
225 return GrabSinkFrame(m_handle, image, &m_status);
234 #endif // CSCORE_CSCORE_RAW_H_