def restore_record(input_record, output_record): """Entrance of processing.""" # Define working dirs that store intermediate results in the middle of processing work_dir = 'restore_video_work_dir_{}'.format( datetime.datetime.fromtimestamp( time.time()).strftime('%Y-%m-%d-%H-%M-%S')) # Decode videos converters = {} for topic in VIDEO_CHANNELS: converters[topic] = VideoConverter(work_dir, topic) reader = RecordReader(input_record) for message in reader.read_messages(): if message.topic in VIDEO_CHANNELS: converters[message.topic].write_frame(message) image_dir = os.path.join(work_dir, 'images') makedirs(image_dir) for topic in VIDEO_CHANNELS: converters[topic].close_writer() converters[topic].decode() converters[topic].move_images(image_dir) # Restore target record file writer = RecordWriter(0, 0) writer.open(output_record) topic_descs = {} counter = 0 reader = RecordReader(input_record) for message in reader.read_messages(): message_content = message.message message_topic = message.topic if message.topic in VIDEO_CHANNELS: message_content = retrieve_image(image_dir, message) message_topic = VIDEO_IMAGE_MAP[message.topic] if not message_content: continue counter += 1 if counter % 1000 == 0: logging.info('rewriting {} th message to record {}'.format( counter, output_record)) writer.write_message(message_topic, message_content, message.timestamp) if message_topic not in topic_descs: topic_descs[message_topic] = reader.get_protodesc(message_topic) writer.write_channel(message_topic, message.data_type, topic_descs[message_topic]) writer.close() logging.info('All Done, converted record: {}'.format(output_record))
def process_record(cls, input_record, output_record): print("filtering: {} -> {}".format(input_record, output_record)) output_dir = os.path.dirname(output_record) if output_dir != "" and not os.path.exists(output_dir): os.makedirs(output_dir) freader = RecordReader(input_record) fwriter = RecordWriter() if not fwriter.open(output_record): print('writer open failed!') return print('----- Begin to process record -----') for channelname, msg, datatype, timestamp in freader.read_messages(): if channelname in SamplePNC.TOPICS: desc = freader.get_protodesc(channelname) fwriter.write_channel(channelname, datatype, desc) fwriter.write_message(channelname, msg, timestamp) print('----- Finish processing record -----')
def process_record(cls, input_record, output_record): print("filtering: {} -> {}".format(input_record, output_record)) output_dir = os.path.dirname(output_record) if output_dir != "" and not os.path.exists(output_dir): os.makedirs(output_dir) freader = RecordReader(input_record) fwriter = RecordWriter() if not fwriter.open(output_record): print "writer open failed!" return print "+++ begin to process..." for channelname, msg, datatype, timestamp in freader.read_messages(): if channelname in SamplePNC.TOPICS: desc = freader.get_protodesc(channelname) fwriter.write_channel(channelname, datatype, desc) fwriter.write_message(channelname, msg, timestamp) print "+++ Finished processing..."