summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--cv/camera-dialog.cpp13
-rw-r--r--cv/camera-dialog.hpp8
-rw-r--r--gui/main.cpp2
-rw-r--r--opentrack-compat/camera-names.cpp9
-rw-r--r--opentrack-dinput/dinput.cpp5
5 files changed, 11 insertions, 26 deletions
diff --git a/cv/camera-dialog.cpp b/cv/camera-dialog.cpp
index 1be54ece..c3e8f6fe 100644
--- a/cv/camera-dialog.cpp
+++ b/cv/camera-dialog.cpp
@@ -20,27 +20,19 @@ void camera_dialog::maybe_grab_frame(cv::VideoCapture& cap)
}
}
-#ifdef _WIN32
-void camera_dialog::init_com_threading()
-{
- HRESULT hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
- if (FAILED(hr))
- qDebug() << "failed CoInitializeEx" << hr << "code" << GetLastError();
-}
-#endif
-
camera_dialog::~camera_dialog() {}
void camera_dialog::open_camera_settings(cv::VideoCapture* cap, const QString& camera_name, QMutex* camera_mtx)
{
#ifdef _WIN32
+ init_com_threading(com_apartment);
+
if (cap)
{
QMutexLocker l(camera_mtx);
if (cap->isOpened())
{
- init_com_threading();
maybe_grab_frame(*cap);
cap->set(cv::CAP_PROP_SETTINGS, 1);
return;
@@ -54,7 +46,6 @@ void camera_dialog::open_camera_settings(cv::VideoCapture* cap, const QString& c
if (!t.isSingleShot())
QObject::connect(&t, &QTimer::timeout, [&]() -> void { delete_capture(); });
- init_com_threading();
fake_capture = cv::VideoCapture(camera_name_to_index(camera_name));
maybe_grab_frame(fake_capture);
fake_capture.set(cv::CAP_PROP_SETTINGS, 1);
diff --git a/cv/camera-dialog.hpp b/cv/camera-dialog.hpp
index 15ae2bc9..3fd853c3 100644
--- a/cv/camera-dialog.hpp
+++ b/cv/camera-dialog.hpp
@@ -10,6 +10,7 @@
#include "opentrack-compat/camera-names.hpp"
#include "opentrack-compat/sleep.hpp"
+#include "opentrack-compat/win32-com.hpp"
#ifdef __linux
# include <QProcess>
@@ -17,9 +18,6 @@
#ifdef _WIN32
# include <QTimer>
-# include <objbase.h>
-# include <winerror.h>
-# include <windows.h>
#endif
#include <opencv2/videoio.hpp>
@@ -28,10 +26,6 @@
class camera_dialog
{
static void maybe_grab_frame(cv::VideoCapture& cap);
-#ifdef _WIN32
- static void init_com_threading();
-#endif
-
public:
virtual ~camera_dialog();
void open_camera_settings(cv::VideoCapture*, const QString&, QMutex*);
diff --git a/gui/main.cpp b/gui/main.cpp
index eb040337..a9252c4d 100644
--- a/gui/main.cpp
+++ b/gui/main.cpp
@@ -10,6 +10,7 @@
#include "main-window.hpp"
#include "opentrack-compat/options.hpp"
+#include "opentrack-compat/win32-com.hpp"
using namespace options;
#include <QApplication>
#include <QCommandLineParser>
@@ -111,6 +112,7 @@ static void add_program_library_path()
int main(int argc, char** argv)
{
#ifdef _WIN32
+ init_com_threading(com_apartment);
add_program_library_path();
#elif !defined(__linux)
// workaround QTBUG-38598
diff --git a/opentrack-compat/camera-names.cpp b/opentrack-compat/camera-names.cpp
index f17a259a..21ff3b52 100644
--- a/opentrack-compat/camera-names.cpp
+++ b/opentrack-compat/camera-names.cpp
@@ -2,8 +2,9 @@
#ifdef _WIN32
# define NO_DSHOW_STRSAFE
-# include <windows.h>
# include <dshow.h>
+# include "win32-com.hpp"
+# include <cwchar>
#elif defined(__unix) || defined(__linux) || defined(__APPLE__)
# include <unistd.h>
#endif
@@ -32,9 +33,7 @@ OPENTRACK_COMPAT_EXPORT QList<QString> get_camera_names()
#if defined(_WIN32)
// Create the System Device Enumerator.
HRESULT hr;
- hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
- if (FAILED(hr))
- qDebug() << "failed CoInitializeEx" << hr << GetLastError();
+ init_com_threading(com_apartment);
ICreateDevEnum *pSysDevEnum = NULL;
hr = CoCreateInstance(CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC_SERVER, IID_ICreateDevEnum, (void **)&pSysDevEnum);
if (FAILED(hr))
@@ -61,7 +60,7 @@ OPENTRACK_COMPAT_EXPORT QList<QString> get_camera_names()
if (SUCCEEDED(hr))
{
// Display the name in your UI somehow.
- QString str((QChar*)varName.bstrVal, wcslen(varName.bstrVal));
+ QString str((QChar*)varName.bstrVal, int(std::wcslen(varName.bstrVal)));
ret.append(str);
}
VariantClear(&varName);
diff --git a/opentrack-dinput/dinput.cpp b/opentrack-dinput/dinput.cpp
index 06b5e4f2..217df6a7 100644
--- a/opentrack-dinput/dinput.cpp
+++ b/opentrack-dinput/dinput.cpp
@@ -1,6 +1,7 @@
#ifdef _WIN32
#include "dinput.hpp"
+#include "opentrack-compat/win32-com.hpp"
#include <QDebug>
std::atomic<int> dinput_handle::refcnt;
@@ -9,9 +10,7 @@ dinput_handle::di_t dinput_handle::handle(dinput_handle::make_di());
LPDIRECTINPUT8& dinput_handle::init_di()
{
- HRESULT hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
- if (FAILED(hr))
- qDebug() << "dinput: failed CoInitializeEx" << hr << GetLastError();
+ init_com_threading(com_multithreaded);
static LPDIRECTINPUT8 di_ = nullptr;
if (di_ == nullptr)