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.
		
		
		
		
		
			
		
			
				
					
					
						
							82 lines
						
					
					
						
							2.4 KiB
						
					
					
				
			
		
		
	
	
							82 lines
						
					
					
						
							2.4 KiB
						
					
					
				| #pragma once
 | |
| 
 | |
| #include <memory>
 | |
| #include <set>
 | |
| #include <string>
 | |
| #include <utility>
 | |
| 
 | |
| #include <QFrame>
 | |
| #include <QPropertyAnimation>
 | |
| #include <QSlider>
 | |
| #include <QToolBar>
 | |
| #include <QTabBar>
 | |
| 
 | |
| #include "selfdrive/ui/qt/widgets/cameraview.h"
 | |
| #include "tools/cabana/utils/util.h"
 | |
| #include "tools/replay/logreader.h"
 | |
| #include "tools/cabana/streams/replaystream.h"
 | |
| 
 | |
| class Slider : public QSlider {
 | |
|   Q_OBJECT
 | |
| 
 | |
| public:
 | |
|   Slider(QWidget *parent);
 | |
|   double currentSecond() const { return value() / factor; }
 | |
|   void setCurrentSecond(double sec) { setValue(sec * factor); }
 | |
|   void setTimeRange(double min, double max) { setRange(min * factor, max * factor); }
 | |
|   void mousePressEvent(QMouseEvent *e) override;
 | |
|   void paintEvent(QPaintEvent *ev) override;
 | |
|   const double factor = 1000.0;
 | |
|   double thumbnail_dispaly_time = -1;
 | |
| };
 | |
| 
 | |
| class StreamCameraView : public CameraWidget {
 | |
|   Q_OBJECT
 | |
| 
 | |
| public:
 | |
|   StreamCameraView(std::string stream_name, VisionStreamType stream_type, QWidget *parent = nullptr);
 | |
|   void paintGL() override;
 | |
|   void showPausedOverlay() { fade_animation->start(); }
 | |
|   void parseQLog(std::shared_ptr<LogReader> qlog);
 | |
| 
 | |
| private:
 | |
|   QPixmap generateThumbnail(QPixmap thumbnail, double seconds);
 | |
|   void drawAlert(QPainter &p, const QRect &rect, const Timeline::Entry &alert);
 | |
|   void drawThumbnail(QPainter &p);
 | |
|   void drawScrubThumbnail(QPainter &p);
 | |
|   void drawTime(QPainter &p, const QRect &rect, double seconds);
 | |
| 
 | |
|   QPropertyAnimation *fade_animation;
 | |
|   QMap<uint64_t, QPixmap> big_thumbnails;
 | |
|   QMap<uint64_t, QPixmap> thumbnails;
 | |
|   double thumbnail_dispaly_time = -1;
 | |
|   friend class VideoWidget;
 | |
| };
 | |
| 
 | |
| class VideoWidget : public QFrame {
 | |
|   Q_OBJECT
 | |
| 
 | |
| public:
 | |
|   VideoWidget(QWidget *parnet = nullptr);
 | |
|   void showThumbnail(double seconds);
 | |
| 
 | |
| protected:
 | |
|   bool eventFilter(QObject *obj, QEvent *event) override;
 | |
|   QString formatTime(double sec, bool include_milliseconds = false);
 | |
|   void timeRangeChanged();
 | |
|   void updateState();
 | |
|   void updatePlayBtnState();
 | |
|   QWidget *createCameraWidget();
 | |
|   void createPlaybackController();
 | |
|   void createSpeedDropdown(QToolBar *toolbar);
 | |
|   void loopPlaybackClicked();
 | |
|   void vipcAvailableStreamsUpdated(std::set<VisionStreamType> streams);
 | |
| 
 | |
|   StreamCameraView *cam_widget;
 | |
|   QAction *time_display_action = nullptr;
 | |
|   QAction *play_toggle_action = nullptr;
 | |
|   QToolButton *speed_btn = nullptr;
 | |
|   QAction *skip_to_end_action = nullptr;
 | |
|   Slider *slider = nullptr;
 | |
|   QTabBar *camera_tab = nullptr;
 | |
| };
 | |
| 
 |