| 
						
						
							
								
							
						
						
					 | 
					 | 
					@ -127,7 +127,7 @@ static int imx298_apply_exposure(CameraState *s, int gain, int integ_lines, uint | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    // REG_HOLD
 | 
					 | 
					 | 
					 | 
					    // REG_HOLD
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    {0x104,0x0,0}, | 
					 | 
					 | 
					 | 
					    {0x104,0x0,0}, | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  }; | 
					 | 
					 | 
					 | 
					  }; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  return sensor_write_regs(s, reg_array, ARRAYSIZE(reg_array), MSM_CAMERA_I2C_BYTE_DATA); | 
					 | 
					 | 
					 | 
					  return sensor_write_regs(s, reg_array, std::size(reg_array), MSM_CAMERA_I2C_BYTE_DATA); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					} | 
					 | 
					 | 
					 | 
					} | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					static int ov8865_apply_exposure(CameraState *s, int gain, int integ_lines, uint32_t frame_length) { | 
					 | 
					 | 
					 | 
					static int ov8865_apply_exposure(CameraState *s, int gain, int integ_lines, uint32_t frame_length) { | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -137,7 +137,7 @@ static int ov8865_apply_exposure(CameraState *s, int gain, int integ_lines, uint | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  // get bitmaps from iso
 | 
					 | 
					 | 
					 | 
					  // get bitmaps from iso
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  static const int gains[] = {0, 100, 200, 400, 800}; | 
					 | 
					 | 
					 | 
					  static const int gains[] = {0, 100, 200, 400, 800}; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  int i; | 
					 | 
					 | 
					 | 
					  int i; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  for (i = 1; i < ARRAYSIZE(gains); i++) { | 
					 | 
					 | 
					 | 
					  for (i = 1; i < std::size(gains); i++) { | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if (gain >= gains[i - 1] && gain < gains[i]) | 
					 | 
					 | 
					 | 
					    if (gain >= gains[i - 1] && gain < gains[i]) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      break; | 
					 | 
					 | 
					 | 
					      break; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  } | 
					 | 
					 | 
					 | 
					  } | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -162,7 +162,7 @@ static int ov8865_apply_exposure(CameraState *s, int gain, int integ_lines, uint | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    //{0x104,0x0,0},
 | 
					 | 
					 | 
					 | 
					    //{0x104,0x0,0},
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  }; | 
					 | 
					 | 
					 | 
					  }; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  return sensor_write_regs(s, reg_array, ARRAYSIZE(reg_array), MSM_CAMERA_I2C_BYTE_DATA); | 
					 | 
					 | 
					 | 
					  return sensor_write_regs(s, reg_array, std::size(reg_array), MSM_CAMERA_I2C_BYTE_DATA); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					} | 
					 | 
					 | 
					 | 
					} | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					static void camera_init(VisionIpcServer *v, CameraState *s, int camera_id, int camera_num, | 
					 | 
					 | 
					 | 
					static void camera_init(VisionIpcServer *v, CameraState *s, int camera_id, int camera_num, | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -172,7 +172,7 @@ static void camera_init(VisionIpcServer *v, CameraState *s, int camera_id, int c | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  s->camera_num = camera_num; | 
					 | 
					 | 
					 | 
					  s->camera_num = camera_num; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  s->camera_id = camera_id; | 
					 | 
					 | 
					 | 
					  s->camera_id = camera_id; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  assert(camera_id < ARRAYSIZE(cameras_supported)); | 
					 | 
					 | 
					 | 
					  assert(camera_id < std::size(cameras_supported)); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  s->ci = cameras_supported[camera_id]; | 
					 | 
					 | 
					 | 
					  s->ci = cameras_supported[camera_id]; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  assert(s->ci.frame_width != 0); | 
					 | 
					 | 
					 | 
					  assert(s->ci.frame_width != 0); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -501,7 +501,7 @@ static void camera_open(CameraState *s, bool is_road_cam) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  // SENSOR: stop stream
 | 
					 | 
					 | 
					 | 
					  // SENSOR: stop stream
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  struct msm_camera_i2c_reg_setting stop_settings = { | 
					 | 
					 | 
					 | 
					  struct msm_camera_i2c_reg_setting stop_settings = { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    .reg_setting = stop_reg_array, | 
					 | 
					 | 
					 | 
					    .reg_setting = stop_reg_array, | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    .size = ARRAYSIZE(stop_reg_array), | 
					 | 
					 | 
					 | 
					    .size = std::size(stop_reg_array), | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    .addr_type = MSM_CAMERA_I2C_WORD_ADDR, | 
					 | 
					 | 
					 | 
					    .addr_type = MSM_CAMERA_I2C_WORD_ADDR, | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    .data_type = MSM_CAMERA_I2C_BYTE_DATA, | 
					 | 
					 | 
					 | 
					    .data_type = MSM_CAMERA_I2C_BYTE_DATA, | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    .delay = 0 | 
					 | 
					 | 
					 | 
					    .delay = 0 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -518,9 +518,9 @@ static void camera_open(CameraState *s, bool is_road_cam) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  // SENSOR: send i2c configuration
 | 
					 | 
					 | 
					 | 
					  // SENSOR: send i2c configuration
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  if (s->camera_id == CAMERA_ID_IMX298) { | 
					 | 
					 | 
					 | 
					  if (s->camera_id == CAMERA_ID_IMX298) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    err = sensor_write_regs(s, init_array_imx298, ARRAYSIZE(init_array_imx298), MSM_CAMERA_I2C_BYTE_DATA); | 
					 | 
					 | 
					 | 
					    err = sensor_write_regs(s, init_array_imx298, std::size(init_array_imx298), MSM_CAMERA_I2C_BYTE_DATA); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  } else if (s->camera_id == CAMERA_ID_OV8865) { | 
					 | 
					 | 
					 | 
					  } else if (s->camera_id == CAMERA_ID_OV8865) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    err = sensor_write_regs(s, init_array_ov8865, ARRAYSIZE(init_array_ov8865), MSM_CAMERA_I2C_BYTE_DATA); | 
					 | 
					 | 
					 | 
					    err = sensor_write_regs(s, init_array_ov8865, std::size(init_array_ov8865), MSM_CAMERA_I2C_BYTE_DATA); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  } else { | 
					 | 
					 | 
					 | 
					  } else { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    assert(false); | 
					 | 
					 | 
					 | 
					    assert(false); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  } | 
					 | 
					 | 
					 | 
					  } | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -587,7 +587,7 @@ static void camera_open(CameraState *s, bool is_road_cam) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  } | 
					 | 
					 | 
					 | 
					  } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  if (s->camera_id == CAMERA_ID_IMX298) { | 
					 | 
					 | 
					 | 
					  if (s->camera_id == CAMERA_ID_IMX298) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    err = sensor_write_regs(s, mode_setting_array_imx298, ARRAYSIZE(mode_setting_array_imx298), MSM_CAMERA_I2C_BYTE_DATA); | 
					 | 
					 | 
					 | 
					    err = sensor_write_regs(s, mode_setting_array_imx298, std::size(mode_setting_array_imx298), MSM_CAMERA_I2C_BYTE_DATA); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    LOG("sensor setup: %d", err); | 
					 | 
					 | 
					 | 
					    LOG("sensor setup: %d", err); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  } | 
					 | 
					 | 
					 | 
					  } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -728,7 +728,7 @@ static void camera_open(CameraState *s, bool is_road_cam) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					static void road_camera_start(CameraState *s) { | 
					 | 
					 | 
					 | 
					static void road_camera_start(CameraState *s) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  set_exposure(s, 1.0, 1.0); | 
					 | 
					 | 
					 | 
					  set_exposure(s, 1.0, 1.0); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  int err = sensor_write_regs(s, start_reg_array, ARRAYSIZE(start_reg_array), MSM_CAMERA_I2C_BYTE_DATA); | 
					 | 
					 | 
					 | 
					  int err = sensor_write_regs(s, start_reg_array, std::size(start_reg_array), MSM_CAMERA_I2C_BYTE_DATA); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  LOG("sensor start regs: %d", err); | 
					 | 
					 | 
					 | 
					  LOG("sensor start regs: %d", err); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  int inf_step = 512 - INFINITY_DAC; | 
					 | 
					 | 
					 | 
					  int inf_step = 512 - INFINITY_DAC; | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -905,7 +905,7 @@ void camera_autoexposure(CameraState *s, float grey_frac) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					static void driver_camera_start(CameraState *s) { | 
					 | 
					 | 
					 | 
					static void driver_camera_start(CameraState *s) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  set_exposure(s, 1.0, 1.0); | 
					 | 
					 | 
					 | 
					  set_exposure(s, 1.0, 1.0); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  int err = sensor_write_regs(s, start_reg_array, ARRAYSIZE(start_reg_array), MSM_CAMERA_I2C_BYTE_DATA); | 
					 | 
					 | 
					 | 
					  int err = sensor_write_regs(s, start_reg_array, std::size(start_reg_array), MSM_CAMERA_I2C_BYTE_DATA); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  LOG("sensor start regs: %d", err); | 
					 | 
					 | 
					 | 
					  LOG("sensor start regs: %d", err); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					} | 
					 | 
					 | 
					 | 
					} | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -1124,7 +1124,7 @@ void cameras_run(MultiCameraState *s) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  while (!do_exit) { | 
					 | 
					 | 
					 | 
					  while (!do_exit) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    struct pollfd fds[2] = {{.fd = cameras[0]->isp_fd, .events = POLLPRI}, | 
					 | 
					 | 
					 | 
					    struct pollfd fds[2] = {{.fd = cameras[0]->isp_fd, .events = POLLPRI}, | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                            {.fd = cameras[1]->isp_fd, .events = POLLPRI}}; | 
					 | 
					 | 
					 | 
					                            {.fd = cameras[1]->isp_fd, .events = POLLPRI}}; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    int ret = poll(fds, ARRAYSIZE(fds), 1000); | 
					 | 
					 | 
					 | 
					    int ret = poll(fds, std::size(fds), 1000); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if (ret < 0) { | 
					 | 
					 | 
					 | 
					    if (ret < 0) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      if (errno == EINTR || errno == EAGAIN) continue; | 
					 | 
					 | 
					 | 
					      if (errno == EINTR || errno == EAGAIN) continue; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      LOGE("poll failed (%d - %d)", ret, errno); | 
					 | 
					 | 
					 | 
					      LOGE("poll failed (%d - %d)", ret, errno); | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
					 | 
					
  |