parent
							
								
									ed54e9fbd9
								
							
						
					
					
						commit
						93873316c1
					
				
				 20 changed files with 329 additions and 82 deletions
			
			
		@ -0,0 +1,21 @@ | 
				
			||||
Import('qt_env', 'ui_libs', 'qt_libs', 'qt_ui', 'replay_lib', 'asset_obj', 'arch', 'common', 'messaging', 'visionipc', 'cereal') | 
				
			||||
 | 
				
			||||
clip_env = qt_env.Clone() | 
				
			||||
clip_env['CCFLAGS'] += ['-Wno-deprecated-declarations'] | 
				
			||||
 | 
				
			||||
base_frameworks = clip_env["FRAMEWORKS"] | 
				
			||||
base_libs = clip_env["LIBS"] | 
				
			||||
 | 
				
			||||
if arch == "Darwin": | 
				
			||||
  base_frameworks.append('OpenCL') | 
				
			||||
else: | 
				
			||||
  base_libs.append('OpenCL') | 
				
			||||
 | 
				
			||||
if arch == 'larch64': | 
				
			||||
  base_libs.append('EGL') | 
				
			||||
 | 
				
			||||
clip_lib_src = ["application.cc", "recorder/ffmpeg.cc", "recorder/widget.cc"] | 
				
			||||
clip_lib = clip_env.Library("clip", clip_lib_src, LIBS=base_libs, FRAMEWORKS=base_frameworks) | 
				
			||||
Export('clip_lib') | 
				
			||||
clip_libs = [clip_lib, replay_lib, cereal, 'bz2', 'zstd', 'curl', 'yuv', 'ncurses'] + base_libs + qt_libs + ui_libs + qt_ui | 
				
			||||
clip_env.Program("clip", ["main.cc", asset_obj], LIBS=clip_libs, FRAMEWORKS=base_frameworks) | 
				
			||||
@ -0,0 +1,56 @@ | 
				
			||||
#include "tools/clip/application.h" | 
				
			||||
 | 
				
			||||
#include <QApplication> | 
				
			||||
#include <QTranslator> | 
				
			||||
#include <selfdrive/ui/qt/util.h> | 
				
			||||
#include <selfdrive/ui/qt/window.h> | 
				
			||||
 | 
				
			||||
#include "recorder/widget.h" | 
				
			||||
 | 
				
			||||
Application::Application(int argc, char *argv[]) { | 
				
			||||
  initApp(argc, argv); | 
				
			||||
 | 
				
			||||
  app = new QApplication(argc, argv); | 
				
			||||
 | 
				
			||||
  QString outputFile = "/Users/trey/Desktop/out.mp4"; | 
				
			||||
 | 
				
			||||
  QTranslator translator; | 
				
			||||
  QString translation_file = QString::fromStdString(Params().get("LanguageSetting")); | 
				
			||||
  if (!translator.load(QString(":/%1").arg(translation_file)) && translation_file.length()) { | 
				
			||||
    qCritical() << "Failed to load translation file:" << translation_file; | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  app->installTranslator(&translator); | 
				
			||||
 | 
				
			||||
  window = new OnroadWindow(); | 
				
			||||
 | 
				
			||||
  recorderThread = new QThread; | 
				
			||||
  recorder = new Recorder; | 
				
			||||
  recorder->moveToThread(recorderThread); | 
				
			||||
  QObject::connect(recorderThread, &QThread::finished, recorder, &QObject::deleteLater); | 
				
			||||
  recorderThread->start(); | 
				
			||||
  QObject::connect(window, &OnroadWindow::drewOnroadFrame, recorder, &Recorder::saveFrame, Qt::QueuedConnection); | 
				
			||||
 | 
				
			||||
  window->setAttribute(Qt::WA_DontShowOnScreen); | 
				
			||||
  window->setAttribute(Qt::WA_Mapped); | 
				
			||||
  window->setAttribute(Qt::WA_NoSystemBackground); | 
				
			||||
} | 
				
			||||
 | 
				
			||||
void Application::close() const { | 
				
			||||
  recorderThread->quit(); | 
				
			||||
  app->quit(); | 
				
			||||
} | 
				
			||||
 | 
				
			||||
Application::~Application() { | 
				
			||||
  delete recorder; | 
				
			||||
  delete recorderThread; | 
				
			||||
  delete window; | 
				
			||||
  delete app; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
int Application::exec() const { | 
				
			||||
  setMainWindow(window); | 
				
			||||
  return app->exec(); | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
@ -0,0 +1,18 @@ | 
				
			||||
#pragma once | 
				
			||||
#include <selfdrive/ui/qt/onroad/onroad_home.h> | 
				
			||||
 | 
				
			||||
#include "recorder/widget.h" | 
				
			||||
 | 
				
			||||
 | 
				
			||||
class Application { | 
				
			||||
public: | 
				
			||||
    Application(int argc, char* argv[]); | 
				
			||||
    ~Application(); | 
				
			||||
    int exec() const; | 
				
			||||
    void close() const; | 
				
			||||
private: | 
				
			||||
    QApplication *app; | 
				
			||||
    QThread *recorderThread = nullptr; | 
				
			||||
    Recorder *recorder = nullptr; | 
				
			||||
    OnroadWindow *window; | 
				
			||||
}; | 
				
			||||
									
										Binary file not shown.
									
								
							
						@ -0,0 +1,42 @@ | 
				
			||||
#include <iostream> | 
				
			||||
#include <selfdrive/ui/ui.h> | 
				
			||||
 | 
				
			||||
#include "application.h" | 
				
			||||
#include "tools/replay/replay.h" | 
				
			||||
 | 
				
			||||
void startReplayThread() { | 
				
			||||
  std::vector<std::string> allow = (std::vector<std::string>{ | 
				
			||||
    "modelV2", "controlsState", "liveCalibration", "radarState", "deviceState", | 
				
			||||
    "pandaStates", "carParams", "driverMonitoringState", "carState", "driverStateV2", | 
				
			||||
    "wideRoadCameraState", "managerState", "selfdriveState", "longitudinalPlan", | 
				
			||||
  }); | 
				
			||||
 | 
				
			||||
  std::vector<std::string> block; | 
				
			||||
  Replay replay("a2a0ccea32023010|2023-07-27--13-01-19", allow, block); | 
				
			||||
 | 
				
			||||
  if (!replay.load()) { | 
				
			||||
    return; | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  std::cout << "Replay started." << std::endl; | 
				
			||||
  replay.setEndSeconds(66); | 
				
			||||
  replay.start(60); | 
				
			||||
  replay.waitUntilEnd(); | 
				
			||||
  std::cout << "Replay ended." << std::endl; | 
				
			||||
  raise(SIGINT); | 
				
			||||
} | 
				
			||||
 | 
				
			||||
int main(int argc, char *argv[]) { | 
				
			||||
  Application a(argc, argv); | 
				
			||||
 | 
				
			||||
  std::thread thread(startReplayThread); | 
				
			||||
  std::this_thread::sleep_for(std::chrono::milliseconds(2000)); | 
				
			||||
 | 
				
			||||
  if (a.exec()) { | 
				
			||||
    std::cerr << "Failed to start app." << std::endl; | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  thread.join(); | 
				
			||||
  a.close(); | 
				
			||||
  return 0; | 
				
			||||
} | 
				
			||||
@ -0,0 +1,125 @@ | 
				
			||||
/****************************************************************************
 | 
				
			||||
** Meta object code from reading C++ file 'widget.h' | 
				
			||||
** | 
				
			||||
** Created by: The Qt Meta Object Compiler version 67 (Qt 5.15.16) | 
				
			||||
** | 
				
			||||
** WARNING! All changes made in this file will be lost! | 
				
			||||
*****************************************************************************/ | 
				
			||||
 | 
				
			||||
#include <memory> | 
				
			||||
#include "widget.h" | 
				
			||||
#include <QtCore/qbytearray.h> | 
				
			||||
#include <QtCore/qmetatype.h> | 
				
			||||
#if !defined(Q_MOC_OUTPUT_REVISION) | 
				
			||||
#error "The header file 'widget.h' doesn't include <QObject>." | 
				
			||||
#elif Q_MOC_OUTPUT_REVISION != 67 | 
				
			||||
#error "This file was generated using the moc from 5.15.16. It" | 
				
			||||
#error "cannot be used with the include files from this version of Qt." | 
				
			||||
#error "(The moc has changed too much.)" | 
				
			||||
#endif | 
				
			||||
 | 
				
			||||
QT_BEGIN_MOC_NAMESPACE | 
				
			||||
QT_WARNING_PUSH | 
				
			||||
QT_WARNING_DISABLE_DEPRECATED | 
				
			||||
struct qt_meta_stringdata_Recorder_t { | 
				
			||||
    QByteArrayData data[6]; | 
				
			||||
    char stringdata0[39]; | 
				
			||||
}; | 
				
			||||
#define QT_MOC_LITERAL(idx, ofs, len) \ | 
				
			||||
    Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \
 | 
				
			||||
    qptrdiff(offsetof(qt_meta_stringdata_Recorder_t, stringdata0) + ofs \
 | 
				
			||||
        - idx * sizeof(QByteArrayData)) \
 | 
				
			||||
    ) | 
				
			||||
static const qt_meta_stringdata_Recorder_t qt_meta_stringdata_Recorder = { | 
				
			||||
    { | 
				
			||||
QT_MOC_LITERAL(0, 0, 8), // "Recorder"
 | 
				
			||||
QT_MOC_LITERAL(1, 9, 9), // "saveFrame"
 | 
				
			||||
QT_MOC_LITERAL(2, 19, 0), // ""
 | 
				
			||||
QT_MOC_LITERAL(3, 20, 7), // "QImage*"
 | 
				
			||||
QT_MOC_LITERAL(4, 28, 5), // "frame"
 | 
				
			||||
QT_MOC_LITERAL(5, 34, 4) // "stop"
 | 
				
			||||
 | 
				
			||||
    }, | 
				
			||||
    "Recorder\0saveFrame\0\0QImage*\0frame\0" | 
				
			||||
    "stop" | 
				
			||||
}; | 
				
			||||
#undef QT_MOC_LITERAL | 
				
			||||
 | 
				
			||||
static const uint qt_meta_data_Recorder[] = { | 
				
			||||
 | 
				
			||||
 // content:
 | 
				
			||||
       8,       // revision
 | 
				
			||||
       0,       // classname
 | 
				
			||||
       0,    0, // classinfo
 | 
				
			||||
       2,   14, // methods
 | 
				
			||||
       0,    0, // properties
 | 
				
			||||
       0,    0, // enums/sets
 | 
				
			||||
       0,    0, // constructors
 | 
				
			||||
       0,       // flags
 | 
				
			||||
       0,       // signalCount
 | 
				
			||||
 | 
				
			||||
 // slots: name, argc, parameters, tag, flags
 | 
				
			||||
       1,    1,   24,    2, 0x0a /* Public */, | 
				
			||||
       5,    0,   27,    2, 0x0a /* Public */, | 
				
			||||
 | 
				
			||||
 // slots: parameters
 | 
				
			||||
    QMetaType::Void, 0x80000000 | 3,    4, | 
				
			||||
    QMetaType::Void, | 
				
			||||
 | 
				
			||||
       0        // eod
 | 
				
			||||
}; | 
				
			||||
 | 
				
			||||
void Recorder::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) | 
				
			||||
{ | 
				
			||||
    if (_c == QMetaObject::InvokeMetaMethod) { | 
				
			||||
        auto *_t = static_cast<Recorder *>(_o); | 
				
			||||
        (void)_t; | 
				
			||||
        switch (_id) { | 
				
			||||
        case 0: _t->saveFrame((*reinterpret_cast< QImage*(*)>(_a[1]))); break; | 
				
			||||
        case 1: _t->stop(); break; | 
				
			||||
        default: ; | 
				
			||||
        } | 
				
			||||
    } | 
				
			||||
} | 
				
			||||
 | 
				
			||||
QT_INIT_METAOBJECT const QMetaObject Recorder::staticMetaObject = { { | 
				
			||||
    QMetaObject::SuperData::link<QObject::staticMetaObject>(), | 
				
			||||
    qt_meta_stringdata_Recorder.data, | 
				
			||||
    qt_meta_data_Recorder, | 
				
			||||
    qt_static_metacall, | 
				
			||||
    nullptr, | 
				
			||||
    nullptr | 
				
			||||
} }; | 
				
			||||
 | 
				
			||||
 | 
				
			||||
const QMetaObject *Recorder::metaObject() const | 
				
			||||
{ | 
				
			||||
    return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
void *Recorder::qt_metacast(const char *_clname) | 
				
			||||
{ | 
				
			||||
    if (!_clname) return nullptr; | 
				
			||||
    if (!strcmp(_clname, qt_meta_stringdata_Recorder.stringdata0)) | 
				
			||||
        return static_cast<void*>(this); | 
				
			||||
    return QObject::qt_metacast(_clname); | 
				
			||||
} | 
				
			||||
 | 
				
			||||
int Recorder::qt_metacall(QMetaObject::Call _c, int _id, void **_a) | 
				
			||||
{ | 
				
			||||
    _id = QObject::qt_metacall(_c, _id, _a); | 
				
			||||
    if (_id < 0) | 
				
			||||
        return _id; | 
				
			||||
    if (_c == QMetaObject::InvokeMetaMethod) { | 
				
			||||
        if (_id < 2) | 
				
			||||
            qt_static_metacall(this, _c, _id, _a); | 
				
			||||
        _id -= 2; | 
				
			||||
    } else if (_c == QMetaObject::RegisterMethodArgumentMetaType) { | 
				
			||||
        if (_id < 2) | 
				
			||||
            *reinterpret_cast<int*>(_a[0]) = -1; | 
				
			||||
        _id -= 2; | 
				
			||||
    } | 
				
			||||
    return _id; | 
				
			||||
} | 
				
			||||
QT_WARNING_POP | 
				
			||||
QT_END_MOC_NAMESPACE | 
				
			||||
@ -1,51 +0,0 @@ | 
				
			||||
#include "tools/replay/clip/application.h" | 
				
			||||
 | 
				
			||||
#include <QApplication> | 
				
			||||
#include <QTranslator> | 
				
			||||
#include <selfdrive/ui/qt/util.h> | 
				
			||||
#include <selfdrive/ui/qt/window.h> | 
				
			||||
 | 
				
			||||
#include "recorder/widget.h" | 
				
			||||
 | 
				
			||||
Application::Application() { | 
				
			||||
 | 
				
			||||
} | 
				
			||||
 | 
				
			||||
Application::~Application() { | 
				
			||||
 | 
				
			||||
} | 
				
			||||
 | 
				
			||||
int Application::exec(int argc, char *argv[]) { | 
				
			||||
  initApp(argc, argv); | 
				
			||||
 | 
				
			||||
  QApplication a(argc, argv); | 
				
			||||
 | 
				
			||||
  QString outputFile = "/Users/trey/Desktop/out.mp4"; | 
				
			||||
 | 
				
			||||
  QTranslator translator; | 
				
			||||
  QString translation_file = QString::fromStdString(Params().get("LanguageSetting")); | 
				
			||||
  if (!translator.load(QString(":/%1").arg(translation_file)) && translation_file.length()) { | 
				
			||||
    qCritical() << "Failed to load translation file:" << translation_file; | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  a.installTranslator(&translator); | 
				
			||||
 | 
				
			||||
  OnroadWindow w; | 
				
			||||
 | 
				
			||||
  QThread recorderThread; | 
				
			||||
  Recorder recorder; | 
				
			||||
  recorder.moveToThread(&recorderThread); | 
				
			||||
  QObject::connect(&recorderThread, &QThread::finished, &recorder, &QObject::deleteLater); | 
				
			||||
  QObject::connect(&w, &OnroadWindow::drewOnroadFrame, &recorder, &Recorder::saveFrame, Qt::QueuedConnection); | 
				
			||||
  recorderThread.start(); | 
				
			||||
 | 
				
			||||
  w.setAttribute(Qt::WA_DontShowOnScreen); | 
				
			||||
  w.setAttribute(Qt::WA_Mapped); | 
				
			||||
  w.setAttribute(Qt::WA_NoSystemBackground); | 
				
			||||
  w.resize(DEVICE_SCREEN_SIZE); | 
				
			||||
  setMainWindow(&w); | 
				
			||||
 | 
				
			||||
  return a.exec(); | 
				
			||||
} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
@ -1,9 +0,0 @@ | 
				
			||||
#pragma once | 
				
			||||
 | 
				
			||||
 | 
				
			||||
class Application { | 
				
			||||
public: | 
				
			||||
    Application(); | 
				
			||||
    ~Application(); | 
				
			||||
    int exec(int argc, char* argv[]); | 
				
			||||
}; | 
				
			||||
					Loading…
					
					
				
		Reference in new issue