You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							34 lines
						
					
					
						
							1.4 KiB
						
					
					
				
			
		
		
	
	
							34 lines
						
					
					
						
							1.4 KiB
						
					
					
				| #include "system/loggerd/encoder/encoder.h"
 | |
| 
 | |
| VideoEncoder::VideoEncoder(const EncoderInfo &encoder_info, int in_width, int in_height)
 | |
|     : encoder_info(encoder_info), in_width(in_width), in_height(in_height) {
 | |
|   pm.reset(new PubMaster({encoder_info.publish_name}));
 | |
| }
 | |
| 
 | |
| void VideoEncoder::publisher_publish(VideoEncoder *e, int segment_num, uint32_t idx, VisionIpcBufExtra &extra,
 | |
|                                      unsigned int flags, kj::ArrayPtr<capnp::byte> header, kj::ArrayPtr<capnp::byte> dat) {
 | |
|   // broadcast packet
 | |
|   MessageBuilder msg;
 | |
|   auto event = msg.initEvent(true);
 | |
|   auto edat = (event.*(e->encoder_info.init_encode_data_func))();
 | |
|   auto edata = edat.initIdx();
 | |
|   struct timespec ts;
 | |
|   timespec_get(&ts, TIME_UTC);
 | |
|   edat.setUnixTimestampNanos((uint64_t)ts.tv_sec*1000000000 + ts.tv_nsec);
 | |
|   edata.setFrameId(extra.frame_id);
 | |
|   edata.setTimestampSof(extra.timestamp_sof);
 | |
|   edata.setTimestampEof(extra.timestamp_eof);
 | |
|   edata.setType(e->encoder_info.encode_type);
 | |
|   edata.setEncodeId(e->cnt++);
 | |
|   edata.setSegmentNum(segment_num);
 | |
|   edata.setSegmentId(idx);
 | |
|   edata.setFlags(flags);
 | |
|   edata.setLen(dat.size());
 | |
|   edat.setData(dat);
 | |
|   if (flags & V4L2_BUF_FLAG_KEYFRAME) edat.setHeader(header);
 | |
| 
 | |
|   auto words = new kj::Array<capnp::word>(capnp::messageToFlatArray(msg));
 | |
|   auto bytes = words->asBytes();
 | |
|   e->pm->send(e->encoder_info.publish_name, bytes.begin(), bytes.size());
 | |
|   delete words;
 | |
| }
 | |
| 
 |