48 lines
1.4 KiB
C++
48 lines
1.4 KiB
C++
#pragma once
|
|
|
|
#include <cstdint>
|
|
#include <functional>
|
|
#include <vector>
|
|
|
|
namespace fgc {
|
|
|
|
// One captured frame, owning a copy of its pixel buffer (was image_store_8bit).
|
|
struct Frame {
|
|
std::vector<uint8_t> data;
|
|
uint32_t width = 0;
|
|
uint32_t height = 0;
|
|
int channels = 0; // 1 (mono) or 3 (RGB)
|
|
long long timestamp_ms = 0; // Unix epoch ms
|
|
int cam_id = 0; // index into the configured camera list
|
|
};
|
|
|
|
// Abstraction over the camera array. Implemented by VimbaCameraSource (Allied
|
|
// Vision Vimba X) and MockCameraSource (synthetic frames, no hardware).
|
|
//
|
|
// Completed frames are delivered to the callback set via setFrameCallback();
|
|
// the consumer (ImagePipeline) encodes and stores them.
|
|
class ICameraSource {
|
|
public:
|
|
using FrameCallback = std::function<void(const Frame&)>;
|
|
|
|
virtual ~ICameraSource() = default;
|
|
|
|
virtual void open() = 0; // acquire/open cameras
|
|
virtual void close() = 0;
|
|
virtual void start() = 0; // begin acquisition
|
|
virtual void stop() = 0;
|
|
|
|
// Software-trigger a capture. Returns true on success.
|
|
virtual bool trigger() = 0;
|
|
|
|
// Optional: change the acquisition frame rate. Default no-op (e.g. mocks).
|
|
virtual bool setFrameRate(double /*fps*/) { return false; }
|
|
|
|
virtual void setFrameCallback(FrameCallback cb) = 0;
|
|
|
|
// Number of cameras this source manages.
|
|
virtual int cameraCount() const = 0;
|
|
};
|
|
|
|
} // namespace fgc
|