#pragma once // has to be in this order #ifdef __linux__ #include "third_party/linux/include/v4l2-controls.h" #include #else #define V4L2_BUF_FLAG_KEYFRAME 8 #endif #include #include #include #include #include #include "cereal/messaging/messaging.h" #include "msgq/visionipc/visionipc.h" #include "common/queue.h" #include "system/loggerd/loggerd.h" class VideoEncoder { public: VideoEncoder(const EncoderInfo &encoder_info, int in_width, int in_height); virtual ~VideoEncoder() {} virtual int encode_frame(VisionBuf* buf, VisionIpcBufExtra *extra) = 0; virtual void encoder_open(const char* path) = 0; virtual void encoder_close() = 0; void publisher_publish(int segment_num, uint32_t idx, VisionIpcBufExtra &extra, unsigned int flags, kj::ArrayPtr header, kj::ArrayPtr dat); protected: int in_width, in_height; int out_width, out_height; const EncoderInfo encoder_info; private: // total frames encoded int cnt = 0; std::unique_ptr pm; std::vector msg_cache; };