#pragma once #include #include #include #include #include #include "cereal/visionipc/visionipc_server.h" #include "selfdrive/common/util.h" #include "selfdrive/ui/qt/api.h" #include "selfdrive/ui/replay/filereader.h" #include "selfdrive/ui/replay/framereader.h" constexpr int FORWARD_SEGS = 2; constexpr int BACKWARD_SEGS = 2; class Replay : public QObject { Q_OBJECT public: Replay(QString route, SubMaster *sm = nullptr, QObject *parent = 0); void start(); void addSegment(int n); void seekTime(int ts); public slots: void stream(); void keyboardThread(); void segmentQueueThread(); void parseResponse(const QString &response); void mergeEvents(); private: float last_print = 0; uint64_t route_start_ts; std::atomic seek_ts = 0; std::atomic current_ts = 0; std::atomic current_segment = 0; QThread *thread; QThread *kb_thread; QThread *queue_thread; // logs std::mutex lock; std::atomic updating_events = false; QMultiMap *events = nullptr; std::unordered_map *eidx = nullptr; HttpRequest *http; QJsonArray camera_paths; QJsonArray log_paths; QMap lrs; QMap frs; // messaging SubMaster *sm; PubMaster *pm; QVector socks; VisionIpcServer *vipc_server = nullptr; };