#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 removeSegment(int n); void seekTime(int ts); public slots: void stream(); void keyboardThread(); void segmentQueueThread(); void parseResponse(const QString &response); 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 Events events; QReadWriteLock events_lock; QMap> eidx; HttpRequest *http; QJsonArray camera_paths; QJsonArray log_paths; QMap lrs; QMap frs; // messaging SubMaster *sm; PubMaster *pm; QVector socks; VisionIpcServer *vipc_server = nullptr; };