    std::string stream_name;
    int stream_width = 0;
    int stream_height = 0;
    int stream_stride = 0;
    std::atomic<VisionStreamType> stream_type;
    QThread *vipc_thread = nullptr;
  
    // Calibration
    float x_offset = 0;
    float y_offset = 0;
 
</s> remove static int get_path_length_idx(const cereal::ModelDataV2::XYZTData::Reader &line, const float path_height) {
 </s> add int get_path_length_idx(const cereal::ModelDataV2::XYZTData::Reader &line, const float path_height) { </s> remove   std::mutex frame_lock;
 </s> add   std::recursive_mutex frame_lock; </s> remove       float zx = zoom * 2 * intrinsic_matrix.v[2] / width();
      float zy = zoom * 2 * intrinsic_matrix.v[5] / height();
 </s> add       float zx = zoom * 2 * intrinsic_matrix.v[2] / w;
      float zy = zoom * 2 * intrinsic_matrix.v[5] / h; </s> remove static void update_leads(UIState *s, const cereal::RadarState::Reader &radar_state, const cereal::ModelDataV2::XYZTData::Reader &line) {
 </s> add void update_leads(UIState *s, const cereal::RadarState::Reader &radar_state, const cereal::ModelDataV2::XYZTData::Reader &line) {
  std::atomic<VisionStreamType> active_stream_type;
  std::atomic<VisionStreamType> requested_stream_type;
    std::string stream_name;
    int stream_width = 0;
    int stream_height = 0;
    int stream_stride = 0;
  std::atomic<VisionStreamType> active_stream_type;
  std::atomic<VisionStreamType> requested_stream_type;
    QThread *vipc_thread = nullptr;
  
    // Calibration
    float x_offset = 0;
    float y_offset = 0;
keep keep keep keep replace keep keep keep keep keep
 UI: draw onroad objects on right frame (#26306)

* update before draw

* fix a lot of janky

* fix more flicker

* cleanup

* fix flicker when opening settings

* simplify 
selfdrive/ui/qt/widgets/cameraview.h