| 
						
						
							
								
							
						
						
					 | 
					 | 
					@ -15,9 +15,9 @@ | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					class VideoEncoder { | 
					 | 
					 | 
					 | 
					class VideoEncoder { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					public: | 
					 | 
					 | 
					 | 
					public: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  VideoEncoder(const char* filename, CameraType type, int in_width, int in_height, int fps, | 
					 | 
					 | 
					 | 
					  VideoEncoder(const char* filename, CameraType type, int in_width, int in_height, int fps, | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					              int bitrate, cereal::EncodeIndex::Type codec, int out_width, int out_height, bool write) | 
					 | 
					 | 
					 | 
					              int bitrate, cereal::EncodeIndex::Type codec, int out_width, int out_height) | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  : filename(filename), type(type), in_width(in_width), in_height(in_height), fps(fps), | 
					 | 
					 | 
					 | 
					  : filename(filename), type(type), in_width(in_width), in_height(in_height), fps(fps), | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    bitrate(bitrate), codec(codec), out_width(out_width), out_height(out_height), write(write) { } | 
					 | 
					 | 
					 | 
					    bitrate(bitrate), codec(codec), out_width(out_width), out_height(out_height) { } | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  virtual ~VideoEncoder(); | 
					 | 
					 | 
					 | 
					  virtual ~VideoEncoder(); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  virtual int encode_frame(VisionBuf* buf, VisionIpcBufExtra *extra) = 0; | 
					 | 
					 | 
					 | 
					  virtual int encode_frame(VisionBuf* buf, VisionIpcBufExtra *extra) = 0; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  virtual void encoder_open(const char* path) = 0; | 
					 | 
					 | 
					 | 
					  virtual void encoder_open(const char* path) = 0; | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -26,20 +26,8 @@ public: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  void publisher_init(); | 
					 | 
					 | 
					 | 
					  void publisher_init(); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  static void 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); | 
					 | 
					 | 
					 | 
					  static void 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); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  void writer_open(const char* path) { | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if (this->write) write_handler_thread = std::thread(VideoEncoder::write_handler, this, path); | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  } | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  void writer_close() { | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if (this->write) { | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      to_write.push(NULL); | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      write_handler_thread.join(); | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    } | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    assert(to_write.empty()); | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  } | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					protected: | 
					 | 
					 | 
					 | 
					protected: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  bool write; | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  const char* filename; | 
					 | 
					 | 
					 | 
					  const char* filename; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  int in_width, in_height; | 
					 | 
					 | 
					 | 
					  int in_width, in_height; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  int out_width, out_height, fps; | 
					 | 
					 | 
					 | 
					  int out_width, out_height, fps; | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -54,9 +42,4 @@ private: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  // publishing
 | 
					 | 
					 | 
					 | 
					  // publishing
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  std::unique_ptr<PubMaster> pm; | 
					 | 
					 | 
					 | 
					  std::unique_ptr<PubMaster> pm; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  const char *service_name; | 
					 | 
					 | 
					 | 
					  const char *service_name; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  // writing support
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  static void write_handler(VideoEncoder *e, const char *path); | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  std::thread write_handler_thread; | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  SafeQueue<kj::Array<capnp::word>* > to_write; | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					}; | 
					 | 
					 | 
					 | 
					}; | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
					 | 
					 | 
					
  |