diff options
Diffstat (limited to 'logic')
| -rw-r--r-- | logic/main-settings.cpp | 1 | ||||
| -rw-r--r-- | logic/pipeline.cpp | 53 | ||||
| -rw-r--r-- | logic/pipeline.hpp | 5 | ||||
| -rw-r--r-- | logic/shortcuts.h | 4 | ||||
| -rw-r--r-- | logic/work.cpp | 24 | ||||
| -rw-r--r-- | logic/work.hpp | 21 | 
6 files changed, 62 insertions, 46 deletions
| diff --git a/logic/main-settings.cpp b/logic/main-settings.cpp index 901e1845..2bf0ad1f 100644 --- a/logic/main-settings.cpp +++ b/logic/main-settings.cpp @@ -23,7 +23,6 @@ main_settings::main_settings() :      tray_enabled(b, "use-system-tray", false),      tray_start(b, "start-in-tray", false),      center_at_startup(b, "center-at-startup", true), -    //center_method(b, "centering-method", 1),      neck_z(b, "neck-depth", 0),      neck_enable(b, "neck-enable", false),      key_start_tracking1(b, "start-tracking"), diff --git a/logic/pipeline.cpp b/logic/pipeline.cpp index 9c50b100..e506b7cf 100644 --- a/logic/pipeline.cpp +++ b/logic/pipeline.cpp @@ -28,10 +28,16 @@  #   include <windows.h>  #endif +#if defined __llvm__ +#   pragma clang diagnostic push +#   pragma clang diagnostic ignored "-Wlanguage-extension-token" +#   pragma clang diagnostic ignored "-Wunknown-pragmas" +#endif +  namespace pipeline_impl { -static constexpr inline double r2d = 180. / M_PI; -static constexpr inline double d2r = M_PI / 180.; +static constexpr inline double r2d = 180 / M_PI; +static constexpr inline double d2r = M_PI / 180;  reltrans::reltrans() = default; @@ -183,7 +189,8 @@ euler_t reltrans::apply_neck(const rmat& R, int nz, bool disable_tz) const  pipeline::pipeline(Mappings& m, runtime_libraries& libs, event_handler& ev, TrackLogger& logger) :      m(m), ev(ev), libs(libs), logger(logger) -{} +{ +}  pipeline::~pipeline()  { @@ -200,6 +207,11 @@ double pipeline::map(double pos, Map& axis)      return double(fc.get_value(pos));  } +//#define NO_NAN_CHECK +//#define DEBUG_TIMINGS + +#ifndef NO_NAN_CHECK +  template<int u, int w>  static bool is_nan(const dmat<u,w>& r)  { @@ -228,8 +240,7 @@ bool nan_check_(const x& datum, const y& next, const xs&... rest)      return nan_check_(datum) || nan_check_(next, rest...);  } -static cc_noinline -void emit_nan_check_msg(const char* text, const char* fun, int line) +static void emit_nan_check_msg(const char* text, const char* fun, int line)  {      eval_once(          qDebug()  << "nan check failed" @@ -262,6 +273,10 @@ bool maybe_nan(const char* text, const char* fun, int line, const xs&... vals)              goto error;                                                                 \      } while (false) +#else +#   define nan_check(...) (void)(__VA_ARGS__) +#endif +  bool pipeline::maybe_enable_center_on_tracking_started()  {      if (!tracking_started) @@ -275,7 +290,7 @@ bool pipeline::maybe_enable_center_on_tracking_started()          if (tracking_started && s.center_at_startup)          { -            b.set(f_center, true); +            set_center(true);              return true;          }      } @@ -283,10 +298,12 @@ bool pipeline::maybe_enable_center_on_tracking_started()      return false;  } -void pipeline::maybe_set_center_pose(const Pose& value, bool own_center_logic) +void pipeline::set_center_pose(const Pose& value, bool own_center_logic)  {      if (b.get(f_center | f_held_center))      { +        set_center(false); +          if (libs.pFilter)              libs.pFilter->center(); @@ -448,10 +465,12 @@ void pipeline::logic()      value = clamp_value(value);      { -        maybe_enable_center_on_tracking_started();          store_tracker_pose(value); -        maybe_set_center_pose(value, own_center_logic); + +        maybe_enable_center_on_tracking_started(); +        set_center_pose(value, own_center_logic);          value = apply_center(value); +          // "corrected" - after various transformations to account for camera position          logger.write_pose(value);      } @@ -500,7 +519,7 @@ error:  ok: -    b.set(f_center, false); +    set_center(false);      if (b.get(f_zero))          for (int i = 0; i < 6; i++) @@ -533,9 +552,9 @@ void pipeline::run()          logger.write(datachannels[0]);          char buffer[16]; -        for (unsigned j = 1; j < 5; ++j) +        for (unsigned j = 1; j < 5; ++j) // NOLINT(modernize-loop-convert)          { -            for (unsigned i = 0; i < 6; ++i) +            for (unsigned i = 0; i < 6; ++i) // NOLINT(modernize-loop-convert)              {                  std::sprintf(buffer, "%s%s", datachannels[j], posechannels[i]);                  logger.write(buffer); @@ -568,7 +587,7 @@ void pipeline::run()          const int sleep_time_ms = ms{clamp(const_sleep_ms - backlog_time,                                             ms{}, ms{10})}.count() + .1f; -#if 0 +#ifdef DEBUG_TIMINGS          {              static int cnt;              static Timer tt; @@ -577,7 +596,7 @@ void pipeline::run()                  tt.start();                  qDebug() << cnt << "Hz"                           << "sleepy time" << sleep_time_ms -                         << "elapsed" << ms{elapsed_nsecs}.count() +                         << "diff" << ms{elapsed_nsecs}.count() - ms{const_sleep_ms}.count()                           << "backlog" << ms{backlog_time}.count();                  cnt = 0;              } @@ -615,7 +634,7 @@ void pipeline::raw_and_mapped_pose(double* mapped, double* raw) const      }  } -void pipeline::set_center() { b.set(f_center, true); } +void pipeline::set_center(bool x) { b.set(f_center, x); }  void pipeline::set_held_center(bool value)  { @@ -664,3 +683,7 @@ 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 d8129ebb..1cae6db4 100644 --- a/logic/pipeline.hpp +++ b/logic/pipeline.hpp @@ -124,7 +124,7 @@ class OTR_LOGIC_EXPORT pipeline : private QThread      void logic();      void run() override;      bool maybe_enable_center_on_tracking_started(); -    void maybe_set_center_pose(const Pose& value, bool own_center_logic); +    void set_center_pose(const Pose& value, bool own_center_logic);      void store_tracker_pose(const Pose& value);      Pose clamp_value(Pose value) const;      Pose apply_center(Pose value) const; @@ -133,6 +133,8 @@ class OTR_LOGIC_EXPORT pipeline : private QThread      Pose apply_reltrans(Pose value, vec6_bool disabled, bool centerp);      Pose apply_zero_pos(Pose value) const; +    void set_center(bool x); +      bits b;  public: @@ -145,7 +147,6 @@ public:      void toggle_zero();      void toggle_enabled(); -    void set_center();      void set_held_center(bool value);      void set_enabled(bool value);      void set_zero(bool value); diff --git a/logic/shortcuts.h b/logic/shortcuts.h index dc62ba63..87926f66 100644 --- a/logic/shortcuts.h +++ b/logic/shortcuts.h @@ -58,8 +58,8 @@ public:      KeybindingWorker::Token key_token {[this](const Key& k) { receiver(k); }};  #endif -    Shortcuts() {} -    ~Shortcuts(); +    Shortcuts() = default; +    ~Shortcuts() override;      void reload(const t_keys& keys_);  private: diff --git a/logic/work.cpp b/logic/work.cpp index c70864ae..da61b348 100644 --- a/logic/work.cpp +++ b/logic/work.cpp @@ -64,29 +64,7 @@ std::unique_ptr<TrackLogger> Work::make_logger(main_settings &s)  Work::Work(Mappings& m, event_handler& ev, QFrame* frame,             const dylibptr& tracker_, const dylibptr& filter_, const dylibptr& proto_) :      libs(frame, tracker_, filter_, proto_), -    logger{make_logger(s)}, -    pipeline_{ m, libs, ev, *logger }, -    keys { -#if defined OTR_HAS_KEY_UP_SUPPORT -        key_tuple(s.key_center1, [&](bool x) { pipeline_.set_center(); pipeline_.set_held_center(x); }, false), -        key_tuple(s.key_center2, [&](bool x) { pipeline_.set_center(); pipeline_.set_held_center(x); }, false), -#else -        key_tuple(s.key_center1, [&](bool) { pipeline_.set_center(); }, true), -        key_tuple(s.key_center2, [&](bool) { pipeline_.set_center(); }, true), -#endif - -        key_tuple(s.key_toggle1, [&](bool) { pipeline_.toggle_enabled(); }, true), -        key_tuple(s.key_toggle2, [&](bool) { pipeline_.toggle_enabled(); }, true), - -        key_tuple(s.key_zero1, [&](bool) { pipeline_.toggle_zero(); }, true), -        key_tuple(s.key_zero2, [&](bool) { pipeline_.toggle_zero(); }, true), - -        key_tuple(s.key_toggle_press1, [&](bool x) { pipeline_.set_enabled(!x); }, false), -        key_tuple(s.key_toggle_press2, [&](bool x) { pipeline_.set_enabled(!x); }, false), - -        key_tuple(s.key_zero_press1, [&](bool x) { pipeline_.set_zero(x); }, false), -        key_tuple(s.key_zero_press2, [&](bool x) { pipeline_.set_zero(x); }, false), -    } +    pipeline_{ m, libs, ev, *logger }  {      if (!is_ok())          return; diff --git a/logic/work.hpp b/logic/work.hpp index 212bb15d..8177e654 100644 --- a/logic/work.hpp +++ b/logic/work.hpp @@ -37,12 +37,27 @@ class OTR_LOGIC_EXPORT Work final : public TR  public:      using fn_t = std::function<void(bool)>;      using key_tuple = std::tuple<key_opts&, fn_t, bool>; -    main_settings s; // tracker needs settings, so settings must come before it +    main_settings s; // pipeline needs settings, so settings must come before it      runtime_libraries libs; // idem -    std::unique_ptr<TrackLogger> logger; // must come before tracker, since tracker depends on it +    std::unique_ptr<TrackLogger> logger { make_logger(s) }; // must come before pipeline, since pipeline depends on it      pipeline pipeline_;      Shortcuts sc; -    std::vector<key_tuple> keys; + +    std::vector<key_tuple> keys { +        // third argument means "keydown only" +        key_tuple(s.key_center1, [&](bool x) { pipeline_.set_held_center(x); }, false), +        key_tuple(s.key_center2, [&](bool x) { pipeline_.set_held_center(x); }, false), + +        key_tuple(s.key_toggle1, [&](bool) { pipeline_.toggle_enabled(); }, true), +        key_tuple(s.key_toggle2, [&](bool) { pipeline_.toggle_enabled(); }, true), +        key_tuple(s.key_toggle_press1, [&](bool x) { pipeline_.set_enabled(!x); }, false), +        key_tuple(s.key_toggle_press2, [&](bool x) { pipeline_.set_enabled(!x); }, false), + +        key_tuple(s.key_zero1, [&](bool) { pipeline_.toggle_zero(); }, true), +        key_tuple(s.key_zero2, [&](bool) { pipeline_.toggle_zero(); }, true), +        key_tuple(s.key_zero_press1, [&](bool x) { pipeline_.set_zero(x); }, false), +        key_tuple(s.key_zero_press2, [&](bool x) { pipeline_.set_zero(x); }, false), +    };      Work(Mappings& m, event_handler& ev, QFrame* frame,           const dylibptr& tracker, const dylibptr& filter, const dylibptr& proto); | 
