From: Steinar H. Gunderson Date: Sun, 11 Aug 2019 20:38:14 +0000 (+0200) Subject: Time out grabbing if we don't get any data. X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=ee730b45534f03e407c287fc1ee9da7d92d46454;p=nageru Time out grabbing if we don't get any data. --- diff --git a/nageru/delay_analyzer.cpp b/nageru/delay_analyzer.cpp index e720c30..9e82060 100644 --- a/nageru/delay_analyzer.cpp +++ b/nageru/delay_analyzer.cpp @@ -7,6 +7,8 @@ #include +#include + using namespace bmusb; using namespace std; using namespace std::chrono; @@ -14,7 +16,8 @@ using namespace std::placeholders; DelayAnalyzer::DelayAnalyzer() : ui(new Ui::DelayAnalyzer), - devices(global_audio_mixer->get_devices(AudioMixer::HOLD_NO_DEVICES)) + devices(global_audio_mixer->get_devices(AudioMixer::HOLD_NO_DEVICES)), + grab_timeout(new QTimer(this)) { ui->setupUi(this); connect(ui->grab_btn, &QPushButton::clicked, this, &DelayAnalyzer::grab_clicked); @@ -27,6 +30,7 @@ DelayAnalyzer::DelayAnalyzer() bind(&DelayAnalyzer::channel_selected, this, ui->channel_combo_1)); connect(ui->channel_combo_2, static_cast(&QComboBox::currentIndexChanged), bind(&DelayAnalyzer::channel_selected, this, ui->channel_combo_2)); + connect(grab_timeout, &QTimer::timeout, bind(&DelayAnalyzer::grab_timed_out, this)); for (const auto &spec_and_info : devices) { QString label(QString::fromStdString(spec_and_info.second.display_name)); @@ -45,6 +49,8 @@ DelayAnalyzer::~DelayAnalyzer() void DelayAnalyzer::grab_clicked() { grabbing = true; + grab_timeout->setSingleShot(true); + grab_timeout->start(milliseconds(2000)); clip1.clear(); clip2.clear(); ui->peak_display_1->reset_base(); @@ -142,6 +148,15 @@ void DelayAnalyzer::add_audio(DeviceSpec device_spec, const uint8_t *data, unsig if (clip1.get_length_seconds_after_base(base) >= 1.0 && clip2.get_length_seconds_after_base(base) >= 1.0) { + post_to_main_thread([this] { + grab_timeout->stop(); + }); grabbing = false; } } + +void DelayAnalyzer::grab_timed_out() +{ + grabbing = false; + ui->delay_estimate_label->setText("Could not capture audio (timed out)."); +} diff --git a/nageru/delay_analyzer.h b/nageru/delay_analyzer.h index cc75325..a977053 100644 --- a/nageru/delay_analyzer.h +++ b/nageru/delay_analyzer.h @@ -19,6 +19,7 @@ class DelayAnalyzer; } // namespace Ui class QComboBox; +class QTimer; class DelayAnalyzer : public QMainWindow, public DelayAnalyzerInterface { @@ -32,6 +33,8 @@ public: void add_audio(DeviceSpec device_spec, const uint8_t *data, unsigned num_samples, bmusb::AudioFormat audio_format, std::chrono::steady_clock::time_point frame_time) override; private: + void grab_timed_out(); + Ui::DelayAnalyzer *ui; AudioClip clip1, clip2; @@ -42,6 +45,7 @@ private: std::atomic grabbing{false}; std::map devices; + QTimer *grab_timeout; }; #endif // !defined(_DELAY_ANALYZER_H)