|  |  | @ -10,7 +10,6 @@ import time | 
			
		
	
		
		
			
				
					
					|  |  |  | import cereal.messaging as messaging |  |  |  | import cereal.messaging as messaging | 
			
		
	
		
		
			
				
					
					|  |  |  | from cereal.visionipc import VisionIpcServer, VisionStreamType |  |  |  | from cereal.visionipc import VisionIpcServer, VisionStreamType | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | W, H = 1928, 1208 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | V4L2_BUF_FLAG_KEYFRAME = 8 |  |  |  | V4L2_BUF_FLAG_KEYFRAME = 8 | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | ENCODE_SOCKETS = { |  |  |  | ENCODE_SOCKETS = { | 
			
		
	
	
		
		
			
				
					|  |  | @ -19,10 +18,11 @@ ENCODE_SOCKETS = { | 
			
		
	
		
		
			
				
					
					|  |  |  |   VisionStreamType.VISION_STREAM_DRIVER: "driverEncodeData", |  |  |  |   VisionStreamType.VISION_STREAM_DRIVER: "driverEncodeData", | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | def decoder(addr, vipc_server, vst, nvidia, debug=False): |  |  |  | def decoder(addr, vipc_server, vst, nvidia, W, H, debug=False): | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |   sock_name = ENCODE_SOCKETS[vst] |  |  |  |   sock_name = ENCODE_SOCKETS[vst] | 
			
		
	
		
		
			
				
					
					|  |  |  |   if debug: |  |  |  |   if debug: | 
			
		
	
		
		
			
				
					
					|  |  |  |     print("start decoder for %s" % sock_name) |  |  |  |     print("start decoder for %s" % sock_name) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   if nvidia: |  |  |  |   if nvidia: | 
			
		
	
		
		
			
				
					
					|  |  |  |     os.environ["NV_LOW_LATENCY"] = "3"    # both bLowLatency and CUVID_PKT_ENDOFPICTURE |  |  |  |     os.environ["NV_LOW_LATENCY"] = "3"    # both bLowLatency and CUVID_PKT_ENDOFPICTURE | 
			
		
	
		
		
			
				
					
					|  |  |  |     sys.path += os.environ["LD_LIBRARY_PATH"].split(":") |  |  |  |     sys.path += os.environ["LD_LIBRARY_PATH"].split(":") | 
			
		
	
	
		
		
			
				
					|  |  | @ -99,16 +99,28 @@ def decoder(addr, vipc_server, vst, nvidia, debug=False): | 
			
		
	
		
		
			
				
					
					|  |  |  |               % (len(msgs), evta.idx.encodeId, evt.logMonoTime/1e9, evta.idx.timestampEof/1e6, frame_latency, |  |  |  |               % (len(msgs), evta.idx.encodeId, evt.logMonoTime/1e9, evta.idx.timestampEof/1e6, frame_latency, | 
			
		
	
		
		
			
				
					
					|  |  |  |                  process_latency, network_latency, pc_latency, process_latency+network_latency+pc_latency ), len(evta.data), sock_name) |  |  |  |                  process_latency, network_latency, pc_latency, process_latency+network_latency+pc_latency ), len(evta.data), sock_name) | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | class CompressedVipc: |  |  |  | class CompressedVipc: | 
			
		
	
		
		
			
				
					
					|  |  |  |   def __init__(self, addr, vision_streams, nvidia=False, debug=False): |  |  |  |   def __init__(self, addr, vision_streams, nvidia=False, debug=False): | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     print("getting frame sizes") | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     os.environ["ZMQ"] = "1" | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     messaging.context = messaging.Context() | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     sm = messaging.SubMaster([ENCODE_SOCKETS[s] for s in vision_streams], addr=addr) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     while min(sm.rcv_frame.values()) == 0: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       sm.update(100) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     os.environ.pop("ZMQ") | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     messaging.context = messaging.Context() | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     self.vipc_server = VisionIpcServer("camerad") |  |  |  |     self.vipc_server = VisionIpcServer("camerad") | 
			
		
	
		
		
			
				
					
					|  |  |  |     for vst in vision_streams: |  |  |  |     for vst in vision_streams: | 
			
		
	
		
		
			
				
					
					|  |  |  |       self.vipc_server.create_buffers(vst, 4, False, W, H) |  |  |  |       ed = sm[ENCODE_SOCKETS[vst]] | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       self.vipc_server.create_buffers(vst, 4, False, ed.width, ed.height) | 
			
		
	
		
		
			
				
					
					|  |  |  |     self.vipc_server.start_listener() |  |  |  |     self.vipc_server.start_listener() | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     self.procs = [] |  |  |  |     self.procs = [] | 
			
		
	
		
		
			
				
					
					|  |  |  |     for vst in vision_streams: |  |  |  |     for vst in vision_streams: | 
			
		
	
		
		
			
				
					
					|  |  |  |       p = multiprocessing.Process(target=decoder, args=(addr, self.vipc_server, vst, nvidia, debug)) |  |  |  |       ed = sm[ENCODE_SOCKETS[vst]] | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       p = multiprocessing.Process(target=decoder, args=(addr, self.vipc_server, vst, nvidia, debug, ed.width, ed.height)) | 
			
		
	
		
		
			
				
					
					|  |  |  |       p.start() |  |  |  |       p.start() | 
			
		
	
		
		
			
				
					
					|  |  |  |       self.procs.append(p) |  |  |  |       self.procs.append(p) | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  |  | 
 |