heavy debugging

pull/24335/head
Shane Smiskol 3 years ago
parent 83d6689fd4
commit 55380c5bf2
  1. 1
      SConstruct
  2. 157
      selfdrive/ui/qt/widgets/cameraview.cc
  3. 9
      selfdrive/ui/qt/widgets/cameraview.h

@ -165,7 +165,6 @@ env = Environment(
"-g",
"-fPIC",
"-O2",
"-Wunused",
"-Werror",
"-Wshadow",
"-Wno-unknown-warning-option",

@ -103,6 +103,7 @@ CameraViewWidget::CameraViewWidget(std::string stream_name, VisionStreamType typ
setAttribute(Qt::WA_OpaquePaintEvent);
connect(this, &CameraViewWidget::vipcThreadConnected, this, &CameraViewWidget::vipcConnected, Qt::BlockingQueuedConnection);
connect(this, &CameraViewWidget::vipcThreadFrameReceived, this, &CameraViewWidget::vipcFrameReceived);
QObject::connect(uiState(), &UIState::uiUpdate, this, &CameraViewWidget::updateCameraFrame);
}
CameraViewWidget::~CameraViewWidget() {
@ -164,12 +165,28 @@ void CameraViewWidget::initializeGL() {
void CameraViewWidget::showEvent(QShowEvent *event) {
latest_frame = nullptr;
if (!vipc_thread) {
vipc_thread = new QThread();
connect(vipc_thread, &QThread::started, [=]() { vipcThread(); });
connect(vipc_thread, &QThread::finished, vipc_thread, &QObject::deleteLater);
vipc_thread->start();
if (!vipc_client) {
vipc_client.reset(new VisionIpcClient(stream_name, stream_type, false));
}
while (!vipc_client->connected) {
if (!vipc_client->connect(false)) {
QThread::msleep(100);
continue;
}
// emit vipcThreadConnected(vipc_client.get());
// emit vipcThreadConnected();
vipcConnected(vipc_client.get());
// break;
}
// if (!vipc_client) {
// vipc_thread = new QThread();
// connect(vipc_thread, &QThread::started, [=]() { vipcThread(); });
// connect(vipc_thread, &QThread::finished, vipc_thread, &QObject::deleteLater);
// vipc_thread->start();
// }
}
void CameraViewWidget::hideEvent(QHideEvent *event) {
@ -247,11 +264,13 @@ void CameraViewWidget::paintGL() {
glActiveTexture(GL_TEXTURE0);
}
void CameraViewWidget::vipcConnected(VisionIpcClient *vipc_client) {
void CameraViewWidget::vipcConnected(VisionIpcClient *_vipc_client) {
makeCurrent();
latest_frame = nullptr;
stream_width = vipc_client->buffers[0].width;
stream_height = vipc_client->buffers[0].height;
stream_width = _vipc_client->buffers[0].width;
stream_height = _vipc_client->buffers[0].height;
qDebug() << "vipcConnected";
// vipc_client.reset(_vipc_client);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
for (int i = 0; i < 3; ++i) {
@ -269,17 +288,74 @@ void CameraViewWidget::vipcConnected(VisionIpcClient *vipc_client) {
updateFrameMat(width(), height());
}
void CameraViewWidget::vipcFrameReceived(VisionBuf *buf) {
void CameraViewWidget::vipcFrameReceived() {
latest_frame = buf;
update();
}
void CameraViewWidget::updateCameraFrame() {
if (!vipc_client) {
qDebug() << "vipc_client not initialized";
return;
}
UIState *s = uiState();
// if (!vipc_client) {
// vipc_client.reset(new VisionIpcClient(stream_name, stream_type, false));
// }
//
// if (!vipc_client->connected) {
// if (vipc_client->connect(false)) {
// qDebug() << "CONNECTED";
// vipcConnected();
//// emit vipcThreadConnected();
// qDebug() << "CONNECTED2";
// }
// }
qDebug() << "Frame ready!";
bool recv_one = (meta_main.frame_id - (*s->sm)["modelV2"].getModelV2().getFrameId()) > 5;
while (meta_main.frame_id < (*s->sm)["modelV2"].getModelV2().getFrameId() || recv_one) {
recv_one = false;
qDebug() << "Getting buf";
buf = vipc_client->recv(&meta_main, 1000);
qDebug() << "After buf";
if (buf == nullptr) {
qDebug() << "nullptr!";
break;
}
}
if (buf != nullptr) {
// emit vipcThreadFrameReceived(buf);
latest_frame = buf;
update();
qDebug() << "update()";
}
qDebug() << "camerad:" << meta_main.frame_id << "modeld:" << (*s->sm)["modelV2"].getModelV2().getFrameId();
// // Wait until camera frame id is behind modelV2, then update once
// while (meta_main.frame_id >= (*s->sm)["modelV2"].getModelV2().getFrameId()) {
// qDebug() << "Sleeping";
// QThread::msleep(5);
// if ((meta_main.frame_id - (*s->sm)["modelV2"].getModelV2().getFrameId()) > 40) {
// break;
// }
// };
//
// if ((buf = vipc_client->recv(&meta_main, 1000))) {
// qDebug() << "emitting";
// emit vipcThreadFrameReceived(buf);
// }
// qDebug() << "camerad:" << meta_main.frame_id << "modeld:" << (*s->sm)["modelV2"].getModelV2().getFrameId();
}
void CameraViewWidget::vipcThread() {
VisionStreamType cur_stream_type = stream_type;
std::unique_ptr<VisionIpcClient> vipc_client;
VisionIpcBufExtra meta_main = {0};
VisionBuf *buf;
UIState *s = uiState();
// std::unique_ptr<VisionIpcClient> _vipc_client;
while (!QThread::currentThread()->isInterruptionRequested()) {
if (!vipc_client || cur_stream_type != stream_type) {
@ -293,21 +369,46 @@ void CameraViewWidget::vipcThread() {
continue;
}
emit vipcThreadConnected(vipc_client.get());
// emit vipcThreadConnected();
break;
}
// Wait until camera frame id is behind modelV2, then update once
while (meta_main.frame_id >= (*s->sm)["modelV2"].getModelV2().getFrameId()) {
qDebug() << "Sleeping";
QThread::msleep(5);
if ((meta_main.frame_id - (*s->sm)["modelV2"].getModelV2().getFrameId()) > 40) {
break;
}
};
if ((buf = vipc_client->recv(&meta_main, 1000))) {
qDebug() << "emitting";
emit vipcThreadFrameReceived(buf);
}
qDebug() << "camerad:" << meta_main.frame_id << "modeld:" << (*s->sm)["modelV2"].getModelV2().getFrameId();
}
}
//void CameraViewWidget::vipcThread() {
// VisionStreamType cur_stream_type = stream_type;
// std::unique_ptr<VisionIpcClient> vipc_client;
// VisionIpcBufExtra meta_main = {0};
// VisionBuf *buf;
// UIState *s = uiState();
//
// while (!QThread::currentThread()->isInterruptionRequested()) {
// if (!vipc_client || cur_stream_type != stream_type) {
// cur_stream_type = stream_type;
// vipc_client.reset(new VisionIpcClient(stream_name, cur_stream_type, false));
// }
//
// if (!vipc_client->connected) {
// if (!vipc_client->connect(false)) {
// QThread::msleep(100);
// continue;
// }
// emit vipcThreadConnected(vipc_client.get());
// }
//
// // Wait until camera frame id is behind modelV2, then update once
// while (meta_main.frame_id >= (*s->sm)["modelV2"].getModelV2().getFrameId()) {
// qDebug() << "Sleeping";
// QThread::msleep(5);
// if ((meta_main.frame_id - (*s->sm)["modelV2"].getModelV2().getFrameId()) > 40) {
// break;
// }
// };
//
// if ((buf = vipc_client->recv(&meta_main, 1000))) {
// qDebug() << "emitting";
// emit vipcThreadFrameReceived(buf);
// }
// qDebug() << "camerad:" << meta_main.frame_id << "modeld:" << (*s->sm)["modelV2"].getModelV2().getFrameId();
// }
//}

@ -23,7 +23,7 @@ public:
signals:
void clicked();
void vipcThreadConnected(VisionIpcClient *);
void vipcThreadFrameReceived(VisionBuf *);
void vipcThreadFrameReceived();
protected:
void paintGL() override;
@ -34,6 +34,11 @@ protected:
void mouseReleaseEvent(QMouseEvent *event) override { emit clicked(); }
virtual void updateFrameMat(int w, int h);
void vipcThread();
void updateCameraFrame();
QSharedPointer<VisionIpcClient> vipc_client;
VisionIpcBufExtra meta_main = {0};
VisionBuf *buf;
struct WaitFence {
WaitFence() { sync = glFenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0); }
@ -61,5 +66,5 @@ protected:
protected slots:
void vipcConnected(VisionIpcClient *vipc_client);
void vipcFrameReceived(VisionBuf *vipc_client);
void vipcFrameReceived();
};

Loading…
Cancel
Save