#include "camera.hpp" #include #include #include static cv::VideoCapture* cap = nullptr; static cv::Mat pubframe; static std::mutex frame_mutex; static std::atomic stream_running{false}; bool camera_init() { cap = new cv::VideoCapture(0); if (!cap->isOpened()) return false; cap->set(cv::CAP_PROP_FOURCC, cv::VideoWriter::fourcc('M', 'J', 'P', 'G')); cap->set(cv::CAP_PROP_FRAME_WIDTH, CAMERA_WIDTH); cap->set(cv::CAP_PROP_FRAME_HEIGHT, CAMERA_HEIGHT); cap->set(cv::CAP_PROP_AUTO_EXPOSURE, -1); return true; } void camera_deinit() { if (cap) { cap->release(); delete cap; cap = nullptr; } } cv::Mat camera_capture() { std::lock_guard lock(frame_mutex); return pubframe.clone(); } cv::Mat camera_resize(const cv::Mat& src) { cv::Mat resized; cv::resize(src, resized, cv::Size(IMAGE_WIDTH, IMAGE_HEIGHT)); return resized; } void camera_stream_start() { stream_running.store(true); std::thread([]() { cv::Mat tmp; while (stream_running.load()) { if (cap && cap->read(tmp)) { std::lock_guard lock(frame_mutex); pubframe = tmp.clone(); } } }).detach(); }