#include "FFRecoder.h" #include "../../ai_platform/common_header.h" #include "depend_headers.h" #include #include #include #include #include #include using namespace std; struct RecodeParam { AVRational time_base; RecoderInfo recoderInfo; AVCodecContext* avctx; }; typedef std::function mq_callback_t; class FFRecoderTaskManager { public: FFRecoderTaskManager(); virtual ~FFRecoderTaskManager(); void cache_pkt(AVPacket* pkt, long long frame_nb); void create_recode_task(AVRational time_base, AVCodecContext* avctx, RecoderInfo& recoderInfo); bool init(AVRational time_base, AVCodecContext* avctx); void create_recode_task2(RecoderInfo& recoderInfo); void close(); void set_mq_callback(mq_callback_t cb); public: void recode_thread(RecodeParam param); list::iterator getStartIterator(unsigned long long frame_nb); void recode_thread2(); private: void save_intask_frame_nb(unsigned long long frame_nb); void save_intask_recoderinfo(RecoderInfo info); private: std::queue m_key_frame_interval; std::list m_keyframe_nb_list; std::list m_pkt_list; mutex m_pkt_list_mtx; unsigned long long m_last_key_frame_nb; std::list m_intask_frame_nb_list; std::list m_recoderinfo_list; mutex m_recoderinfo_list_mtx; bool m_bExit{false}; map m_id_recoderTask; mutex m_task_creat_mtx; AVRational m_time_base; AVCodecContext* m_avctx; thread* m_recoder_thread{nullptr}; mq_callback_t mq_publish_func; };