arduino-audio-tools
Loading...
Searching...
No Matches
CameraFrameSourceOpenCV.h
Go to the documentation of this file.
1#pragma once
2
4#include <opencv2/core/core.hpp>
5#include <opencv2/videoio/videoio.hpp>
6#include <opencv2/imgcodecs/imgcodecs.hpp>
7#include <vector>
8
9namespace audio_tools {
10
38 public:
41 CameraFrameSourceOpenCV(int device) : device_index(device) {}
42
49 void setVideoInfo(VideoInfo info) { this->info = info; }
50
53 void setDevice(const char *device) { device_string = device; }
54
57 void setApiPreference(int api) { api_preference = api; }
58
61 void setJpegQuality(int quality) { jpeg_quality = quality; }
62
66 bool begin() {
67 bool ok = device_string != nullptr
70 if (!ok) {
71 LOGE("CameraFrameSourceOpenCV: could not open capture device");
72 return false;
73 }
74 if (info.width > 0) cap.set(cv::CAP_PROP_FRAME_WIDTH, info.width);
75 if (info.height > 0) cap.set(cv::CAP_PROP_FRAME_HEIGHT, info.height);
76 if (info.fps > 0) cap.set(cv::CAP_PROP_FPS, info.fps);
77
78 info.width = (uint16_t)cap.get(cv::CAP_PROP_FRAME_WIDTH);
79 info.height = (uint16_t)cap.get(cv::CAP_PROP_FRAME_HEIGHT);
80 float dev_fps = (float)cap.get(cv::CAP_PROP_FPS);
81 if (dev_fps > 0) info.fps = dev_fps;
83 return true;
84 }
85
87 void end() { cap.release(); }
88
92 const uint8_t *nextFrame(size_t &len) override {
93 if (!cap.read(frame) || frame.empty()) {
94 len = 0;
95 return nullptr;
96 }
98 len = frame.total() * frame.elemSize();
99 return frame.data;
100 }
101 std::vector<int> params{cv::IMWRITE_JPEG_QUALITY, jpeg_quality};
102 cv::imencode(".jpg", frame, jpeg_buffer, params);
103 len = jpeg_buffer.size();
104 return jpeg_buffer.data();
105 }
106
109 VideoInfo videoInfo() override { return info; }
110
111 protected:
112 cv::VideoCapture cap;
113 cv::Mat frame;
114 std::vector<uint8_t> jpeg_buffer;
117 const char *device_string = nullptr;
118 int api_preference = cv::CAP_ANY;
119 int jpeg_quality = 90;
120};
121
123
124} // namespace audio_tools
#define LOGE(...)
Definition AudioLoggerIDF.h:30
VideoFrameSource that pulls frames from the ESP32 camera (esp_camera.h, the Arduino-ESP32 "esp32-came...
Definition CameraFrameSourceESP32.h:24
VideoFrameSource that pulls frames from an OpenCV cv::VideoCapture (e.g. a USB/CSI webcam via V4L2 on...
Definition CameraFrameSourceOpenCV.h:37
VideoInfo videoInfo() override
Definition CameraFrameSourceOpenCV.h:109
int device_index
Definition CameraFrameSourceOpenCV.h:116
cv::Mat frame
Definition CameraFrameSourceOpenCV.h:113
CameraFrameSourceOpenCV(int device)
Definition CameraFrameSourceOpenCV.h:41
bool begin()
Definition CameraFrameSourceOpenCV.h:66
const uint8_t * nextFrame(size_t &len) override
Definition CameraFrameSourceOpenCV.h:92
VideoInfo info
Definition CameraFrameSourceOpenCV.h:115
void setApiPreference(int api)
Definition CameraFrameSourceOpenCV.h:57
void end()
Releases the capture device.
Definition CameraFrameSourceOpenCV.h:87
void setVideoInfo(VideoInfo info)
Definition CameraFrameSourceOpenCV.h:49
std::vector< uint8_t > jpeg_buffer
Definition CameraFrameSourceOpenCV.h:114
int api_preference
Definition CameraFrameSourceOpenCV.h:118
void setJpegQuality(int quality)
Definition CameraFrameSourceOpenCV.h:61
const char * device_string
Definition CameraFrameSourceOpenCV.h:117
void setDevice(const char *device)
Definition CameraFrameSourceOpenCV.h:53
cv::VideoCapture cap
Definition CameraFrameSourceOpenCV.h:112
int jpeg_quality
Definition CameraFrameSourceOpenCV.h:119
Pull-based provider of one already-encoded video/image frame at a time - e.g. wraps a camera capture ...
Definition Video.h:150
Generic Implementation of sound input and output for desktop environments using portaudio.
Definition LMSEchoCancellationStream.h:6
Basic video information (width/height/codec/frame size), analogous to AudioInfo - common to both Demu...
Definition Video.h:102
float fps
Definition Video.h:109
uint16_t height
Frame height in pixels.
Definition Video.h:106
uint16_t width
Frame width in pixels.
Definition Video.h:104
VideoFormat format
Video codec - VideoFormat::UNKNOWN if not (yet) determined.
Definition Video.h:111