diff options
Diffstat (limited to 'video-ps3eye')
| -rw-r--r-- | video-ps3eye/module.cpp | 33 | ||||
| -rw-r--r-- | video-ps3eye/module.hpp | 11 | ||||
| m--------- | video-ps3eye/ps3eye-driver | 0 |
3 files changed, 14 insertions, 30 deletions
diff --git a/video-ps3eye/module.cpp b/video-ps3eye/module.cpp index 812e523c..1d4e43f1 100644 --- a/video-ps3eye/module.cpp +++ b/video-ps3eye/module.cpp @@ -144,6 +144,7 @@ bool ps3eye_camera::start(info& args) return false; volatile auto& ptr = *(ps3eye::shm*)shm.ptr(); + QString error; using mode = ps3eye::shm_in::mode; @@ -181,14 +182,13 @@ bool ps3eye_camera::start(info& args) portable::sleep(sleep_ms); } - run_in_thread_sync(qApp, [&]() { - QString error; - if (ptr.out.error_string[0] == '\0') - error = "Unknown error"; - else - error = QString::fromLatin1((const char*)ptr.out.error_string, - strnlen((const char*)ptr.out.error_string, sizeof(ptr.out.error_string))); + if (ptr.out.error_string[0] == '\0') + error = "Unknown error"; + else + error = QString::fromLatin1((const char*)ptr.out.error_string, + strnlen((const char*)ptr.out.error_string, sizeof(ptr.out.error_string))); + run_in_thread_async(qApp, [=]() { QMessageBox::critical(nullptr, "Can't open camera", "PS3 Eye driver error: " + error, QMessageBox::Close); }); @@ -247,19 +247,16 @@ OTR_REGISTER_CAMERA(ps3eye_camera_) dialog::dialog(QWidget* parent) : QWidget(parent) { ui.setupUi(this); - t.setSingleShot(true); - t.setInterval(500); tie_setting(s.exposure, ui.exposure_slider); tie_setting(s.gain, ui.gain_slider); ui.exposure_label->setValue((int)*s.exposure); ui.gain_label->setValue((int)*s.gain); - connect(&s.exposure, value_::value_changed<slider_value>(), this, [this](const slider_value&) { s.set_exposure(); t.stop(); t.start(); }); - connect(&s.gain, value_::value_changed<slider_value>(), this, [this](const slider_value&) { s.set_gain(); t.stop(); t.start(); }); + connect(&s.exposure, value_::value_changed<slider_value>(), this, [this](const slider_value&) { s.set_exposure(); }); + connect(&s.gain, value_::value_changed<slider_value>(), this, [this](const slider_value&) { s.set_gain(); }); connect(ui.exposure_slider, &QSlider::valueChanged, ui.exposure_label, &QSpinBox::setValue); connect(ui.gain_slider, &QSlider::valueChanged, ui.gain_label, &QSpinBox::setValue); connect(ui.buttonBox, &QDialogButtonBox::accepted, this, &dialog::do_ok); connect(ui.buttonBox, &QDialogButtonBox::rejected, this, &dialog::do_cancel); - connect(&t, &QTimer::timeout, this, [this]() { s.apply(); }); } // XXX copypasta -sh 20200329 @@ -270,7 +267,7 @@ void settings::set_gain() auto& ptr = *(ps3eye::shm volatile*)shm.ptr(); ptr.in.gain = (unsigned char)*gain; - //++ptr.in.settings_updated; + ++ptr.in.settings_updated; std::atomic_thread_fence(std::memory_order_seq_cst); } @@ -281,16 +278,6 @@ void settings::set_exposure() auto& ptr = *(ps3eye::shm volatile*)shm.ptr(); ptr.in.exposure = (unsigned char)*exposure; - //++ptr.in.settings_updated; - std::atomic_thread_fence(std::memory_order_seq_cst); -} - -void settings::apply() -{ - if (!shm.success()) - return; - - auto& ptr = *(ps3eye::shm volatile*)shm.ptr(); ++ptr.in.settings_updated; std::atomic_thread_fence(std::memory_order_seq_cst); } diff --git a/video-ps3eye/module.hpp b/video-ps3eye/module.hpp index 955463d6..56ffe5df 100644 --- a/video-ps3eye/module.hpp +++ b/video-ps3eye/module.hpp @@ -8,8 +8,8 @@ #include "compat/timer.hpp" #include "ui_dialog.h" +#include <QDialog> #include <QProcess> -#include <QTimer> using namespace options; @@ -27,7 +27,6 @@ struct settings final void set_exposure(); void set_gain(); - void apply(); }; class dialog final : public QWidget @@ -36,15 +35,13 @@ class dialog final : public QWidget Ui_Dialog ui; settings s; - QTimer t; - shm_wrapper shm { "ps3eye-driver-shm", nullptr, sizeof(ps3eye::shm) }; - void do_ok() { s.b->save(); s.apply(); close(); } - void do_cancel() { s.b->reload(); s.apply(); close(); } + void do_ok() { s.b->save(); close(); deleteLater(); } + void do_cancel() { s.b->reload(); close(); deleteLater(); } protected: - void closeEvent(QCloseEvent*) override { do_cancel(); deleteLater(); } + void closeEvent(QCloseEvent*) override { do_cancel(); } public: explicit dialog(QWidget* parent = nullptr); diff --git a/video-ps3eye/ps3eye-driver b/video-ps3eye/ps3eye-driver -Subproject f0259c700099df522e652238ff77257c70a8a4f +Subproject 2cde6fbfbde7874daab634ca3b35b7ede14ed88 |
