|  |  |  | @ -807,11 +807,6 @@ void cameras_init(MultiCameraState *s, cl_device_id device_id, cl_context ctx) { | 
			
		
	
		
			
				
					|  |  |  |  |   printf("wide initted \n"); | 
			
		
	
		
			
				
					|  |  |  |  |   camera_init(&s->front, CAMERA_ID_AR0231, 2, 20, device_id, ctx); | 
			
		
	
		
			
				
					|  |  |  |  |   printf("front initted \n"); | 
			
		
	
		
			
				
					|  |  |  |  | #ifdef NOSCREEN | 
			
		
	
		
			
				
					|  |  |  |  |   zsock_t *rgb_sock = zsock_new_push("tcp://192.168.3.4:7768"); | 
			
		
	
		
			
				
					|  |  |  |  |   assert(rgb_sock); | 
			
		
	
		
			
				
					|  |  |  |  |   s->rgb_sock = rgb_sock; | 
			
		
	
		
			
				
					|  |  |  |  | #endif | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   s->sm = new SubMaster({"driverState"}); | 
			
		
	
		
			
				
					|  |  |  |  |   s->pm = new PubMaster({"frame", "frontFrame", "wideFrame", "thumbnail"}); | 
			
		
	
	
		
			
				
					|  |  |  | @ -918,9 +913,7 @@ static void cameras_close(MultiCameraState *s) { | 
			
		
	
		
			
				
					|  |  |  |  |   camera_close(&s->rear); | 
			
		
	
		
			
				
					|  |  |  |  |   camera_close(&s->wide); | 
			
		
	
		
			
				
					|  |  |  |  |   camera_close(&s->front); | 
			
		
	
		
			
				
					|  |  |  |  | #ifdef NOSCREEN | 
			
		
	
		
			
				
					|  |  |  |  |   zsock_destroy(&s->rgb_sock); | 
			
		
	
		
			
				
					|  |  |  |  | #endif | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   delete s->sm; | 
			
		
	
		
			
				
					|  |  |  |  |   delete s->pm; | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
	
		
			
				
					|  |  |  | @ -1107,27 +1100,18 @@ static void* ae_thread(void* arg) { | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | void camera_process_front(MultiCameraState *s, CameraState *c, int cnt) { | 
			
		
	
		
			
				
					|  |  |  |  |   common_camera_process_front(s->sm, s->pm, c, cnt); | 
			
		
	
		
			
				
					|  |  |  |  | #ifdef NOSCREEN | 
			
		
	
		
			
				
					|  |  |  |  |   const CameraBuf *b = &c->buf; | 
			
		
	
		
			
				
					|  |  |  |  |   if (b->cur_frame_data.frame_id % 4 == 2) { | 
			
		
	
		
			
				
					|  |  |  |  |     sendrgb(s, (uint8_t *)b->cur_rgb_buf->addr, b->cur_rgb_buf->len, 2); | 
			
		
	
		
			
				
					|  |  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  |  | #endif | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | // called by processing_thread
 | 
			
		
	
		
			
				
					|  |  |  |  | void camera_process_frame(MultiCameraState *s, CameraState *c, int cnt) { | 
			
		
	
		
			
				
					|  |  |  |  |   const CameraBuf *b = &c->buf; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | #ifdef NOSCREEN | 
			
		
	
		
			
				
					|  |  |  |  |   if (b->cur_frame_data.frame_id % 4 == (c == &s->rear ? 1 : 0)) { | 
			
		
	
		
			
				
					|  |  |  |  |     sendrgb(s, (uint8_t *)b->cur_rgb_buf->addr, b->cur_rgb_buf->len, c == &s->rear ? 0 : 1); | 
			
		
	
		
			
				
					|  |  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  |  | #endif | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   MessageBuilder msg; | 
			
		
	
		
			
				
					|  |  |  |  |   auto framed = c == &s->rear ? msg.initEvent().initFrame() : msg.initEvent().initWideFrame(); | 
			
		
	
		
			
				
					|  |  |  |  |   fill_frame_data(framed, b->cur_frame_data, cnt); | 
			
		
	
		
			
				
					|  |  |  |  |   if ((c == &s->rear && env_send_rear) || (c == &s->wide && env_send_wide)) { | 
			
		
	
		
			
				
					|  |  |  |  |     fill_frame_image(framed, (uint8_t*)b->cur_rgb_buf->addr, b->rgb_width, b->rgb_height, b->rgb_stride); | 
			
		
	
		
			
				
					|  |  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  |  |   if (c == &s->rear) { | 
			
		
	
		
			
				
					|  |  |  |  |     framed.setTransform(kj::ArrayPtr<const float>(&b->yuv_transform.v[0], 9)); | 
			
		
	
		
			
				
					|  |  |  |  |   } | 
			
		
	
	
		
			
				
					|  |  |  | @ -1224,32 +1208,3 @@ void cameras_run(MultiCameraState *s) { | 
			
		
	
		
			
				
					|  |  |  |  |   
 | 
			
		
	
		
			
				
					|  |  |  |  |   for (auto &t : threads) t.join(); | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | #ifdef NOSCREEN | 
			
		
	
		
			
				
					|  |  |  |  | void sendrgb(MultiCameraState *s, uint8_t* dat, int len, uint8_t cam_id) { | 
			
		
	
		
			
				
					|  |  |  |  |   int err, err2; | 
			
		
	
		
			
				
					|  |  |  |  |   int scale = 6; | 
			
		
	
		
			
				
					|  |  |  |  |   int old_width = FRAME_WIDTH; | 
			
		
	
		
			
				
					|  |  |  |  |   // int old_height = FRAME_HEIGHT;
 | 
			
		
	
		
			
				
					|  |  |  |  |   int new_width = FRAME_WIDTH / scale; | 
			
		
	
		
			
				
					|  |  |  |  |   int new_height = FRAME_HEIGHT / scale; | 
			
		
	
		
			
				
					|  |  |  |  |   uint8_t resized_dat[new_width*new_height*3]; | 
			
		
	
		
			
				
					|  |  |  |  |   // int goff, loff;
 | 
			
		
	
		
			
				
					|  |  |  |  |   // goff = ((old_width*(scale-1)*old_height/scale)/2);
 | 
			
		
	
		
			
				
					|  |  |  |  |   memset(&resized_dat, cam_id, 3); | 
			
		
	
		
			
				
					|  |  |  |  |   for (uint32_t r=1;r<new_height;r++) { | 
			
		
	
		
			
				
					|  |  |  |  |     for (uint32_t c=1;c<new_width;c++) { | 
			
		
	
		
			
				
					|  |  |  |  |       resized_dat[(r*new_width+c)*3] = dat[(r*old_width + c)*3*scale]; | 
			
		
	
		
			
				
					|  |  |  |  |       resized_dat[(r*new_width+c)*3+1] = dat[(r*old_width + c)*3*scale+1]; | 
			
		
	
		
			
				
					|  |  |  |  |       resized_dat[(r*new_width+c)*3+2] = dat[(r*old_width + c)*3*scale+2]; | 
			
		
	
		
			
				
					|  |  |  |  |       // loff = r*old_width + c;
 | 
			
		
	
		
			
				
					|  |  |  |  |       // resized_dat[(r*new_width+c)*3] = dat[(goff+loff)*3];
 | 
			
		
	
		
			
				
					|  |  |  |  |       // resized_dat[(r*new_width+c)*3+1] = dat[(goff+loff)*3+1];
 | 
			
		
	
		
			
				
					|  |  |  |  |       // resized_dat[(r*new_width+c)*3+2] = dat[(goff+loff)*3+2];
 | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  |  |   err = zmq_send(zsock_resolve(s->rgb_sock), &resized_dat, new_width*new_height*3, 0); | 
			
		
	
		
			
				
					|  |  |  |  |   err2 = zmq_errno(); | 
			
		
	
		
			
				
					|  |  |  |  |   //printf("zmq errcode %d, %d\n",err,err2);
 | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | #endif | 
			
		
	
	
		
			
				
					|  |  |  | 
 |