diff options
| -rw-r--r-- | video-opencv/impl-camera.cpp | 2 | ||||
| -rw-r--r-- | video-opencv/impl.hpp | 9 | ||||
| -rw-r--r-- | video-opencv/video-property-page.cpp | 5 | 
3 files changed, 14 insertions, 2 deletions
| diff --git a/video-opencv/impl-camera.cpp b/video-opencv/impl-camera.cpp index 8a540134..3f2a1b1a 100644 --- a/video-opencv/impl-camera.cpp +++ b/video-opencv/impl-camera.cpp @@ -33,7 +33,7 @@ bool cam::is_open()  bool cam::start(info& args)  {      stop(); -    cap.emplace(idx); +    cap.emplace(idx + video_capture_backend);      if (args.width > 0 && args.height > 0)      { diff --git a/video-opencv/impl.hpp b/video-opencv/impl.hpp index 3d793490..db569823 100644 --- a/video-opencv/impl.hpp +++ b/video-opencv/impl.hpp @@ -31,6 +31,15 @@ struct metadata : camera_  struct cam final : camera  { +static constexpr int video_capture_backend = +#ifdef _WIN32 +    cv::CAP_DSHOW; +#elif !defined __APPLE__ +    cv::CAP_V4L2; +#else +    cv::CAP_ANY; +#endif +      cam(int idx);      ~cam() override; diff --git a/video-opencv/video-property-page.cpp b/video-opencv/video-property-page.cpp index a43a5ba0..078898a5 100644 --- a/video-opencv/video-property-page.cpp +++ b/video-opencv/video-property-page.cpp @@ -14,6 +14,7 @@  #include "compat/run-in-thread.hpp"  #include "compat/library-path.hpp"  #include "compat/thread-name.hpp" +#include "impl.hpp"  #include <cstring> @@ -49,6 +50,7 @@ prop_settings_worker::prop_settings_worker(int idx_)      int ret = (int)cap.get(cv::CAP_PROP_SETTINGS);      if (ret != 0) +    {          run_in_thread_async(qApp, [] {              QMessageBox::warning(nullptr,                                   "Camera properties", @@ -56,6 +58,7 @@ prop_settings_worker::prop_settings_worker(int idx_)                                   QMessageBox::Cancel,                                   QMessageBox::NoButton);          }); +    }      else      {          idx = idx_; @@ -67,7 +70,7 @@ prop_settings_worker::prop_settings_worker(int idx_)  void prop_settings_worker::open_prop_page()  { -    cap.open(idx); +    cap.open(idx + opencv_camera_impl::cam::video_capture_backend);      if (cap.isOpened())      { | 
