cabana: fix seeking issue (#28346)

* fix seekto

* rename loadThumbnail to parseQLog
old-commit-hash: e853af2ca6
beeps
Dean Lee 2 years ago committed by GitHub
parent d609b70296
commit 3fc8d79044
  1. 25
      tools/cabana/videowidget.cc
  2. 6
      tools/cabana/videowidget.h

@ -157,26 +157,31 @@ Slider::Slider(QWidget *parent) : thumbnail_label(parent), QSlider(Qt::Horizonta
update();
});
timer->start(2000);
thumnail_future = QtConcurrent::run(this, &Slider::loadThumbnails);
QObject::connect(can, &AbstractStream::eventsMerged, [this]() {
if (!qlog_future) {
qlog_future = std::make_unique<QFuture<void>>(QtConcurrent::run(this, &Slider::parseQLog));
}
});
}
Slider::~Slider() {
abort_load_thumbnail = true;
thumnail_future.waitForFinished();
abort_parse_qlog = true;
if (qlog_future) {
qlog_future->waitForFinished();
}
}
void Slider::loadThumbnails() {
void Slider::parseQLog() {
const auto &segments = can->route()->segments();
double max_time = 0;
for (auto it = segments.rbegin(); it != segments.rend() && !abort_load_thumbnail; ++it) {
for (auto it = segments.rbegin(); it != segments.rend() && !abort_parse_qlog; ++it) {
LogReader log;
std::string qlog = it->second.qlog.toStdString();
if (!qlog.empty() && log.load(qlog, &abort_load_thumbnail, {cereal::Event::Which::THUMBNAIL, cereal::Event::Which::CONTROLS_STATE}, true, 0, 3)) {
if (max_time == 0 && !log.events.empty()) {
max_time = (*(log.events.rbegin()))->mono_time / 1e9 - can->routeStartTime();
if (!qlog.empty() && log.load(qlog, &abort_parse_qlog, {cereal::Event::Which::THUMBNAIL, cereal::Event::Which::CONTROLS_STATE}, true, 0, 3)) {
if (it == segments.rbegin() && !log.events.empty()) {
double max_time = (*(log.events.rbegin()))->mono_time / 1e9 - can->routeStartTime();
emit updateMaximumTime(max_time);
}
for (auto ev = log.events.cbegin(); ev != log.events.cend() && !abort_load_thumbnail; ++ev) {
for (auto ev = log.events.cbegin(); ev != log.events.cend() && !abort_parse_qlog; ++ev) {
if ((*ev)->which == cereal::Event::Which::THUMBNAIL) {
auto thumb = (*ev)->event.getThumbnail();
auto data = thumb.getThumbnail();

@ -44,16 +44,16 @@ private:
bool event(QEvent *event) override;
void sliderChange(QAbstractSlider::SliderChange change) override;
void paintEvent(QPaintEvent *ev) override;
void loadThumbnails();
void parseQLog();
double max_sec = 0;
int slider_x = -1;
std::vector<std::tuple<int, int, TimelineType>> timeline;
std::mutex thumbnail_lock;
std::atomic<bool> abort_load_thumbnail = false;
std::atomic<bool> abort_parse_qlog = false;
QMap<uint64_t, QPixmap> thumbnails;
std::map<uint64_t, AlertInfo> alerts;
QFuture<void> thumnail_future;
std::unique_ptr<QFuture<void>> qlog_future;
InfoLabel thumbnail_label;
friend class VideoWidget;
};

Loading…
Cancel
Save