compressed_vipc supports all frame sizes

pull/31299/head
Adeeb Shihadeh 1 year ago
parent 3972073fd4
commit 43f151eea9
  1. 20
      tools/camerastream/compressed_vipc.py

@ -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)

Loading…
Cancel
Save