diff options
Diffstat (limited to 'video-opencv/impl-camera.cpp')
-rw-r--r-- | video-opencv/impl-camera.cpp | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/video-opencv/impl-camera.cpp b/video-opencv/impl-camera.cpp index 662eceb2..afd76310 100644 --- a/video-opencv/impl-camera.cpp +++ b/video-opencv/impl-camera.cpp @@ -1,6 +1,7 @@ #include "impl.hpp" #include "compat/sleep.hpp" #include "video-property-page.hpp" +#include <QDebug> namespace opencv_camera_impl { @@ -30,6 +31,34 @@ bool cam::is_open() return !!cap; } +void cam::set_exposure(bool write) +{ + auto e = *s.exposure; + if (e != exposure) + switch (e) + { + case exposure_preset::near: cap->set(cv::CAP_PROP_EXPOSURE, -5); qDebug() << "near"; break; + case exposure_preset::far: cap->set(cv::CAP_PROP_EXPOSURE, -4); qDebug() << "far"; break; + default: break; + } + + if (s.exposure != exposure_preset::ignored) + { + constexpr struct { + int prop, value; + } props[] = { + { cv::CAP_PROP_AUTO_EXPOSURE, 0 }, + { cv::CAP_PROP_BRIGHTNESS, 0 }, + { cv::CAP_PROP_SHARPNESS, 3 }, + }; + for (const auto [prop, value] : props) + cap->set(prop, value); + } + + if (write) + exposure = e; +} + bool cam::start(info& args) { stop(); @@ -46,6 +75,8 @@ bool cam::start(info& args) if (args.use_mjpeg) cap->set(cv::CAP_PROP_FOURCC, cv::VideoWriter::fourcc('M', 'J', 'P', 'G')); + set_exposure(false); + if (!cap->isOpened()) goto fail; @@ -82,6 +113,8 @@ bool cam::get_frame_() portable::sleep(50); } + set_exposure(true); + return false; } |