29 lines
1.5 KiB
C++
29 lines
1.5 KiB
C++
#include <target_exposure_control/exposure_control.hpp>
|
|
#include <iostream>
|
|
|
|
int main() {
|
|
using namespace target_exposure;
|
|
const cv::Mat offlineImage(8,8,CV_8UC1,cv::Scalar(123));
|
|
Roi offlineRoi; offlineRoi.rectangles.emplace_back(0,0,8,8);
|
|
const auto offline=measureImage(offlineImage,offlineRoi,true);
|
|
if(!offline.target.valid() || offline.target.arithmetic_gray!=123.0 || offline.global.arithmetic_gray!=123.0) return 4;
|
|
const auto globalOnly=measureImage(offlineImage,{},false);
|
|
if(globalOnly.target.status!=MeterStatus::NoTarget || !globalOnly.global.valid()) return 5;
|
|
Config c;
|
|
c.min_exposure_us = 100; c.max_exposure_us = 20'000; c.empirical_exposure_us = 1'000;
|
|
c.detect_confirm_frames = 1;
|
|
ExposureControl module;
|
|
for (TimestampUs t : {TimestampUs{1'000'000}, TimestampUs{2'000'000}}) {
|
|
const auto pre = module.preCapture(t, c);
|
|
if (!pre.accepted) return 1;
|
|
FrameInput f;
|
|
f.image = cv::Mat(8, 8, CV_8UC1, cv::Scalar(40));
|
|
f.roi.rectangles.emplace_back(0, 0, 8, 8);
|
|
f.has_usable_target = true; f.timestamp_us = t; f.actual_exposure_us = 1'000;
|
|
const auto result = module.processFrame(f);
|
|
if (!result.accepted || result.state != State::TRACK) return 2;
|
|
if (t == 2'000'000 && (!result.adjustment_suggested || *result.suggested_exposure_us != 1'250)) return 3;
|
|
}
|
|
std::cout << "Installed package consumer passed; stateless metering and control; exposure unit us.\n";
|
|
}
|