summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--cmake/opentrack-boilerplate.cmake13
-rw-r--r--cmake/opentrack-platform.cmake1
-rw-r--r--compat/macros.hpp5
-rw-r--r--dinput/keybinding-worker.cpp14
-rw-r--r--dinput/keybinding-worker.hpp2
-rw-r--r--dinput/win32-joystick.cpp47
-rw-r--r--filter-accela/ftnoir_filter_accela.cpp10
-rw-r--r--installer/opentrack-installer.iss4
-rw-r--r--logic/main-settings.cpp59
-rw-r--r--logic/main-settings.hpp77
-rw-r--r--logic/pipeline.cpp83
-rw-r--r--logic/pipeline.hpp2
-rw-r--r--spline/spline.cpp22
-rw-r--r--tracker-pt/module/point_extractor.cpp2
-rw-r--r--tracker-rs/ftnoir_tracker_rs_worker.cpp1
-rw-r--r--tracker-rs/rs_impl/ftnoir_tracker_rs_impl.cpp2
-rw-r--r--tracker-rs/rs_impl/ftnoir_tracker_rs_impl.h15
-rw-r--r--tracker-udp/ftnoir_tracker_udp.cpp20
-rw-r--r--tracker-wii/wiiyourself/wiimote.h1
19 files changed, 160 insertions, 220 deletions
diff --git a/cmake/opentrack-boilerplate.cmake b/cmake/opentrack-boilerplate.cmake
index 84bd3a03..68017422 100644
--- a/cmake/opentrack-boilerplate.cmake
+++ b/cmake/opentrack-boilerplate.cmake
@@ -150,6 +150,12 @@ function(otr_module n_)
set(arg_NO-COMPAT TRUE)
endif()
+ if(NOT arg_NO-QT)
+ set_property(SOURCE ${${n}-moc} ${${n}-uih} PROPERTY GENERATED TRUE)
+ add_custom_target(moc-${n} DEPENDS ${${n}-moc} ${${n}-uih} ${${n}-rc} COMMENT "")
+ add_dependencies(moc "moc-${n}")
+ endif()
+
if(NOT WIN32)
set(subsys "")
elseif(arg_WIN32-CONSOLE)
@@ -169,10 +175,6 @@ function(otr_module n_)
set_property(TARGET "${n}" PROPERTY PREFIX "")
endif()
- set_property(SOURCE ${${n}-moc} ${${n}-uih} PROPERTY GENERATED TRUE)
- add_custom_target(moc-${n} DEPENDS ${${n}-moc} ${${n}-uih} ${${n}-rc} COMMENT "")
- add_dependencies(moc "moc-${n}")
-
if(NOT arg_RELINK)
set_property(TARGET ${n} PROPERTY LINK_DEPENDS_NO_SHARED TRUE)
else()
@@ -201,6 +203,8 @@ function(otr_module n_)
set(arg_NO-INSTALL TRUE)
endif()
+ otr_compat(${n})
+
if(NOT arg_NO-INSTALL)
if(arg_BIN AND WIN32)
install(TARGETS "${n}" RUNTIME DESTINATION . PERMISSIONS ${opentrack-perms-exec})
@@ -215,7 +219,6 @@ function(otr_module n_)
endif()
endif()
- otr_compat(${n})
if(NOT arg_NO-QT)
otr_i18n_for_target_directory(${n_})
endif()
diff --git a/cmake/opentrack-platform.cmake b/cmake/opentrack-platform.cmake
index 4b7cde09..0cdb1d57 100644
--- a/cmake/opentrack-platform.cmake
+++ b/cmake/opentrack-platform.cmake
@@ -73,6 +73,7 @@ if(MSVC)
add_definitions(-D_ENABLE_EXTENDED_ALIGNED_STORAGE)
add_definitions(-D_SILENCE_CXX17_NEGATORS_DEPRECATION_WARNING)
add_definitions(-D_SILENCE_CXX17_ADAPTOR_TYPEDEFS_DEPRECATION_WARNING)
+ add_definitions(-DWIN32_LEAN_AND_MEAN)
set(__stuff "-permissive- -diagnostics:caret")
set(CMAKE_CXX_FLAGS "${__stuff} ${CMAKE_CXX_FLAGS}")
diff --git a/compat/macros.hpp b/compat/macros.hpp
index 5d82c4ee..5b959011 100644
--- a/compat/macros.hpp
+++ b/compat/macros.hpp
@@ -93,11 +93,6 @@ constexpr cc_forceinline void static_warn<true>() {}
#define typed_progn(type, ...) ([&]() -> type { __VA_ARGS__ }())
#define progn(...) ([&]() -> decltype(auto) { __VA_ARGS__ }())
-#define prog1(x, ...) ([&]() -> decltype(auto) \
- { \
- decltype(auto) ret1324 = (x); __VA_ARGS__; return ret1324; \
- }())
-
// end c++-only macros
#endif
diff --git a/dinput/keybinding-worker.cpp b/dinput/keybinding-worker.cpp
index a3331323..aa8faca8 100644
--- a/dinput/keybinding-worker.cpp
+++ b/dinput/keybinding-worker.cpp
@@ -48,12 +48,12 @@ bool KeybindingWorker::init()
}
if (din->CreateDevice(GUID_SysKeyboard, &dinkeyboard, nullptr) != DI_OK) {
- qDebug() << "setup CreateDevice function failed!" << GetLastError();
+ qDebug() << "dinput: create keyboard failed" << GetLastError();
return false;
}
if (dinkeyboard->SetDataFormat(&c_dfDIKeyboard) != DI_OK) {
- qDebug() << "setup SetDataFormat function failed!" << GetLastError();
+ qDebug() << "dinput: keyboard SetDataFormat" << GetLastError();
dinkeyboard->Release();
dinkeyboard = nullptr;
return false;
@@ -62,20 +62,20 @@ bool KeybindingWorker::init()
if (dinkeyboard->SetCooperativeLevel((HWND) fake_main_window.winId(), DISCL_NONEXCLUSIVE | DISCL_BACKGROUND) != DI_OK) {
dinkeyboard->Release();
dinkeyboard = nullptr;
- qDebug() << "setup SetCooperativeLevel function failed!" << GetLastError();
+ qDebug() << "dinput: keyboard SetCooperativeLevel" << GetLastError();
return false;
}
{
DIPROPDWORD dipdw;
- dipdw.dwData = 128;
+ dipdw.dwData = num_keyboard_states;
dipdw.diph.dwHeaderSize = sizeof(dipdw.diph);
dipdw.diph.dwHow = DIPH_DEVICE;
dipdw.diph.dwObj = 0;
dipdw.diph.dwSize = sizeof(dipdw);
if ( dinkeyboard->SetProperty(DIPROP_BUFFERSIZE, &dipdw.diph) != DI_OK)
{
- qDebug() << "setup keyboard buffer mode failed!";
+ qDebug() << "dinput: DIPROP_BUFFERSIZE";
dinkeyboard->Release();
dinkeyboard = nullptr;
return false;
@@ -86,7 +86,7 @@ bool KeybindingWorker::init()
{
dinkeyboard->Release();
dinkeyboard = nullptr;
- qDebug() << "setup dinkeyboard Acquire failed!" << GetLastError();
+ qDebug() << "dinput: acquire keyboard failed" << GetLastError();
return false;
}
@@ -147,7 +147,7 @@ bool KeybindingWorker::run_keyboard_nolock()
if (hr != DI_OK)
{
- eval_once(qDebug() << "dinput: keyboard GetDeviceData failed" << hr);
+ eval_once(qDebug() << "dinput: keyboard GetDeviceData" << hr);
return false;
}
diff --git a/dinput/keybinding-worker.hpp b/dinput/keybinding-worker.hpp
index fad9ec7e..ec403c15 100644
--- a/dinput/keybinding-worker.hpp
+++ b/dinput/keybinding-worker.hpp
@@ -64,7 +64,7 @@ private:
void remove_receiver(fun* pos);
~KeybindingWorker();
- static constexpr int num_keyboard_states = 16;
+ static constexpr int num_keyboard_states = 64;
DIDEVICEOBJECTDATA keyboard_states[num_keyboard_states] {};
KeybindingWorker(const KeybindingWorker&) = delete;
diff --git a/dinput/win32-joystick.cpp b/dinput/win32-joystick.cpp
index 4da5c57d..71c93543 100644
--- a/dinput/win32-joystick.cpp
+++ b/dinput/win32-joystick.cpp
@@ -3,19 +3,11 @@
#include "win32-joystick.hpp"
#include "compat/macros.hpp"
-// doesn't play well with Qt Creator clang code model
-#if defined Q_CREATOR_RUN && defined _MSC_VER
-# undef offsetof
-# define offsetof(type, member) __builtin_offsetof(type, member)
-#else
-# include <cstddef>
-#endif
-
+#include <cstddef>
#include <algorithm>
#include <cmath>
#include <QWidget>
-
#include <QDebug>
#include <objbase.h>
@@ -59,19 +51,15 @@ bool win32_joy_ctx::poll_axis(const QString &guid, int* axes)
bool ok = false;
HRESULT hr;
- if (!FAILED(hr = joy_handle->Poll()))
+ if (SUCCEEDED(hr = joy_handle->Poll()))
+ ok = true;
+ else if (SUCCEEDED(hr = joy_handle->Acquire()) && SUCCEEDED(hr = joy_handle->Poll()))
ok = true;
-
- if (!ok && FAILED(hr = joy_handle->Acquire()))
- {
- (void)0;
- //qDebug() << "joy acquire failed" << hr;
- }
if (!ok)
{
(void)joy_handle->Unacquire();
- Sleep(100);
+ Sleep(0);
continue;
}
@@ -80,7 +68,7 @@ bool win32_joy_ctx::poll_axis(const QString &guid, int* axes)
if (FAILED(hr = joy_handle->GetDeviceState(sizeof(js), &js)))
{
//qDebug() << "joy get state failed" << guid << hr;
- Sleep(500);
+ Sleep(0);
continue;
}
@@ -133,11 +121,12 @@ void win32_joy_ctx::refresh()
QString win32_joy_ctx::guid_to_string(const GUID& guid)
{
- char buf[40] = {0};
- wchar_t szGuidW[40] = {0};
+ char buf[40] = {};
+ wchar_t szGuidW[40] = {};
- StringFromGUID2(guid, szGuidW, 40);
- WideCharToMultiByte(0, 0, szGuidW, -1, buf, 40, nullptr, nullptr);
+ StringFromGUID2(guid, szGuidW, sizeof(buf));
+ WideCharToMultiByte(0, 0, szGuidW, -1, buf, sizeof(buf), nullptr, nullptr);
+ buf[sizeof(buf)-1] = 0;
return QString(buf);
}
@@ -254,7 +243,7 @@ void win32_joy_ctx::enum_state::refresh()
if (!di)
{
- qDebug() << "can't create dinput";
+ qDebug() << "dinput: can't create dinput";
return;
}
@@ -265,7 +254,7 @@ void win32_joy_ctx::enum_state::refresh()
this,
DIEDFL_ATTACHEDONLY)))
{
- eval_once(qDebug() << "failed enum joysticks" << hr);
+ eval_once(qDebug() << "dinput: failed enum joysticks" << hr);
return;
}
@@ -298,12 +287,12 @@ BOOL CALLBACK win32_joy_ctx::enum_state::EnumJoysticksCallback(const DIDEVICEINS
LPDIRECTINPUTDEVICE8 h;
if (FAILED(hr = state.di->CreateDevice(pdidInstance->guidInstance, &h, nullptr)))
{
- qDebug() << "createdevice" << guid << hr;
+ qDebug() << "dinput: joystick CreateDevice" << guid << hr;
goto end;
}
if (FAILED(h->SetDataFormat(&c_dfDIJoystick2)))
{
- qDebug() << "format";
+ qDebug() << "dinput: joystick SetDataFormat";
h->Release();
goto end;
}
@@ -328,7 +317,7 @@ BOOL CALLBACK win32_joy_ctx::enum_state::EnumJoysticksCallback(const DIDEVICEINS
if (h->SetProperty(DIPROP_BUFFERSIZE, &dipdw.diph) != DI_OK)
{
- qDebug() << "setup joystick buffer mode failed!";
+ qDebug() << "dinput: joystick DIPROP_BUFFERSIZE";
h->Release();
goto end;
}
@@ -336,7 +325,7 @@ BOOL CALLBACK win32_joy_ctx::enum_state::EnumJoysticksCallback(const DIDEVICEINS
if (FAILED(hr = h->EnumObjects(EnumObjectsCallback, h, DIDFT_ALL)))
{
- qDebug() << "enum-objects";
+ qDebug() << "dinput: joystick EnumObjects";
h->Release();
goto end;
}
@@ -363,7 +352,7 @@ BOOL CALLBACK win32_joy_ctx::enum_state::EnumObjectsCallback(const DIDEVICEOBJEC
if (FAILED(hr = reinterpret_cast<LPDIRECTINPUTDEVICE8>(ctx)->SetProperty(DIPROP_RANGE, &diprg.diph)))
{
- qDebug() << "DIPROP_RANGE" << hr;
+ qDebug() << "dinput: joystick DIPROP_RANGE" << hr;
return DIENUM_STOP;
}
}
diff --git a/filter-accela/ftnoir_filter_accela.cpp b/filter-accela/ftnoir_filter_accela.cpp
index f96bd2d2..db7ea279 100644
--- a/filter-accela/ftnoir_filter_accela.cpp
+++ b/filter-accela/ftnoir_filter_accela.cpp
@@ -25,13 +25,11 @@ cc_noinline
static void do_deltas(const double* deltas, double* output, F&& fun)
{
double norm[N];
+ double dist = 0;
- const double dist = progn(
- double ret = 0;
- for (unsigned k = 0; k < N; k++)
- ret += deltas[k]*deltas[k];
- return sqrt(ret);
- );
+ for (unsigned k = 0; k < N; k++)
+ dist += deltas[k]*deltas[k];
+ dist = sqrt(dist);
const double value = double(fun(dist));
diff --git a/installer/opentrack-installer.iss b/installer/opentrack-installer.iss
index e6551863..658567b3 100644
--- a/installer/opentrack-installer.iss
+++ b/installer/opentrack-installer.iss
@@ -1,7 +1,7 @@
; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
-#include "../build/opentrack-version.h"
+#include "../build-clion-msvc-dev/opentrack-version.h"
#define MyAppName "opentrack"
#define MyAppVersion OPENTRACK_VERSION
#define MyAppPublisher "opentrack"
@@ -45,7 +45,7 @@ Name: "english"; MessagesFile: "compiler:Default.isl"
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
[Files]
-Source: "..\build\install\*"; DestDir: "{app}"; Flags: ignoreversion createallsubdirs recursesubdirs
+Source: "..\build-clion-msvc-dev\install\*"; DestDir: "{app}"; Flags: ignoreversion createallsubdirs recursesubdirs
[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
diff --git a/logic/main-settings.cpp b/logic/main-settings.cpp
index 2bf0ad1f..19bb692d 100644
--- a/logic/main-settings.cpp
+++ b/logic/main-settings.cpp
@@ -4,57 +4,8 @@ namespace main_settings_impl {
using namespace options;
-main_settings::main_settings() :
- b(make_bundle("opentrack-ui")),
- b_map(make_bundle("opentrack-mappings")),
- a_x("x", TX),
- a_y("y", TY),
- a_z("z", TZ),
- a_yaw("yaw", Yaw),
- a_pitch("pitch", Pitch),
- a_roll("roll", Roll),
- all_axis_opts { &a_x, &a_y, &a_z, &a_yaw, &a_pitch, &a_roll },
- reltrans_disable_tx(b, "compensate-translation-disable-x-axis", false),
- reltrans_disable_ty(b, "compensate-translation-disable-y-axis", false),
- reltrans_disable_tz(b, "compensate-translation-disable-z-axis", false),
- reltrans_disable_src_yaw(b, "compensate-translation-disable-source-yaw", false),
- reltrans_disable_src_pitch(b, "compensate-translation-disable-source-pitch", false),
- reltrans_disable_src_roll(b, "compensate-translation-disable-source-roll", false),
- tray_enabled(b, "use-system-tray", false),
- tray_start(b, "start-in-tray", false),
- center_at_startup(b, "center-at-startup", true),
- neck_z(b, "neck-depth", 0),
- neck_enable(b, "neck-enable", false),
- key_start_tracking1(b, "start-tracking"),
- key_start_tracking2(b, "start-tracking-alt"),
- key_stop_tracking1(b, "stop-tracking"),
- key_stop_tracking2(b, "stop-tracking-alt"),
- key_toggle_tracking1(b, "toggle-tracking"),
- key_toggle_tracking2(b, "toggle-tracking-alt"),
- key_restart_tracking1(b, "restart-tracking"),
- key_restart_tracking2(b, "restart-tracking-alt"),
- key_center1(b, "center"),
- key_center2(b, "center-alt"),
- key_toggle1(b, "toggle"),
- key_toggle2(b, "toggle-alt"),
- key_zero1(b, "zero"),
- key_zero2(b, "zero-alt"),
- key_toggle_press1(b, "toggle-press"),
- key_toggle_press2(b, "toggle-press-alt"),
- key_zero_press1(b, "zero-press"),
- key_zero_press2(b, "zero-press-alt"),
- tracklogging_enabled(b, "tracklogging-enabled", false),
- tracklogging_filename(b, "tracklogging-filename", QString())
-{
-}
-
-module_settings::module_settings() :
- b(make_bundle("modules")),
- tracker_dll(b, "tracker-dll", "pt"),
- filter_dll(b, "filter-dll", "accela"),
- protocol_dll(b, "protocol-dll", "freetrack")
-{
-}
+main_settings::main_settings() = default;
+module_settings::module_settings() = default;
key_opts::key_opts(bundle b, const QString& name) :
keycode(b, QString("keycode-%1").arg(name), ""),
@@ -66,9 +17,9 @@ key_opts& key_opts::operator=(const key_opts& x)
{
if (&x != this)
{
- keycode = x.keycode();
- guid = x.guid();
- button = x.button();
+ keycode = *x.keycode;
+ guid = *x.guid;
+ button = *x.button;
}
return *this;
diff --git a/logic/main-settings.hpp b/logic/main-settings.hpp
index 41edf3e6..8fef7ea7 100644
--- a/logic/main-settings.hpp
+++ b/logic/main-settings.hpp
@@ -37,36 +37,67 @@ struct OTR_LOGIC_EXPORT key_opts
struct OTR_LOGIC_EXPORT module_settings
{
- bundle b;
- value<QString> tracker_dll, filter_dll, protocol_dll;
+ bundle b { make_bundle("modules") };
+ value<QString> tracker_dll { b, "tracker-dll", "pt" };
+ value<QString> filter_dll { b, "filter-dll", "accela" };
+ value<QString> protocol_dll { b, "protocol-dll", "freetrack" };
module_settings();
};
struct OTR_LOGIC_EXPORT main_settings final
{
- bundle b, b_map;
- axis_opts a_x, a_y, a_z;
- axis_opts a_yaw, a_pitch, a_roll;
- axis_opts* all_axis_opts[6];
+ bundle b { make_bundle("opentrack-ui") };
+ bundle b_map { make_bundle("opentrack-mappings") };
+ axis_opts a_x{ "x", TX }, a_y { "y", TY }, a_z { "z", TZ };
+ axis_opts a_yaw{ "yaw", Yaw }, a_pitch { "pitch", Pitch }, a_roll { "roll", Roll };
+ axis_opts* all_axis_opts[6] { &a_x, &a_y, &a_z, &a_yaw, &a_pitch, &a_roll };
value<reltrans_state> reltrans_mode { b, "relative-translation-mode", reltrans_disabled };
- value<bool> reltrans_disable_tx, reltrans_disable_ty, reltrans_disable_tz;
- value<bool> reltrans_disable_src_yaw, reltrans_disable_src_pitch, reltrans_disable_src_roll;
- value<bool> tray_enabled, tray_start;
- value<bool> center_at_startup;
+
+ value<bool> reltrans_disable_tx { b, "compensate-translation-disable-x-axis", false };
+ value<bool> reltrans_disable_ty { b, "compensate-translation-disable-y-axis", false };
+ value<bool> reltrans_disable_tz { b, "compensate-translation-disable-z-axis", false };
+
+ value<bool> reltrans_disable_src_yaw { b, "compensate-translation-disable-source-yaw", false };
+ value<bool> reltrans_disable_src_pitch { b, "compensate-translation-disable-source-pitch", false };
+ value<bool> reltrans_disable_src_roll { b, "compensate-translation-disable-source-roll", false };
+
+ value<bool> tray_enabled { b, "use-system-tray", false };
+ value<bool> tray_start { b, "start-in-tray", false };
+
+ value<bool> center_at_startup { b, "center-at-startup", true };
//value<int> center_method;
- value<int> neck_z;
- value<bool> neck_enable;
- key_opts key_start_tracking1, key_start_tracking2;
- key_opts key_stop_tracking1, key_stop_tracking2;
- key_opts key_toggle_tracking1, key_toggle_tracking2;
- key_opts key_restart_tracking1, key_restart_tracking2;
- key_opts key_center1, key_center2;
- key_opts key_toggle1, key_toggle2;
- key_opts key_zero1, key_zero2;
- key_opts key_toggle_press1, key_toggle_press2;
- key_opts key_zero_press1, key_zero_press2;
- value<bool> tracklogging_enabled;
- value<QString> tracklogging_filename;
+ value<int> neck_z { b, "neck-depth", 0 };
+ value<bool> neck_enable { b, "neck-enable", false };
+
+ key_opts key_start_tracking1 { b, "start-tracking" };
+ key_opts key_start_tracking2 { b, "start-tracking-alt" };
+
+ key_opts key_stop_tracking1 { b, "stop-tracking" };
+ key_opts key_stop_tracking2 { b, "stop-tracking-alt" };
+
+ key_opts key_toggle_tracking1 { b, "toggle-tracking" };
+ key_opts key_toggle_tracking2 { b, "toggle-tracking-alt" };
+
+ key_opts key_restart_tracking1 { b, "restart-tracking" };
+ key_opts key_restart_tracking2 { b, "restart-tracking-alt" };
+
+ key_opts key_center1 { b, "center" };
+ key_opts key_center2 { b, "center-alt" };
+
+ key_opts key_toggle1 { b, "toggle" };
+ key_opts key_toggle2 { b, "toggle-alt" };
+
+ key_opts key_zero1 { b, "zero" };
+ key_opts key_zero2 { b, "zero-alt" };
+
+ key_opts key_toggle_press1 { b, "toggle-press" };
+ key_opts key_toggle_press2 { b, "toggle-press-alt" };
+
+ key_opts key_zero_press1 { b, "zero-press" };
+ key_opts key_zero_press2 { b, "zero-press-alt" };
+
+ value<bool> tracklogging_enabled { b, "tracklogging-enabled", false };
+ value<QString> tracklogging_filename { b, "tracklogging-filename", {} };
main_settings();
};
diff --git a/logic/pipeline.cpp b/logic/pipeline.cpp
index 021a576b..eb5ac17a 100644
--- a/logic/pipeline.cpp
+++ b/logic/pipeline.cpp
@@ -26,12 +26,7 @@
#ifdef _WIN32
# include <windows.h>
-#endif
-
-#if defined __llvm__
-# pragma clang diagnostic push
-# pragma clang diagnostic ignored "-Wlanguage-extension-token"
-# pragma clang diagnostic ignored "-Wunknown-pragmas"
+# include <mmsystem.h>
#endif
namespace pipeline_impl {
@@ -45,7 +40,7 @@ void reltrans::on_center()
{
interp_pos = { 0, 0, 0 };
in_zone = false;
- cur = false;
+ moving_to_reltans = false;
}
euler_t reltrans::rotate(const rmat& R, const euler_t& in, vec3_bool disable) const
@@ -83,20 +78,17 @@ Pose reltrans::apply_pipeline(reltrans_state state, const Pose& value,
if (state != reltrans_disabled)
{
- const bool in_zone_ = progn(
- if (state == reltrans_non_center)
- {
- const bool looking_down = value(Pitch) < 20;
- return looking_down ? std::fabs(value(Yaw)) > 35 : std::fabs(value(Yaw)) > 65;
- }
- else
- return true;
- );
+ bool in_zone_ = true;
+ if (state == reltrans_non_center)
+ {
+ const bool looking_down = value(Pitch) < 20;
+ in_zone_ = looking_down ? std::fabs(value(Yaw)) > 35 : std::fabs(value(Yaw)) > 65;
+ }
- if (!cur && in_zone != in_zone_)
+ if (!moving_to_reltans && in_zone != in_zone_)
{
//qDebug() << "reltrans-interp: START" << tcomp_in_zone_;
- cur = true;
+ moving_to_reltans = true;
interp_timer.start();
interp_phase_timer.start();
RC_stage = 0;
@@ -124,7 +116,7 @@ Pose reltrans::apply_pipeline(reltrans_state state, const Pose& value,
}
}
- if (cur)
+ if (moving_to_reltans)
{
const double dt = interp_timer.elapsed_seconds();
@@ -156,7 +148,7 @@ Pose reltrans::apply_pipeline(reltrans_state state, const Pose& value,
if (delta < eps)
{
//qDebug() << "reltrans-interp: STOP";
- cur = false;
+ moving_to_reltans = false;
}
}
else
@@ -164,7 +156,7 @@ Pose reltrans::apply_pipeline(reltrans_state state, const Pose& value,
}
else
{
- cur = false;
+ moving_to_reltans = false;
in_zone = false;
}
@@ -213,10 +205,11 @@ double pipeline::map(double pos, Map& axis)
#ifndef NO_NAN_CHECK
template<int u, int w>
-static bool is_nan(const dmat<u,w>& r)
+static cc_forceinline
+bool is_nan(const dmat<u,w>& r)
{
- for (int i = 0; i < u; i++)
- for (int j = 0; j < w; j++)
+ for (unsigned i = 0; i < u; i++)
+ for (unsigned j = 0; j < w; j++)
{
int val = std::fpclassify(r(i, j));
if (val == FP_NAN || val == FP_INFINITE)
@@ -226,21 +219,8 @@ static bool is_nan(const dmat<u,w>& r)
return false;
}
-template<typename x>
-static inline
-bool nan_check_(const x& datum)
-{
- return is_nan(datum);
-}
-
-template<typename x, typename y, typename... xs>
-static inline
-bool nan_check_(const x& datum, const y& next, const xs&... rest)
-{
- return nan_check_(datum) || nan_check_(next, rest...);
-}
-
-static void emit_nan_check_msg(const char* text, const char* fun, int line)
+static cc_forceinline
+void emit_nan_check_msg(const char* text, const char* fun, int line)
{
eval_once(
qDebug() << "nan check failed"
@@ -254,30 +234,33 @@ template<typename... xs>
static cc_noinline
bool maybe_nan(const char* text, const char* fun, int line, const xs&... vals)
{
- if (nan_check_(vals...))
- {
- emit_nan_check_msg(text, fun, line);
- return true;
- }
+ for (const auto& x : { vals... })
+ if (is_nan(x))
+ {
+ emit_nan_check_msg(text, fun, line);
+ return true;
+ }
return false;
}
-// for MSVC `else' is like `unlikely' for GNU
-
#define nan_check(...) \
do \
{ \
if (likely(!maybe_nan(#__VA_ARGS__, cc_function_name, __LINE__, __VA_ARGS__))) \
+ { \
(void)0; \
+ } \
else \
+ { \
goto error; \
- } while (false)
+ } \
+ } \
+ while (false)
#else
# define nan_check(...) (void)(__VA_ARGS__)
#endif
-
bool pipeline::maybe_enable_center_on_tracking_started()
{
if (!tracking_started)
@@ -689,7 +672,3 @@ bits::bits() : b(0u)
}
} // ns pipeline_impl
-
-#if defined __llvm__
-# pragma clang diagnostic pop
-#endif
diff --git a/logic/pipeline.hpp b/logic/pipeline.hpp
index 91dfc668..142a3844 100644
--- a/logic/pipeline.hpp
+++ b/logic/pipeline.hpp
@@ -51,7 +51,7 @@ class reltrans
Timer interp_phase_timer;
unsigned RC_stage = 0;
- bool cur = false;
+ bool moving_to_reltans = false;
bool in_zone = false;
public:
diff --git a/spline/spline.cpp b/spline/spline.cpp
index cd3daf30..752e85d1 100644
--- a/spline/spline.cpp
+++ b/spline/spline.cpp
@@ -367,8 +367,6 @@ void spline::ensure_valid(points_t& list)
{
QMutexLocker foo(&_mutex);
- // storing to s->points fires bundle::changed and that leads to an infinite loop
- // thus, only store if we can't help it
std::stable_sort(list.begin(), list.end(), sort_fn);
const int sz = list.size();
@@ -406,26 +404,24 @@ void spline::ensure_valid(points_t& list)
}
}
- // size check guards against livelock with value<t>/bundle_ signals
+ // simply storing to s->points fires bundle::changed leading to a livelock
+ // hence only store if we can't help it
- // points that are within bounds
if (tmp.size() < points.size())
{
+ // all points that don't overlap
points = std::move(tmp);
- // can't stuff there unconditionally
- // fires signals from `value<t>' and `bundle_' otherwise
s->points = points;
}
if (all_points.size() < list.size())
- // all points that don't overlap, after clamping
+ // points that are within currently-specified bounds
list = std::move(all_points);
last_input_value = {};
activep = false;
}
-// the return value is only safe to use with no spline::set_bundle calls
std::shared_ptr<base_settings> spline::get_settings()
{
QMutexLocker foo(&_mutex);
@@ -460,13 +456,9 @@ void spline::disconnect_signals()
{
if (conn_changed)
{
- QObject::disconnect(conn_changed);
- QObject::disconnect(conn_maxx);
- QObject::disconnect(conn_maxy);
-
- conn_changed = {};
- conn_maxx = {};
- conn_maxy = {};
+ QObject::disconnect(conn_changed), conn_changed = {};
+ QObject::disconnect(conn_maxx), conn_maxx = {};
+ QObject::disconnect(conn_maxy), conn_maxy = {};
}
}
diff --git a/tracker-pt/module/point_extractor.cpp b/tracker-pt/module/point_extractor.cpp
index a634768c..fcf58c2d 100644
--- a/tracker-pt/module/point_extractor.cpp
+++ b/tracker-pt/module/point_extractor.cpp
@@ -155,7 +155,7 @@ void PointExtractor::color_to_grayscale(const cv::Mat& frame, cv::Mat1b& output)
}
default:
eval_once(qDebug() << "wrong pt_color_type enum value" << int(s.blob_color));
- /*FALLTHROUGH*/
+ [[fallthrough]];
case pt_color_natural:
cv::cvtColor(frame, output, cv::COLOR_BGR2GRAY);
break;
diff --git a/tracker-rs/ftnoir_tracker_rs_worker.cpp b/tracker-rs/ftnoir_tracker_rs_worker.cpp
index 0e2c86f4..15843824 100644
--- a/tracker-rs/ftnoir_tracker_rs_worker.cpp
+++ b/tracker-rs/ftnoir_tracker_rs_worker.cpp
@@ -7,6 +7,7 @@
#include "ftnoir_tracker_rs_worker.h"
#include "rs_impl/ftnoir_tracker_rs_impl.h"
+#include <cstdlib>
#include <QImage>
#include <QDebug>
diff --git a/tracker-rs/rs_impl/ftnoir_tracker_rs_impl.cpp b/tracker-rs/rs_impl/ftnoir_tracker_rs_impl.cpp
index 41406193..3230ef56 100644
--- a/tracker-rs/rs_impl/ftnoir_tracker_rs_impl.cpp
+++ b/tracker-rs/rs_impl/ftnoir_tracker_rs_impl.cpp
@@ -14,6 +14,8 @@
#include <pxcfacemodule.h>
#include <pxcfaceconfiguration.h>
+#include <cstdlib>
+
const size_t kPreviewStreamWidth = 640;
const size_t kPreviewStreamHeight = 480;
diff --git a/tracker-rs/rs_impl/ftnoir_tracker_rs_impl.h b/tracker-rs/rs_impl/ftnoir_tracker_rs_impl.h
index a4c03ce8..c71f30fa 100644
--- a/tracker-rs/rs_impl/ftnoir_tracker_rs_impl.h
+++ b/tracker-rs/rs_impl/ftnoir_tracker_rs_impl.h
@@ -6,15 +6,8 @@
*/
#pragma once
-#ifdef EXPORT_RS_IMPL
-#define RSTRACKERIMPL_VISIBILITY __declspec( dllexport )
-#else
-#define RSTRACKERIMPL_VISIBILITY
-#endif
-extern "C" {
- RSTRACKERIMPL_VISIBILITY int rs_tracker_impl_start();
- RSTRACKERIMPL_VISIBILITY int rs_tracker_impl_update_pose(double *pose);
- RSTRACKERIMPL_VISIBILITY int rs_tracker_impl_get_preview(void* data, int width, int height);
- RSTRACKERIMPL_VISIBILITY int rs_tracker_impl_end();
-}
+int rs_tracker_impl_start();
+int rs_tracker_impl_update_pose(double *pose);
+int rs_tracker_impl_get_preview(void* data, int width, int height);
+int rs_tracker_impl_end();
diff --git a/tracker-udp/ftnoir_tracker_udp.cpp b/tracker-udp/ftnoir_tracker_udp.cpp
index b6e5eb86..6badaa0f 100644
--- a/tracker-udp/ftnoir_tracker_udp.cpp
+++ b/tracker-udp/ftnoir_tracker_udp.cpp
@@ -44,16 +44,20 @@ void udp::run()
}
while (sock.hasPendingDatagrams());
- if (ok &&
- progn(
- for (unsigned i = 0; i < 6; i++)
+ if (ok)
+ {
+ for (unsigned i = 0; i < 6; i++)
+ {
+ int val = std::fpclassify(last_recv_pose2[i]);
+ if (val == FP_NAN || val == FP_INFINITE)
{
- int val = std::fpclassify(last_recv_pose2[i]);
- if (val == FP_NAN || val == FP_INFINITE)
- return false;
+ ok = false;
+ break;
}
- return true;
- ))
+ }
+ }
+
+ if (ok)
{
for (unsigned i = 0; i < 6; i++)
last_recv_pose[i] = last_recv_pose2[i];
diff --git a/tracker-wii/wiiyourself/wiimote.h b/tracker-wii/wiiyourself/wiimote.h
index dac949c7..b4738026 100644
--- a/tracker-wii/wiiyourself/wiimote.h
+++ b/tracker-wii/wiiyourself/wiimote.h
@@ -12,6 +12,7 @@
#include "warns-begin.hpp"
+#undef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <tchar.h> // auto Unicode/Ansi support