From fe81095bf011786ee5303549abc8debb22cddcf8 Mon Sep 17 00:00:00 2001 From: Nikita Kostovsky Date: Fri, 28 Feb 2025 23:28:12 +0100 Subject: got 480 fps with pixels calc --- src/camera/veyeimx287m.h | 73 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 src/camera/veyeimx287m.h (limited to 'src/camera/veyeimx287m.h') diff --git a/src/camera/veyeimx287m.h b/src/camera/veyeimx287m.h new file mode 100644 index 0000000..9986e59 --- /dev/null +++ b/src/camera/veyeimx287m.h @@ -0,0 +1,73 @@ +#pragma once + +#include + +#include +#include + +#include "constants.h" +#include "image.h" + +#include "icamera.h" + +class VeyeIMX287m : public ICamera +{ + constexpr static char videoDevice[] = "/dev/video0"; + +public: + using buffer_t = std::array; + +public: + VeyeIMX287m(); + ~VeyeIMX287m() override; + +public: + static std::vector> search(); + +public: + bool startStream() override; + + bool init(); + + bool setExposureTimeUs(int value) override; + bool setGain(int value) override; + + bool setLaserLevel(int value) override; + + bool setSomething(int value) override; + + // bool dequeueImageBuffer(Image &image); + bool dequeueImageBuffer(size_t &image); + bool getImage(Image &image); + // Image &getImage(); + +public: + libcamera::Signal> newPixels; + libcamera::Signal> newImage; + +private: + bool setCamParam(unsigned int v4l2controlId, int value); + bool openCam(); + bool selectCam(int camIdx = 0); + bool initCam(); + + void dequeueFrameLoop(std::stop_token stopToken); + void calcFrameLoop(std::stop_token stopToken); + +private: + int m_cam_fd{-1}; + + static constexpr uint8_t BUFFER_COUNT{8}; + + std::array m_imageMutexes; + std::array m_images; + std::array m_bufferMutexes; + std::array m_videoBuffers; + + // std::mutex m_queueMtx; + std::mutex m_camMtx; + std::queue m_buffersQueue; + + std::jthread m_streamThread; + std::jthread m_calcThreads[4]; +}; -- cgit v1.2.3-70-g09d2