Blame view

src/decoder/dvpp/FFRecoderTask.h 1.63 KB
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
1
2
  #include "FFRecoder.h"
  
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
3
4
5
6
7
8
9
10
11
12
13
  #include "depend_headers.h"
  
  #include <list>
  #include <queue>
  #include <map>
  #include <string>
  #include <thread>
  #include <mutex>
  
  using namespace std;
  
4061a3c3   Hu Chunming   更换decoder
14
15
16
17
18
  struct RecodeParam {
      AVRational time_base;
      RecoderInfo recoderInfo;
      AVCodecContext* avctx;
  };
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
19
20
21
  
  typedef std::function<bool(const char *msg)> mq_callback_t;
  
4061a3c3   Hu Chunming   更换decoder
22
  class FFRecoderTask {
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
23
  public:
4061a3c3   Hu Chunming   更换decoder
24
25
      FFRecoderTask();
  	virtual ~FFRecoderTask();
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
26
  
4061a3c3   Hu Chunming   更换decoder
27
      void cache_pkt(AVPacket* pkt, long long frame_nb);
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
28
  
4061a3c3   Hu Chunming   更换decoder
29
      bool init(int w, int h, int fps, int bit_rate, string dec_name);
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
30
31
32
33
34
35
36
37
38
      void create_recode_task(RecoderInfo& recoderInfo);
  
      void close();
  
      void set_mq_callback(mq_callback_t cb);
  
  public:
      void recode_thread();
      void pkt_cache_thread();
4061a3c3   Hu Chunming   更换decoder
39
      std::string GetName(){return m_dec_name;}
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
40
41
42
43
44
45
  
  private:
      void save_intask_recoderinfo(RecoderInfo info);
      list<DataPacket*>::iterator getStartIterator(unsigned long long frame_nb);
      
  private:
4061a3c3   Hu Chunming   更换decoder
46
      std::string m_dec_name;
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
      std::queue<int> m_key_frame_interval;
      std::list<unsigned long long> m_keyframe_nb_list;
      std::list<DataPacket*> m_pkt_list_short;    // 临时缓存
      mutex m_pkt_list_short_mtx; 
      std::list<DataPacket*> m_pkt_list;      //主要缓存
      mutex m_pkt_list_mtx; 
  
      std::list<RecoderInfo> 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;
  
4061a3c3   Hu Chunming   更换decoder
64
      thread* m_recoder_thread{nullptr};
6fdcb6a5   Hu Chunming   初次提交,代码大体完成编写,完善中
65
66
67
68
69
70
71
72
73
74
      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;
  };