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;
|
|
};
|
|
|