]> git.sesse.net Git - nageru/blobdiff - nageru/delay_analyzer.cpp
Make the delay analyzer understand that two sources can have different starting times.
[nageru] / nageru / delay_analyzer.cpp
index 7e25738667e7330e0c29affb06337e2f51595858..e720c30a1472b4544c7f4a49a754d819129f25cb 100644 (file)
@@ -47,6 +47,8 @@ void DelayAnalyzer::grab_clicked()
        grabbing = true;
        clip1.clear();
        clip2.clear();
+       ui->peak_display_1->reset_base();
+       ui->peak_display_2->reset_base();
        ui->peak_display_1->audio_clip_updated();
        ui->peak_display_2->audio_clip_updated();
 }
@@ -121,7 +123,25 @@ void DelayAnalyzer::add_audio(DeviceSpec device_spec, const uint8_t *data, unsig
                ui->peak_display_2->audio_clip_updated();
        }
 
-       if (clip1.get_length_seconds() >= 1.0 && clip2.get_length_seconds() >= 1.0) {
+       if (clip1.empty() && clip2.empty()) {
+               // No interesting data yet.
+               return;
+       }
+
+       steady_clock::time_point base;
+       if (!clip1.empty() && !clip2.empty()) {
+               base = max(clip1.get_first_sample(), clip2.get_first_sample());
+       } else if (!clip1.empty()) {
+               base = clip1.get_first_sample();
+       } else {
+               assert(!clip2.empty());
+               base = clip2.get_first_sample();
+       }
+       ui->peak_display_1->set_base(base);
+       ui->peak_display_2->set_base(base);
+
+       if (clip1.get_length_seconds_after_base(base) >= 1.0 &&
+           clip2.get_length_seconds_after_base(base) >= 1.0) {
                grabbing = false;
        }
 }