SmartSpectra C++ SDK
Measure human vitals from video with SmartSpectra C++ SDK.
Loading...
Searching...
No Matches
video_source.hpp
1// video_source.hpp
2// Created by Greg on 2/29/2024.
3// Copyright (C) 2025 Presage Security, Inc.
4//
5// SPDX-License-Identifier: LGPL-3.0-or-later
6
7#pragma once
8// === standard library includes (if any) ===
9#include <cstdint>
10#include <vector>
11// === third-party includes (if any) ===
12#include <mediapipe/framework/port/opencv_core_inc.h>
13#include <absl/status/statusor.h>
14// === local includes (if any) ===
15#include "settings.hpp"
16#include "input_transformer.hpp"
17
23
24namespace presage::smartspectra::video_source {
25
31public:
33 VideoSource& operator>>(cv::Mat& frame);
34
36 virtual absl::Status Initialize(const VideoSourceSettings& settings);
37
38 virtual ~VideoSource() = default;
39
40 // == timestamp controls
41 virtual bool SupportsExactFrameTimestamp() const = 0;
42
46 virtual int64_t GetFrameTimestamp() const = 0;
47
48 // These have definitions here, technically making this not a true interface.
49 // Ignore this for now, maybe redesign later, (e.g. using C++20 concepts?).
50
51 // == exposure controls ==
52
57 virtual absl::Status TurnOnAutoExposure();
58
63 virtual absl::Status TurnOffAutoExposure();
64
69 virtual absl::Status ToggleAutoExposure();
70
75 virtual absl::StatusOr<bool> IsAutoExposureOn();
76
82 virtual absl::Status IncreaseExposure();
83
89 virtual absl::Status DecreaseExposure();
90
97 virtual absl::Status SetExposure(double value);
98
104 virtual absl::StatusOr<double> GetExposure();
105
110 virtual bool SupportsExposureControls();
111
112 // == white balance controls ==
113
118 virtual bool SupportsWhiteBalanceControls();
119
124 virtual absl::Status TurnOnAutoWhiteBalance();
125
130 virtual absl::Status TurnOffAutoWhiteBalance();
131
136 virtual absl::Status ToggleAutoWhiteBalance();
137
142 virtual absl::StatusOr<bool> IsAutoWhiteBalanceOn();
143
149 virtual absl::Status IncreaseWhiteBalance();
150
156 virtual absl::Status DecreaseWhiteBalance();
157
164 virtual absl::Status SetWhiteBalance(double value);
165
171 virtual absl::StatusOr<double> GetWhiteBalance();
172
173 // == gain controls ==
174
179 virtual bool SupportsGainControl();
180
185 virtual absl::Status IncreaseGain();
186
191 virtual absl::Status DecreaseGain();
192
199 virtual absl::Status SetGain(double value);
200
206 virtual absl::StatusOr<double> GetGain();
207
208 virtual int GetWidth();
209
210 virtual int GetHeight();
211
212 virtual InputTransformMode GetDefaultInputTransformMode();
213
215 bool HasFrameDimensions();
216
217 // == compressed frame support
223 virtual bool SupportsCompressedOutput();
224
231 virtual bool ProduceCompressedFrame(std::vector<uint8_t>& jpeg_data);
232
233protected:
234 InputTransformer input_transformer;
235 virtual void ProducePreTransformFrame(cv::Mat& frame) = 0;
236};
237
238
239} // namespace presage::smartspectra::video_source
Abstract interface for camera/video input sources.
Definition video_source.hpp:30
virtual bool SupportsExposureControls()
Check if this video source supports exposure controls.
Definition video_source.cpp:48
virtual absl::Status SetWhiteBalance(double value)
Set white balance temperature to a normalized value.
Definition video_source.cpp:80
virtual bool SupportsCompressedOutput()
Definition video_source.cpp:139
virtual bool ProduceCompressedFrame(std::vector< uint8_t > &jpeg_data)
Definition video_source.cpp:143
bool HasFrameDimensions()
Definition video_source.cpp:116
virtual absl::StatusOr< double > GetGain()
Get current gain as a normalized value.
Definition video_source.cpp:104
virtual absl::Status IncreaseExposure()
Increase exposure by a fixed hardware-specific step.
Definition video_source.cpp:32
virtual bool SupportsWhiteBalanceControls()
Check if this video source supports white balance controls.
Definition video_source.cpp:52
virtual absl::StatusOr< double > GetWhiteBalance()
Get current white balance temperature as a normalized value.
Definition video_source.cpp:84
virtual bool SupportsGainControl()
Check if this video source supports gain controls.
Definition video_source.cpp:88
virtual absl::Status TurnOffAutoExposure()
Disable automatic exposure and switch to manual mode.
Definition video_source.cpp:20
virtual absl::StatusOr< bool > IsAutoExposureOn()
Check if automatic exposure is currently enabled.
Definition video_source.cpp:28
virtual absl::Status SetGain(double value)
Set gain to a normalized value.
Definition video_source.cpp:100
virtual absl::Status DecreaseExposure()
Decrease exposure by a fixed hardware-specific step.
Definition video_source.cpp:36
virtual absl::StatusOr< bool > IsAutoWhiteBalanceOn()
Check if automatic white balance is currently enabled.
Definition video_source.cpp:68
virtual absl::Status Initialize(const VideoSourceSettings &settings)
Definition video_source.cpp:126
VideoSource & operator>>(cv::Mat &frame)
Definition video_source.cpp:120
virtual absl::Status SetExposure(double value)
Set exposure to a normalized value.
Definition video_source.cpp:40
virtual absl::Status ToggleAutoWhiteBalance()
Toggle between automatic and manual white balance modes.
Definition video_source.cpp:64
virtual absl::Status IncreaseWhiteBalance()
Increase white balance temperature by a fixed hardware-specific step.
Definition video_source.cpp:72
virtual absl::Status DecreaseWhiteBalance()
Decrease white balance temperature by a fixed hardware-specific step.
Definition video_source.cpp:76
virtual absl::Status IncreaseGain()
Increase gain by a fixed hardware-specific step.
Definition video_source.cpp:92
virtual absl::Status TurnOnAutoExposure()
Enable automatic exposure mode.
Definition video_source.cpp:16
virtual absl::Status ToggleAutoExposure()
Toggle between automatic and manual exposure modes.
Definition video_source.cpp:24
virtual absl::StatusOr< double > GetExposure()
Get current exposure as a normalized value.
Definition video_source.cpp:44
virtual absl::Status DecreaseGain()
Decrease gain by a fixed hardware-specific step.
Definition video_source.cpp:96
virtual absl::Status TurnOffAutoWhiteBalance()
Disable automatic white balance and switch to manual mode.
Definition video_source.cpp:60
virtual absl::Status TurnOnAutoWhiteBalance()
Enable automatic white balance mode.
Definition video_source.cpp:56
InputTransformMode
Transformation applied to frames prior to processing.
Definition input_transform.hpp:19
Configuration options for constructing a VideoSource.
Definition settings.hpp:23