From 35b46547cb0be698d0f3a2c17437bad2a5067789 Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Thu, 4 Nov 2021 19:05:34 +0100 Subject: tracker/pt: add point filter gain limiter --- tracker-pt/FTNoIR_PT_Controls.ui | 74 +++++++++++++++++++++++++++++---- tracker-pt/ftnoir_tracker_pt_dialog.cpp | 4 ++ tracker-pt/lang/nl_NL.ts | 4 ++ tracker-pt/lang/ru_RU.ts | 4 ++ tracker-pt/lang/stub.ts | 4 ++ tracker-pt/lang/zh_CN.ts | 4 ++ tracker-pt/point-filter.cpp | 6 +-- tracker-pt/pt-settings.hpp | 1 + 8 files changed, 89 insertions(+), 12 deletions(-) (limited to 'tracker-pt') diff --git a/tracker-pt/FTNoIR_PT_Controls.ui b/tracker-pt/FTNoIR_PT_Controls.ui index edb401da..bf6cbbde 100644 --- a/tracker-pt/FTNoIR_PT_Controls.ui +++ b/tracker-pt/FTNoIR_PT_Controls.ui @@ -9,8 +9,8 @@ 0 0 - 420 - 703 + 397 + 673 @@ -707,8 +707,8 @@ Point filter - - + + @@ -724,7 +724,36 @@ - + + + + + 0 + 0 + + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + true + + + QAbstractSpinBox::NoButtons + + + 999.990000000000009 + + + + + + + Limit + + + + @@ -749,10 +778,35 @@ - - + + - + + 0 + 0 + + + + 0 + + + 99 + + + 1 + + + 10 + + + Qt::Horizontal + + + + + + + 0 0 @@ -767,7 +821,7 @@ QAbstractSpinBox::NoButtons - 999.990000000000009 + 1.000000000000000 @@ -1546,6 +1600,8 @@ Don't roll or change position. enable_point_filter point_filter_slider point_filter_label + point_filter_limit_slider + point_filter_limit_label model_tabs clip_tlength_spin clip_theight_spin diff --git a/tracker-pt/ftnoir_tracker_pt_dialog.cpp b/tracker-pt/ftnoir_tracker_pt_dialog.cpp index f71e13a5..6d125d92 100644 --- a/tracker-pt/ftnoir_tracker_pt_dialog.cpp +++ b/tracker-pt/ftnoir_tracker_pt_dialog.cpp @@ -121,9 +121,13 @@ TrackerDialog_PT::TrackerDialog_PT(const QString& module_name) : tie_setting(s.enable_point_filter, ui.enable_point_filter); tie_setting(s.point_filter_coefficient, ui.point_filter_slider); + tie_setting(s.point_filter_limit, ui.point_filter_limit_slider); connect(&s.point_filter_coefficient, value_::value_changed(), ui.point_filter_label, [this] { ui.point_filter_label->setValue(*s.point_filter_coefficient); } ); + connect(&s.point_filter_limit, value_::value_changed(), ui.point_filter_limit_label, + [this] { ui.point_filter_limit_label->setValue(*s.point_filter_limit); }, Qt::QueuedConnection); ui.point_filter_label->setValue(*s.point_filter_coefficient); + ui.point_filter_limit_label->setValue(*s.point_filter_limit); } QString TrackerDialog_PT::threshold_display_text(int threshold_value) diff --git a/tracker-pt/lang/nl_NL.ts b/tracker-pt/lang/nl_NL.ts index c61f7437..5b55148d 100644 --- a/tracker-pt/lang/nl_NL.ts +++ b/tracker-pt/lang/nl_NL.ts @@ -292,6 +292,10 @@ Don't roll or change position. Enable + + Limit + + pt_impl::TrackerDialog_PT diff --git a/tracker-pt/lang/ru_RU.ts b/tracker-pt/lang/ru_RU.ts index 027aed6f..e53052d3 100644 --- a/tracker-pt/lang/ru_RU.ts +++ b/tracker-pt/lang/ru_RU.ts @@ -297,6 +297,10 @@ ROLL или X/Y-смещения. Enable + + Limit + + pt_impl::TrackerDialog_PT diff --git a/tracker-pt/lang/stub.ts b/tracker-pt/lang/stub.ts index 072128be..5d8e0e4a 100644 --- a/tracker-pt/lang/stub.ts +++ b/tracker-pt/lang/stub.ts @@ -292,6 +292,10 @@ Don't roll or change position. Enable + + Limit + + pt_impl::TrackerDialog_PT diff --git a/tracker-pt/lang/zh_CN.ts b/tracker-pt/lang/zh_CN.ts index d3dccad5..c35a63d2 100644 --- a/tracker-pt/lang/zh_CN.ts +++ b/tracker-pt/lang/zh_CN.ts @@ -292,6 +292,10 @@ Don't roll or change position. Enable + + Limit + + pt_impl::TrackerDialog_PT diff --git a/tracker-pt/point-filter.cpp b/tracker-pt/point-filter.cpp index 652c099e..49e82afb 100644 --- a/tracker-pt/point-filter.cpp +++ b/tracker-pt/point-filter.cpp @@ -30,8 +30,8 @@ const PointOrder& point_filter::operator()(const PointOrder& input) return state_; } - constexpr f E = (f)1.75; - constexpr f max = .25; + constexpr auto E = (f)1.75; + const f limit = (f)*s.point_filter_limit; const f C = progn( constexpr int A = 1'000'000; double K = *s.point_filter_coefficient; @@ -58,7 +58,7 @@ const PointOrder& point_filter::operator()(const PointOrder& input) for (unsigned i = 0; i < 3; i++) { - f x = std::clamp(delta, (f)0, max); + f x = std::clamp(delta, (f)0, limit); state_[i] += x*(input[i] - state_[i]); } diff --git a/tracker-pt/pt-settings.hpp b/tracker-pt/pt-settings.hpp index 876ba573..cce2ba6b 100644 --- a/tracker-pt/pt-settings.hpp +++ b/tracker-pt/pt-settings.hpp @@ -70,6 +70,7 @@ struct pt_settings final : options::opts value enable_point_filter{ b, "enable-point-filter", false }; value point_filter_coefficient { b, "point-filter-coefficient", { 1.0, 0, 4 } }; + value point_filter_limit { b, "point-filter-limit", { 0.1, 0.01, 1 }}; explicit pt_settings(const QString& name) : opts(name) {} }; -- cgit v1.2.3