#pragma once #include "fgc/CameraMode.h" #include "fgc/Config.h" #include "fgc/ICameraSource.h" #include namespace fgc { // Real camera source backed by the Allied Vision Vimba X SDK (VmbCPP). Opens the // cameras named in CameraConfig; every on-camera setting comes from a CameraMode, // which is just a list of Vimba features written verbatim. // // The camera free-runs continuously at the mode's AcquisitionFrameRate with its // own auto-exposure tracking the light. trigger() hands over the latest complete // frame, restarting acquisition if the stream has stalled. Encode/save lives in // ImagePipeline. class VimbaCameraSource : public ICameraSource { public: explicit VimbaCameraSource(CameraConfig config); ~VimbaCameraSource() override; // Mode to apply at start(). Also the mode setMode() replaces. void setInitialMode(CameraMode mode); void open() override; void close() override; void start() override; void stop() override; bool trigger() override; bool setMode(const CameraMode& mode) override; void setFrameCallback(FrameCallback cb) override; int cameraCount() const override; std::vector deviceInfo() override; private: struct Impl; std::unique_ptr impl_; }; } // namespace fgc