]> git.sesse.net Git - nageru/blobdiff - nageru/delay_analyzer.cpp
Time out grabbing if we don't get any data.
[nageru] / nageru / delay_analyzer.cpp
index e720c30a1472b4544c7f4a49a754d819129f25cb..9e8206015de30a80ce74455a0efdd9d12ff6f19f 100644 (file)
@@ -7,6 +7,8 @@
 
 #include <memory>
 
+#include <QTimer>
+
 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<void(QComboBox::*)(int)>(&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).");
+}