Blame view

src/decoder/dvpp/FFRecoderTaskManager.h 1.72 KB
746db74c   Hu Chunming   实现recode
1
  #include "FFRecoder.h"
77e1339c   Hu Chunming   GB28181 补充定时抓拍接口,...
2
  #include "FFRecoder2.h"
746db74c   Hu Chunming   实现recode
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
  
  #include "../../ai_platform/common_header.h"
  #include "depend_headers.h"
  
  #include <list>
  #include <queue>
  #include <map>
  #include <string>
  #include <thread>
  #include <mutex>
  
  using namespace std;
  
  struct RecodeParam {
      AVRational time_base;
      RecoderInfo recoderInfo;
      AVCodecContext* avctx;
  };
  
d9fc3e82   Hu Chunming   recode添加colse功能和mq功能
22
23
  typedef std::function<bool(const char *msg)> mq_callback_t;
  
746db74c   Hu Chunming   实现recode
24
25
26
27
28
29
  class FFRecoderTaskManager {
  public:
      FFRecoderTaskManager();
  	virtual ~FFRecoderTaskManager();
  
      void cache_pkt(AVPacket* pkt, long long frame_nb);
746db74c   Hu Chunming   实现recode
30
  
bf661eb0   Hu Chunming   录像文件保存优化
31
      bool init(AVStream* stream, AVCodecContext* avctx);
77e1339c   Hu Chunming   GB28181 补充定时抓拍接口,...
32
      bool init2(int w, int h, int fps, int bit_rate);
40ac568f   Hu Chunming   修改AVPacket复制方式,避免...
33
      void create_recode_task(RecoderInfo& recoderInfo);
746db74c   Hu Chunming   实现recode
34
  
d9fc3e82   Hu Chunming   recode添加colse功能和mq功能
35
36
37
38
      void close();
  
      void set_mq_callback(mq_callback_t cb);
  
746db74c   Hu Chunming   实现recode
39
  public:
40ac568f   Hu Chunming   修改AVPacket复制方式,避免...
40
      void recode_thread();
77e1339c   Hu Chunming   GB28181 补充定时抓拍接口,...
41
      void recode_thread2();
58f76d3f   Hu Chunming   改用FFRecoder2
42
      void pkt_cache_thread();
746db74c   Hu Chunming   实现recode
43
44
  
  private:
746db74c   Hu Chunming   实现recode
45
      void save_intask_recoderinfo(RecoderInfo info);
40ac568f   Hu Chunming   修改AVPacket复制方式,避免...
46
      list<DataPacket*>::iterator getStartIterator(unsigned long long frame_nb);
746db74c   Hu Chunming   实现recode
47
48
49
50
      
  private:
      std::queue<int> m_key_frame_interval;
      std::list<unsigned long long> m_keyframe_nb_list;
58f76d3f   Hu Chunming   改用FFRecoder2
51
52
53
      std::list<DataPacket*> m_pkt_list_short;    // 临时缓存
      mutex m_pkt_list_short_mtx; 
      std::list<DataPacket*> m_pkt_list;      //主要缓存
746db74c   Hu Chunming   实现recode
54
      mutex m_pkt_list_mtx; 
746db74c   Hu Chunming   实现recode
55
56
57
58
59
  
      std::list<RecoderInfo> m_recoderinfo_list;
      mutex m_recoderinfo_list_mtx;
  
      bool m_bExit{false};
58f76d3f   Hu Chunming   改用FFRecoder2
60
      bool m_bExitRecoderThread{false};
746db74c   Hu Chunming   实现recode
61
  
746db74c   Hu Chunming   实现recode
62
63
      AVRational m_time_base;
      AVCodecContext* m_avctx;
bf661eb0   Hu Chunming   录像文件保存优化
64
      AVStream* m_inStream;
746db74c   Hu Chunming   实现recode
65
  
d9fc3e82   Hu Chunming   recode添加colse功能和mq功能
66
      thread* m_recoder_thread{nullptr};
58f76d3f   Hu Chunming   改用FFRecoder2
67
      thread* m_cache_thread{nullptr};
d9fc3e82   Hu Chunming   recode添加colse功能和mq功能
68
69
  
      mq_callback_t mq_publish_func;
77e1339c   Hu Chunming   GB28181 补充定时抓拍接口,...
70
71
72
73
74
75
  
      // FFRecoder2
      int m_width;
      int m_height;
      int m_fps;
      int m_bit_rate;
746db74c   Hu Chunming   实现recode
76
  };