|  |  | @ -12,10 +12,9 @@ from openpilot.selfdrive.test.process_replay.process_replay import CONFIGS, FAKE | 
			
		
	
		
		
			
				
					
					|  |  |  |                                                                    check_openpilot_enabled, check_most_messages_valid, get_custom_params_from_lr |  |  |  |                                                                    check_openpilot_enabled, check_most_messages_valid, get_custom_params_from_lr | 
			
		
	
		
		
			
				
					
					|  |  |  | from openpilot.selfdrive.test.process_replay.vision_meta import DRIVER_CAMERA_FRAME_SIZES |  |  |  | from openpilot.selfdrive.test.process_replay.vision_meta import DRIVER_CAMERA_FRAME_SIZES | 
			
		
	
		
		
			
				
					
					|  |  |  | from openpilot.selfdrive.test.update_ci_routes import upload_route |  |  |  | from openpilot.selfdrive.test.update_ci_routes import upload_route | 
			
		
	
		
		
			
				
					
					|  |  |  | from openpilot.tools.lib.route import Route |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | from openpilot.tools.lib.framereader import FrameReader, BaseFrameReader, FrameType |  |  |  | from openpilot.tools.lib.framereader import FrameReader, BaseFrameReader, FrameType | 
			
		
	
		
		
			
				
					
					|  |  |  | from openpilot.tools.lib.logreader import LogReader, LogIterable, save_log |  |  |  | from openpilot.tools.lib.logreader import LogReader, LogIterable, save_log | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | from openpilot.tools.lib.openpilotci import get_url | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | class DummyFrameReader(BaseFrameReader): |  |  |  | class DummyFrameReader(BaseFrameReader): | 
			
		
	
		
		
			
				
					
					|  |  |  |   def __init__(self, w: int, h: int, frame_count: int, pix_val: int): |  |  |  |   def __init__(self, w: int, h: int, frame_count: int, pix_val: int): | 
			
		
	
	
		
		
			
				
					|  |  | @ -55,45 +54,28 @@ def regen_segment( | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | def setup_data_readers( |  |  |  | def setup_data_readers( | 
			
		
	
		
		
			
				
					
					|  |  |  |     route: str, sidx: int, use_route_meta: bool, |  |  |  |     route: str, sidx: int, needs_driver_cam: bool = True, needs_road_cam: bool = True, dummy_driver_cam: bool = False | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |     needs_driver_cam: bool = True, needs_road_cam: bool = True, dummy_driver_cam: bool = False |  |  |  |  | 
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | ) -> tuple[LogReader, dict[str, Any]]: |  |  |  | ) -> tuple[LogReader, dict[str, Any]]: | 
			
		
	
		
		
			
				
					
					|  |  |  |   if use_route_meta: |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     r = Route(route) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     lr = LogReader(r.log_paths()[sidx]) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     frs = {} |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     if needs_road_cam and len(r.camera_paths()) > sidx and r.camera_paths()[sidx] is not None: |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |       frs['roadCameraState'] = FrameReader(r.camera_paths()[sidx]) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     if needs_road_cam and  len(r.ecamera_paths()) > sidx and r.ecamera_paths()[sidx] is not None: |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |       frs['wideRoadCameraState'] = FrameReader(r.ecamera_paths()[sidx]) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     if needs_driver_cam: |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |       if dummy_driver_cam: |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         frs['driverCameraState'] = DummyFrameReader.zero_dcamera() |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |       elif len(r.dcamera_paths()) > sidx and r.dcamera_paths()[sidx] is not None: |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         device_type = next(str(msg.initData.deviceType) for msg in lr if msg.which() == "initData") |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         assert device_type != "neo", "Driver camera not supported on neo segments. Use dummy dcamera." |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         frs['driverCameraState'] = FrameReader(r.dcamera_paths()[sidx]) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   else: |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   lr = LogReader(f"{route}/{sidx}/r") |  |  |  |   lr = LogReader(f"{route}/{sidx}/r") | 
			
		
	
		
		
			
				
					
					|  |  |  |   frs = {} |  |  |  |   frs = {} | 
			
		
	
		
		
			
				
					
					|  |  |  |   if needs_road_cam: |  |  |  |   if needs_road_cam: | 
			
		
	
		
		
			
				
					
					|  |  |  |       frs['roadCameraState'] = FrameReader(f"cd:/{route.replace('|', '/')}/{sidx}/fcamera.hevc") |  |  |  |     frs['roadCameraState'] = FrameReader(get_url(route, str(sidx), "fcamera.hevc")) | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     if next((True for m in lr if m.which() == "wideRoadCameraState"), False): |  |  |  |     if next((True for m in lr if m.which() == "wideRoadCameraState"), False): | 
			
		
	
		
		
			
				
					
					|  |  |  |         frs['wideRoadCameraState'] = FrameReader(f"cd:/{route.replace('|', '/')}/{sidx}/ecamera.hevc") |  |  |  |       frs['wideRoadCameraState'] = FrameReader(get_url(route, str(sidx), "ecamera.hevc")) | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |   if needs_driver_cam: |  |  |  |   if needs_driver_cam: | 
			
		
	
		
		
			
				
					
					|  |  |  |     if dummy_driver_cam: |  |  |  |     if dummy_driver_cam: | 
			
		
	
		
		
			
				
					
					|  |  |  |       frs['driverCameraState'] = DummyFrameReader.zero_dcamera() |  |  |  |       frs['driverCameraState'] = DummyFrameReader.zero_dcamera() | 
			
		
	
		
		
			
				
					
					|  |  |  |     else: |  |  |  |     else: | 
			
		
	
		
		
			
				
					
					|  |  |  |       device_type = next(str(msg.initData.deviceType) for msg in lr if msg.which() == "initData") |  |  |  |       device_type = next(str(msg.initData.deviceType) for msg in lr if msg.which() == "initData") | 
			
		
	
		
		
			
				
					
					|  |  |  |       assert device_type != "neo", "Driver camera not supported on neo segments. Use dummy dcamera." |  |  |  |       assert device_type != "neo", "Driver camera not supported on neo segments. Use dummy dcamera." | 
			
		
	
		
		
			
				
					
					|  |  |  |         frs['driverCameraState'] = FrameReader(f"cd:/{route.replace('|', '/')}/{sidx}/dcamera.hevc") |  |  |  |       frs['driverCameraState'] = FrameReader(get_url(route, str(sidx), "dcamera.hevc")) | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   return lr, frs |  |  |  |   return lr, frs | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | def regen_and_save( |  |  |  | def regen_and_save( | 
			
		
	
		
		
			
				
					
					|  |  |  |   route: str, sidx: int, processes: str | Iterable[str] = "all", outdir: str = FAKEDATA, |  |  |  |   route: str, sidx: int, processes: str | Iterable[str] = "all", outdir: str = FAKEDATA, | 
			
		
	
		
		
			
				
					
					|  |  |  |   upload: bool = False, use_route_meta: bool = False, disable_tqdm: bool = False, dummy_driver_cam: bool = False |  |  |  |   upload: bool = False, disable_tqdm: bool = False, dummy_driver_cam: bool = False | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | ) -> str: |  |  |  | ) -> str: | 
			
		
	
		
		
			
				
					
					|  |  |  |   if not isinstance(processes, str) and not hasattr(processes, "__iter__"): |  |  |  |   if not isinstance(processes, str) and not hasattr(processes, "__iter__"): | 
			
		
	
		
		
			
				
					
					|  |  |  |     raise ValueError("whitelist_proc must be a string or iterable") |  |  |  |     raise ValueError("whitelist_proc must be a string or iterable") | 
			
		
	
	
		
		
			
				
					|  |  | @ -110,7 +92,7 @@ def regen_and_save( | 
			
		
	
		
		
			
				
					
					|  |  |  |     replayed_processes = CONFIGS |  |  |  |     replayed_processes = CONFIGS | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   all_vision_pubs = {pub for cfg in replayed_processes for pub in cfg.vision_pubs} |  |  |  |   all_vision_pubs = {pub for cfg in replayed_processes for pub in cfg.vision_pubs} | 
			
		
	
		
		
			
				
					
					|  |  |  |   lr, frs = setup_data_readers(route, sidx, use_route_meta, |  |  |  |   lr, frs = setup_data_readers(route, sidx, | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |                                needs_driver_cam="driverCameraState" in all_vision_pubs, |  |  |  |                                needs_driver_cam="driverCameraState" in all_vision_pubs, | 
			
		
	
		
		
			
				
					
					|  |  |  |                                needs_road_cam="roadCameraState" in all_vision_pubs or "wideRoadCameraState" in all_vision_pubs, |  |  |  |                                needs_road_cam="roadCameraState" in all_vision_pubs or "wideRoadCameraState" in all_vision_pubs, | 
			
		
	
		
		
			
				
					
					|  |  |  |                                dummy_driver_cam=dummy_driver_cam) |  |  |  |                                dummy_driver_cam=dummy_driver_cam) | 
			
		
	
	
		
		
			
				
					|  |  | 
 |