|  |  | @ -41,70 +41,67 @@ static inline auto get_yuv_buf(std::vector<uint8_t> &buf, const int width, int h | 
			
		
	
		
		
			
				
					
					|  |  |  |   return std::make_tuple(y, u, v); |  |  |  |   return std::make_tuple(y, u, v); | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | DMonitoringResult dmonitoring_eval_frame(DMonitoringModelState* s, void* stream_buf, int width, int height) { |  |  |  | struct Rect {int x, y, w, h;}; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |   uint8_t *raw_buf = (uint8_t*) stream_buf; |  |  |  | void crop_yuv(uint8_t *raw, int width, int height, uint8_t *y, uint8_t *u, uint8_t *v, const Rect &rect) { | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |   uint8_t *raw_y_buf = raw_buf; |  |  |  |   uint8_t *raw_y = raw; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |   uint8_t *raw_u_buf = raw_y_buf + (width * height); |  |  |  |   uint8_t *raw_u = raw_y + (width * height); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |   uint8_t *raw_v_buf = raw_u_buf + ((width/2) * (height/2)); |  |  |  |   uint8_t *raw_v = raw_u + ((width / 2) * (height / 2)); | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   for (int r = 0; r < rect.h / 2; r++) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     memcpy(y + 2 * r * rect.w, raw_y + (2 * r + rect.y) * width + rect.x, rect.w); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     memcpy(y + (2 * r + 1) * rect.w, raw_y + (2 * r + rect.y + 1) * width + rect.x, rect.w); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     memcpy(u + r * (rect.w / 2), raw_u + (r + (rect.y / 2)) * width / 2 + (rect.x / 2), rect.w / 2); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     memcpy(v + r * (rect.w / 2), raw_v + (r + (rect.y / 2)) * width / 2 + (rect.x / 2), rect.w / 2); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | DMonitoringResult dmonitoring_eval_frame(DMonitoringModelState* s, void* stream_buf, int width, int height) { | 
			
		
	
		
		
			
				
					
					|  |  |  | #ifndef QCOM2 |  |  |  | #ifndef QCOM2 | 
			
		
	
		
		
			
				
					
					|  |  |  |   const int cropped_width = height/2; |  |  |  |   Rect crop_rect = {0, 0, height / 2, height}; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |   const int cropped_height = height; |  |  |  |   if (!s->is_rhd) { | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |   const int global_x_offset = 0; |  |  |  |     crop_rect.x += width - crop_rect.w; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |   const int global_y_offset = 0; |  |  |  |   } | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |   const int crop_x_offset = width - cropped_width; |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   const int crop_y_offset = 0; |  |  |  |  | 
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | #else |  |  |  | #else | 
			
		
	
		
		
			
				
					
					|  |  |  |   const int full_width_tici = 1928; |  |  |  |   const int full_width_tici = 1928; | 
			
		
	
		
		
			
				
					
					|  |  |  |   const int full_height_tici = 1208; |  |  |  |   const int full_height_tici = 1208; | 
			
		
	
		
		
			
				
					
					|  |  |  |   const int adapt_width_tici = 668; |  |  |  |   const int adapt_width_tici = 668; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   const int cropped_height = adapt_width_tici / 1.33; |  |  |  |   const int cropped_height = adapt_width_tici / 1.33; | 
			
		
	
		
		
			
				
					
					|  |  |  |   const int cropped_width = cropped_height / 2; |  |  |  |   Rect crop_rect = {full_width_tici / 2 - adapt_width_tici / 2, | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |   const int global_x_offset = full_width_tici / 2 - adapt_width_tici / 2; |  |  |  |                     full_height_tici / 2 - cropped_height / 2 - 196, | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |   const int global_y_offset = full_height_tici / 2 - cropped_height / 2; |  |  |  |                     cropped_height / 2, | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |   const int crop_x_offset = adapt_width_tici - cropped_width + 32; |  |  |  |                     cropped_height}; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |   const int crop_y_offset = -196; |  |  |  |   if (!s->is_rhd) { | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     crop_rect.x += adapt_width_tici - crop_rect.w + 32; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   } | 
			
		
	
		
		
			
				
					
					|  |  |  | #endif |  |  |  | #endif | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   int resized_width = MODEL_WIDTH; |  |  |  |   int resized_width = MODEL_WIDTH; | 
			
		
	
		
		
			
				
					
					|  |  |  |   int resized_height = MODEL_HEIGHT; |  |  |  |   int resized_height = MODEL_HEIGHT; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   auto [cropped_y_buf, cropped_u_buf, cropped_v_buf] = get_yuv_buf(s->cropped_buf, cropped_width, cropped_height); |  |  |  |   auto [cropped_y, cropped_u, cropped_v] = get_yuv_buf(s->cropped_buf, crop_rect.w, crop_rect.h); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |   if (!s->is_rhd) { |  |  |  |   if (!s->is_rhd) { | 
			
		
	
		
		
			
				
					
					|  |  |  |     for (int r = 0; r < cropped_height/2; r++) { |  |  |  |     crop_yuv((uint8_t *)stream_buf, width, height, cropped_y, cropped_u, cropped_v, crop_rect); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |       memcpy(cropped_y_buf + 2*r*cropped_width, raw_y_buf + (2*r + global_y_offset + crop_y_offset)*width + global_x_offset + crop_x_offset, cropped_width); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |       memcpy(cropped_y_buf + (2*r+1)*cropped_width, raw_y_buf + (2*r + global_y_offset + crop_y_offset + 1)*width + global_x_offset + crop_x_offset, cropped_width); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |       memcpy(cropped_u_buf + r*(cropped_width/2), raw_u_buf + (r + (global_y_offset + crop_y_offset)/2)*width/2 + (global_x_offset + crop_x_offset)/2, cropped_width/2); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |       memcpy(cropped_v_buf + r*(cropped_width/2), raw_v_buf + (r + (global_y_offset + crop_y_offset)/2)*width/2 + (global_x_offset + crop_x_offset)/2, cropped_width/2); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |  | 
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |   } else { |  |  |  |   } else { | 
			
		
	
		
		
			
				
					
					|  |  |  |     auto [premirror_cropped_y_buf, premirror_cropped_u_buf, premirror_cropped_v_buf] = get_yuv_buf(s->premirror_cropped_buf, cropped_width, cropped_height); |  |  |  |     auto [mirror_y, mirror_u, mirror_v] = get_yuv_buf(s->premirror_cropped_buf, crop_rect.w, crop_rect.h); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |     for (int r = 0; r < cropped_height/2; r++) { |  |  |  |     crop_yuv((uint8_t *)stream_buf, width, height, mirror_y, mirror_u, mirror_v, crop_rect); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |       memcpy(premirror_cropped_y_buf + (2*r)*cropped_width, raw_y_buf + (2*r + global_y_offset + crop_y_offset)*width + global_x_offset, cropped_width); |  |  |  |     libyuv::I420Mirror(mirror_y, crop_rect.w, | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |       memcpy(premirror_cropped_y_buf + (2*r+1)*cropped_width, raw_y_buf + (2*r + global_y_offset + crop_y_offset + 1)*width + global_x_offset, cropped_width); |  |  |  |                        mirror_u, crop_rect.w / 2, | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |       memcpy(premirror_cropped_u_buf + r*(cropped_width/2), raw_u_buf + (r + (global_y_offset + crop_y_offset)/2)*width/2 + global_x_offset/2, cropped_width/2); |  |  |  |                        mirror_v, crop_rect.w / 2, | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |       memcpy(premirror_cropped_v_buf + r*(cropped_width/2), raw_v_buf + (r + (global_y_offset + crop_y_offset)/2)*width/2 + global_x_offset/2, cropped_width/2); |  |  |  |                        cropped_y, crop_rect.w, | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |                        cropped_u, crop_rect.w / 2, | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |     libyuv::I420Mirror(premirror_cropped_y_buf, cropped_width, |  |  |  |                        cropped_v, crop_rect.w / 2, | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                        premirror_cropped_u_buf, cropped_width/2, |  |  |  |                        crop_rect.w, crop_rect.h); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                        premirror_cropped_v_buf, cropped_width/2, |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                        cropped_y_buf, cropped_width, |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                        cropped_u_buf, cropped_width/2, |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                        cropped_v_buf, cropped_width/2, |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |                        cropped_width, cropped_height); |  |  |  |  | 
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |   } |  |  |  |   } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   auto [resized_buf, resized_u_buf, resized_v_buf] = get_yuv_buf(s->resized_buf, resized_width, resized_height); |  |  |  |   auto [resized_buf, resized_u, resized_v] = get_yuv_buf(s->resized_buf, resized_width, resized_height); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |   uint8_t *resized_y_buf = resized_buf; |  |  |  |   uint8_t *resized_y = resized_buf; | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |   libyuv::FilterMode mode = libyuv::FilterModeEnum::kFilterBilinear; |  |  |  |   libyuv::FilterMode mode = libyuv::FilterModeEnum::kFilterBilinear; | 
			
		
	
		
		
			
				
					
					|  |  |  |   libyuv::I420Scale(cropped_y_buf, cropped_width, |  |  |  |   libyuv::I420Scale(cropped_y, crop_rect.w, | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                     cropped_u_buf, cropped_width/2, |  |  |  |                     cropped_u, crop_rect.w / 2, | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                     cropped_v_buf, cropped_width/2, |  |  |  |                     cropped_v, crop_rect.w / 2, | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                     cropped_width, cropped_height, |  |  |  |                     crop_rect.w, crop_rect.h, | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                     resized_y_buf, resized_width, |  |  |  |                     resized_y, resized_width, | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                     resized_u_buf, resized_width/2, |  |  |  |                     resized_u, resized_width / 2, | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |                     resized_v_buf, resized_width/2, |  |  |  |                     resized_v, resized_width / 2, | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |                     resized_width, resized_height, |  |  |  |                     resized_width, resized_height, | 
			
		
	
		
		
			
				
					
					|  |  |  |                     mode); |  |  |  |                     mode); | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  |  | 
 |