|  |  |  | #pragma once
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <cstdio>
 | 
					
						
							|  |  |  | #include <cstdlib>
 | 
					
						
							|  |  |  | #include <string>
 | 
					
						
							|  |  |  | #include <vector>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | extern "C" {
 | 
					
						
							|  |  |  | #include <libavcodec/avcodec.h>
 | 
					
						
							|  |  |  | #include <libavformat/avformat.h>
 | 
					
						
							|  |  |  | #include <libavutil/imgutils.h>
 | 
					
						
							|  |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "system/loggerd/encoder/encoder.h"
 | 
					
						
							|  |  |  | #include "system/loggerd/loggerd.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class FfmpegEncoder : public VideoEncoder {
 | 
					
						
							|  |  |  | public:
 | 
					
						
							|  |  |  |   FfmpegEncoder(const EncoderInfo &encoder_info, int in_width, int in_height);
 | 
					
						
							|  |  |  |   ~FfmpegEncoder();
 | 
					
						
							|  |  |  |   int encode_frame(VisionBuf* buf, VisionIpcBufExtra *extra);
 | 
					
						
							|  |  |  |   void encoder_open(const char* path);
 | 
					
						
							|  |  |  |   void encoder_close();
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | private:
 | 
					
						
							|  |  |  |   int segment_num = -1;
 | 
					
						
							|  |  |  |   int counter = 0;
 | 
					
						
							|  |  |  |   bool is_open = false;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   AVCodecContext *codec_ctx;
 | 
					
						
							|  |  |  |   AVFrame *frame = NULL;
 | 
					
						
							|  |  |  |   std::vector<uint8_t> convert_buf;
 | 
					
						
							|  |  |  |   std::vector<uint8_t> downscale_buf;
 | 
					
						
							|  |  |  | };
 |