You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							68 lines
						
					
					
						
							1.4 KiB
						
					
					
				
			
		
		
	
	
							68 lines
						
					
					
						
							1.4 KiB
						
					
					
				| #pragma once
 | |
| 
 | |
| #include <iostream>
 | |
| #include <termios.h>
 | |
| 
 | |
| #include <QJsonArray>
 | |
| #include <QReadWriteLock>
 | |
| #include <QThread>
 | |
| 
 | |
| #include <capnp/dynamic.h>
 | |
| 
 | |
| #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);
 | |
|   void mergeEvents();
 | |
| 
 | |
| private:
 | |
|   float last_print = 0;
 | |
|   uint64_t route_start_ts;
 | |
|   std::atomic<int> seek_ts = 0;
 | |
|   std::atomic<int> current_ts = 0;
 | |
|   std::atomic<int> current_segment = 0;
 | |
| 
 | |
|   QThread *thread;
 | |
|   QThread *kb_thread;
 | |
|   QThread *queue_thread;
 | |
| 
 | |
|   // logs
 | |
|   QMultiMap<uint64_t, Event*> events;
 | |
|   QReadWriteLock events_lock;
 | |
|   std::unordered_map<uint32_t, EncodeIdx> eidx[MAX_CAMERAS];
 | |
| 
 | |
|   HttpRequest *http;
 | |
|   QJsonArray camera_paths;
 | |
|   QJsonArray log_paths;
 | |
|   QMap<int, LogReader*> lrs;
 | |
|   QMap<int, FrameReader*> frs;
 | |
| 
 | |
|   // messaging
 | |
|   SubMaster *sm;
 | |
|   PubMaster *pm;
 | |
|   QVector<std::string> socks;
 | |
|   VisionIpcServer *vipc_server = nullptr;
 | |
| };
 | |
| 
 |