diff options
Diffstat (limited to 'opentrack')
| -rw-r--r-- | opentrack/camera-names.hpp | 2 | ||||
| -rw-r--r-- | opentrack/opencv-camera-dialog.hpp | 32 | 
2 files changed, 34 insertions, 0 deletions
| diff --git a/opentrack/camera-names.hpp b/opentrack/camera-names.hpp index 3d3948fa..6f82ba34 100644 --- a/opentrack/camera-names.hpp +++ b/opentrack/camera-names.hpp @@ -13,6 +13,7 @@  #   include <unistd.h>  #endif +template<typename = void>  QList<QString> get_camera_names() {      QList<QString> ret;  #if defined(_WIN32) @@ -82,6 +83,7 @@ QList<QString> get_camera_names() {      return ret;  } +template<typename = void>  int camera_name_to_index(const QString &name)  {      auto list = get_camera_names(); diff --git a/opentrack/opencv-camera-dialog.hpp b/opentrack/opencv-camera-dialog.hpp new file mode 100644 index 00000000..3b700a70 --- /dev/null +++ b/opentrack/opencv-camera-dialog.hpp @@ -0,0 +1,32 @@ +#pragma once + +#include <QMutex> +#include <QMutexLocker> +#include <opencv2/videoio.hpp> +#include "opentrack/camera-names.hpp" + +template<typename tracker> +class camera_dialog +{ +    cv::VideoCapture fake_capture; +public: +    void open_camera_settings(cv::VideoCapture* cap, const QString& camera_name, QMutex* camera_mtx) +    { +        if (cap) +        { +            QMutexLocker l(camera_mtx); + +            if (cap->isOpened()) +            { +                cap->set(cv::CAP_PROP_SETTINGS, 1); +                return; +            } +        } + +        fake_capture = cv::VideoCapture(camera_name_to_index(camera_name)); +        fake_capture.set(cv::CAP_PROP_SETTINGS, 1); +        // don't hog the camera capture +        fake_capture.open(""); +    } +}; + | 
