def _process_commands(self, cmd, route, pub_types): seek_to = None if route is None or (isinstance(cmd, SetRoute) and route.name != cmd.name): seek_to = cmd.start_time route = Route(cmd.name, cmd.data_dir) self._lr = MultiLogIterator(route.log_paths(), wraparound=True) if self._frame_reader is not None: self._frame_reader.close() if "frame" in pub_types or "encodeIdx" in pub_types: # reset frames for a route self._frame_id_lookup = {} self._frame_reader = RouteFrameReader( route.camera_paths(), None, self._frame_id_lookup, readahead=True) # always reset this on a seek if isinstance(cmd, SeekRelativeTime): seek_to = self._lr.tell() + cmd.secs elif isinstance(cmd, SeekAbsoluteTime): seek_to = cmd.secs elif isinstance(cmd, StopAndQuit): exit() if seek_to is not None: print("seeking", seek_to) if not self._lr.seek(seek_to): print("Can't seek: time out of bounds") else: next(self._lr) # ignore one return route
from common.column_store import save_dict_as_column_store from xx.pipeline.lib.log_time_series import append_dict from selfdrive.test.process_replay.compare_logs import save_log if __name__ == "__main__": parser = argparse.ArgumentParser(description="Run visiond on segment") parser.add_argument("segment_name", help="The segment to run") parser.add_argument("output_path", help="The output file") args = parser.parse_args() segment = RouteSegment.from_canonical_name(args.segment_name) route = Route(segment._name._route_name) frame_id_lookup = {} frame_reader = RouteFrameReader(route.camera_paths(), None, frame_id_lookup, readahead=True) msgs = list(LogReader(segment.log_path)) pm = PubMaster(['liveCalibration', 'frame']) model_sock = sub_sock('model') # Read encodeIdx for msg in msgs: if msg.which() == 'encodeIdx': frame_id_lookup[msg.encodeIdx.frameId] = (msg.encodeIdx.segmentNum, msg.encodeIdx.segmentId) # Send some livecalibration messages to initalize visiond for msg in msgs: