replay: refresh segment window after current segment is changed by seek (#22436)

old-commit-hash: 60b0c43c90
commatwo_master
Dean Lee 4 years ago committed by GitHub
parent 38617c6c8f
commit 3df339e1ed
  1. 10
      selfdrive/ui/replay/replay.cc

@ -88,6 +88,7 @@ void Replay::seekTo(int seconds, bool relative) {
if (segments_.empty()) return;
bool segment_loaded = false;
bool segment_changed = false;
updateEvents([&]() {
if (relative) {
seconds += ((cur_mono_time_ - route_start_ts_) * 1e-9);
@ -95,14 +96,13 @@ void Replay::seekTo(int seconds, bool relative) {
qInfo() << "seeking to" << seconds;
cur_mono_time_ = route_start_ts_ + std::clamp(seconds, 0, (int)segments_.size() * 60) * 1e9;
current_segment_ = std::min(seconds / 60, (int)segments_.size() - 1);
segment_loaded = std::find(segments_merged_.begin(), segments_merged_.end(), current_segment_) != segments_merged_.end();
int segment = std::min(seconds / 60, (int)segments_.size() - 1);
segment_changed = current_segment_.exchange(segment) != segment;
segment_loaded = std::find(segments_merged_.begin(), segments_merged_.end(), segment) != segments_merged_.end();
return segment_loaded;
});
if (!segment_loaded) {
// always emit segmentChanged if segment is not loaded.
// the current_segment_ may not valid when seeking cross boundary or seeking to an invalid segment.
if (segment_changed || !segment_loaded) {
emit segmentChanged();
}
}

Loading…
Cancel
Save