diff options
Diffstat (limited to 'video-opencv')
| -rw-r--r-- | video-opencv/impl-camera.cpp | 17 | ||||
| -rw-r--r-- | video-opencv/impl.hpp | 3 | ||||
| -rw-r--r-- | video-opencv/settings.hpp | 13 | 
3 files changed, 27 insertions, 6 deletions
diff --git a/video-opencv/impl-camera.cpp b/video-opencv/impl-camera.cpp index 543f9dff..9e749d75 100644 --- a/video-opencv/impl-camera.cpp +++ b/video-opencv/impl-camera.cpp @@ -47,12 +47,17 @@ bool cam::start(info& args)      if (args.use_mjpeg)          cap->set(cv::CAP_PROP_FOURCC, cv::VideoWriter::fourcc('M', 'J', 'P', 'G')); -#if 1 -    cap->set(cv::CAP_PROP_AUTO_EXPOSURE, 0); -    //cap->set(cv::CAP_PROP_SHARPNESS, 0); -    if (auto exp = cap->get(cv::CAP_PROP_EXPOSURE); exp > -4 || exp < -5) -        cap->set(cv::CAP_PROP_EXPOSURE, -5); -#endif +    if (s.exposure_preset != exposure_preset::ignored) +    { +        cap->set(cv::CAP_PROP_AUTO_EXPOSURE, 0); +        //cap->set(cv::CAP_PROP_SHARPNESS, 0); +        switch (s.exposure_preset) +        { +            case exposure_preset::near: cap->set(cv::CAP_PROP_EXPOSURE, -5); break; +            case exposure_preset::far: cap->set(cv::CAP_PROP_EXPOSURE, -4); break; +            default: break; +        } +    }      if (!cap->isOpened())          goto fail; diff --git a/video-opencv/impl.hpp b/video-opencv/impl.hpp index ed5499b0..88ae069d 100644 --- a/video-opencv/impl.hpp +++ b/video-opencv/impl.hpp @@ -8,6 +8,7 @@  #pragma once  #include "video/camera.hpp" +#include "settings.hpp"  #include <optional>  #include <opencv2/videoio.hpp> @@ -46,6 +47,8 @@ static constexpr int video_capture_backend =      bool get_frame_(); +    dshow_camera_settings s; +      std::optional<cv::VideoCapture> cap;      cv::Mat mat;      frame frame_; diff --git a/video-opencv/settings.hpp b/video-opencv/settings.hpp new file mode 100644 index 00000000..69fb5705 --- /dev/null +++ b/video-opencv/settings.hpp @@ -0,0 +1,13 @@ +#pragma once +#include "options/value.hpp" +using namespace options; + +enum class exposure_preset : int { +    near, far, ignored, +    DEFAULT = near, +}; + +struct dshow_camera_settings final { +    bundle b = make_bundle("video-camera"); +    value<exposure_preset> exposure_preset{b, "exposure-preset", exposure_preset::near}; +};  | 
