#include "FFRecoder.h" #include "../../ai_platform/common_header.h" #include "depend_headers.h" #include #include #include #include #include #include using namespace std; typedef std::function mq_callback_t; class FFRecoderTaskManager { public: FFRecoderTaskManager(); virtual ~FFRecoderTaskManager(); void cache_pkt(AVPacket* pkt, long long frame_nb, string dec_name); bool init(int w, int h, int fps, int bit_rate); void create_recode_task(RecoderInfo& recoderInfo); void close(); void set_mq_callback(mq_callback_t cb); public: void recode_thread(); void pkt_cache_thread(); private: void save_intask_recoderinfo(RecoderInfo info); list::iterator getStartIterator(unsigned long long frame_nb); private: std::queue m_key_frame_interval; std::list m_keyframe_nb_list; std::list m_pkt_list_short; // 临时缓存 mutex m_pkt_list_short_mtx; std::list m_pkt_list; //主要缓存 mutex m_pkt_list_mtx; std::list m_recoderinfo_list; mutex m_recoderinfo_list_mtx; bool m_bExit{false}; bool m_bExitRecoderThread{false}; AVRational m_time_base; AVCodecContext* m_avctx; AVStream* m_inStream; thread* m_cache_thread{nullptr}; mq_callback_t mq_publish_func; // FFRecoder int m_width; int m_height; int m_fps; int m_bit_rate; };