frame offset

pull/24335/head
Shane Smiskol 3 years ago
parent 431b874910
commit a2cff8a2d5
  1. 1
      selfdrive/ui/qt/onroad.cc
  2. 8
      selfdrive/ui/qt/widgets/cameraview.cc
  3. 10
      selfdrive/ui/qt/widgets/cameraview.h

@ -375,6 +375,7 @@ void NvgWindow::paintGL() {
UIState *s = uiState(); UIState *s = uiState();
const cereal::ModelDataV2::Reader &model = (*s->sm)["modelV2"].getModelV2(); const cereal::ModelDataV2::Reader &model = (*s->sm)["modelV2"].getModelV2();
CameraViewWidget::setFrameId(model.getFrameId()); CameraViewWidget::setFrameId(model.getFrameId());
qDebug() << "NvgWindow::paintGL: frame to draw:" << model.getFrameId();
CameraViewWidget::paintGL(); CameraViewWidget::paintGL();
QPainter painter(this); QPainter painter(this);

@ -55,7 +55,7 @@ const mat4 device_transform = {{
0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0,
}}; }};
const int FRAME_BUFFER_SIZE = 4; const int FRAME_BUFFER_SIZE = 3;
static_assert(FRAME_BUFFER_SIZE <= YUV_BUFFER_COUNT); static_assert(FRAME_BUFFER_SIZE <= YUV_BUFFER_COUNT);
mat4 get_driver_view_transform(int screen_width, int screen_height, int stream_width, int stream_height) { mat4 get_driver_view_transform(int screen_width, int screen_height, int stream_width, int stream_height) {
@ -221,10 +221,14 @@ void CameraViewWidget::paintGL() {
if (frames.size() == 0) return; if (frames.size() == 0) return;
auto it = std::find_if(frames.begin(), frames.end(), [this](const std::pair<uint32_t, VisionBuf*>& element) { auto it = std::find_if(frames.begin(), frames.end(), [this](const std::pair<uint32_t, VisionBuf*>& element) {
return element.first == draw_frame_id; return element.first == (draw_frame_id + frame_offset);
}); });
int frame_idx = (it == frames.end()) ? (frames.size() - 1) : (it - frames.begin()); int frame_idx = (it == frames.end()) ? (frames.size() - 1) : (it - frames.begin());
VisionBuf *frame = frames[frame_idx].second; VisionBuf *frame = frames[frame_idx].second;
qDebug() << "Latest frame:" << frames[frames.size() - 1].first;
qDebug() << "Drawing frame:" << frames[frame_idx].first;
qDebug() << "CameraViewWidget::paintGL: frame to draw:" << draw_frame_id;
glPixelStorei(GL_UNPACK_ALIGNMENT, 1); glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glViewport(0, 0, width(), height()); glViewport(0, 0, width(), height());

@ -6,6 +6,7 @@
#include <QOpenGLShaderProgram> #include <QOpenGLShaderProgram>
#include <QOpenGLWidget> #include <QOpenGLWidget>
#include <QThread> #include <QThread>
#include <QDebug>
#include "cereal/visionipc/visionipc_client.h" #include "cereal/visionipc/visionipc_client.h"
#include "selfdrive/camerad/cameras/camera_common.h" #include "selfdrive/camerad/cameras/camera_common.h"
#include "selfdrive/ui/ui.h" #include "selfdrive/ui/ui.h"
@ -19,7 +20,11 @@ public:
~CameraViewWidget(); ~CameraViewWidget();
void setStreamType(VisionStreamType type) { stream_type = type; } void setStreamType(VisionStreamType type) { stream_type = type; }
void setBackgroundColor(const QColor &color) { bg = color; } void setBackgroundColor(const QColor &color) { bg = color; }
void setFrameId(int frame_id) { draw_frame_id = frame_id; } void setFrameId(int frame_id) {
frame_offset = frame_id == draw_frame_id ? frame_offset + 1 : 0;
if (frame_id > draw_frame_id)
draw_frame_id = frame_id;
}
signals: signals:
void clicked(); void clicked();
@ -50,7 +55,8 @@ protected:
QThread *vipc_thread = nullptr; QThread *vipc_thread = nullptr;
std::deque<std::pair<uint32_t, VisionBuf*>> frames; std::deque<std::pair<uint32_t, VisionBuf*>> frames;
uint32_t draw_frame_id; uint32_t draw_frame_id = 0;
uint32_t frame_offset = 0;
protected slots: protected slots:
void vipcConnected(VisionIpcClient *vipc_client); void vipcConnected(VisionIpcClient *vipc_client);

Loading…
Cancel
Save