Blame view

src/decoder/dvpp/DvppDecoder.h 3.07 KB
09c2d08c   Hu Chunming   arm交付版
1
2
3
4
5
6
7
8
  #include<string>
  
  #include "depend_headers.h"
  #include "dvpp_headers.h"
  #include "DvppDataMemory.hpp"
  
  #include <queue>
  #include <mutex>
d51ea997   Zhao Shuaihua   升级玩手机、雨棚模型;模型批处理;...
9
10
  #include <thread>
  #include <chrono>
473215b4   Zhao Shuaihua   修复子sdk显存重复释放问题
11
  #include <atomic>
09c2d08c   Hu Chunming   arm交付版
12
  
746db74c   Hu Chunming   实现recode
13
  #include "FFRecoderTaskManager.h"
09c2d08c   Hu Chunming   arm交付版
14
  
d121e4ee   Zhao Shuaihua   道路分割区分农村路;优化逆行、占用...
15
16
  #include "VpcUtils.h"
  
09c2d08c   Hu Chunming   arm交付版
17
18
19
20
  using namespace std;
  
  typedef void(*RECEIVER_FINISHED_CALLBACK)(const void* userPtr);
  
d51ea997   Zhao Shuaihua   升级玩手机、雨棚模型;模型批处理;...
21
22
  
  struct Vdec_CallBack_UserData;
09c2d08c   Hu Chunming   arm交付版
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
  
  class DvppDecoder{
  public:
      DvppDecoder();
      ~DvppDecoder();
      bool init(FFDecConfig cfg);
      void close();
      bool start();
      void pause();
      void resume();
  
      void setDecKeyframe(bool bKeyframe);
  
      bool isRunning();
      bool isFinished();
      bool isPausing();
      bool getResolution( int &width, int &height );
d121e4ee   Zhao Shuaihua   道路分割区分农村路;优化逆行、占用...
40
      bool getOutResolution( int &width, int &height );
09c2d08c   Hu Chunming   arm交付版
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
  
      bool isSurport(FFDecConfig& cfg);
  
      float fps();
  
      void setName(string nm){
          m_dec_name = nm;
      }
  
      string getName(){
          return m_dec_name;
      }
  
      DeviceMemory* snapshot();
  
      void setPostDecArg(const void* postDecArg);
      void setFinishedDecArg(const void* finishedDecArg);
  
      int getCachedQueueLength();
  
746db74c   Hu Chunming   实现recode
61
62
      void doRecode(RecoderInfo& recoderInfo);
  
d9fc3e82   Hu Chunming   recode添加colse功能和mq功能
63
64
      void set_mq_callback(mq_callback_t cb);
  
09c2d08c   Hu Chunming   arm交付版
65
  public:
d51ea997   Zhao Shuaihua   升级玩手机、雨棚模型;模型批处理;...
66
      void doVdppVdecCallBack(acldvppStreamDesc *input, acldvppPicDesc *output, void *pUserData);
09c2d08c   Hu Chunming   arm交付版
67
68
69
70
71
72
73
74
      void doProcessReport();
  
  private:
      AVCodecContext* init_FFmpeg(FFDecConfig config);
      bool init_vdpp(FFDecConfig cfg, AVCodecContext* avctx);
      void release_ffmpeg();
      void read_thread();
      
d51ea997   Zhao Shuaihua   升级玩手机、雨棚模型;模型批处理;...
75
      int sendPkt(aclvdecChannelDesc *vdecChannelDesc, AVPacket* pkt, unsigned long long frame_nb);
09c2d08c   Hu Chunming   arm交付版
76
77
78
      bool sendVdecEos(aclvdecChannelDesc *vdecChannelDesc);
      void release_dvpp();
  
c5fce6ce   Zhao Shuaihua   增加二轮车玩手机505、加装雨棚5...
79
80
      void display_thread();
  
d51ea997   Zhao Shuaihua   升级玩手机、雨棚模型;模型批处理;...
81
82
      int getVdecType(int videoType, int profile);
  
d121e4ee   Zhao Shuaihua   道路分割区分农村路;优化逆行、占用...
83
84
      void calcOutResolution(int w, int h);
  
09c2d08c   Hu Chunming   arm交付版
85
86
87
88
  private:
      FFDecConfig m_cfg;
      string m_dec_name;
  
d51ea997   Zhao Shuaihua   升级玩手机、雨棚模型;模型批处理;...
89
      const void * m_finishedDecArg {nullptr};
09c2d08c   Hu Chunming   arm交付版
90
91
92
93
94
      DECODE_FINISHED_CALLBACK decode_finished_cbk {nullptr};
  
      bool m_bFinished{false};
      bool m_bRunning{false};
      bool m_bPause{false};
b17e0e69   Zhao Shuaihua   闯红灯增加场景自适应、轨迹约束;逆...
95
  
09c2d08c   Hu Chunming   arm交付版
96
      bool m_bExitReportThd{false};
b17e0e69   Zhao Shuaihua   闯红灯增加场景自适应、轨迹约束;逆...
97
      bool m_bExitDisplayThd{false};
09c2d08c   Hu Chunming   arm交付版
98
99
  
      // 读取数据
09c2d08c   Hu Chunming   arm交付版
100
101
102
103
104
105
106
107
      int video_index{-1};
      AVFormatContext *fmt_ctx{nullptr};
      AVPixelFormat pix_fmt;
      AVCodecContext *avctx{nullptr};
      AVBSFContext * h264bsfc{nullptr};
  
      int frame_width{0};
  	int frame_height{0};
d121e4ee   Zhao Shuaihua   道路分割区分农村路;优化逆行、占用...
108
109
      int out_frame_width{0};
  	int out_frame_height{0};
d51ea997   Zhao Shuaihua   升级玩手机、雨棚模型;模型批处理;...
110
      bool m_bReal {false}; // 是否实时流
09c2d08c   Hu Chunming   arm交付版
111
112
      float m_fps{0.0};
  
d51ea997   Zhao Shuaihua   升级玩手机、雨棚模型;模型批处理;...
113
      std::thread* m_read_thread{nullptr};
09c2d08c   Hu Chunming   arm交付版
114
  
d51ea997   Zhao Shuaihua   升级玩手机、雨棚模型;模型批处理;...
115
      bool m_dec_keyframe {false};
d121e4ee   Zhao Shuaihua   道路分割区分农村路;优化逆行、占用...
116
      bool m_bResize {false};
09c2d08c   Hu Chunming   arm交付版
117
118
119
120
121
  
      // 解码
      int m_dvpp_deviceId {-1};
      int m_dvpp_channel {-1};
      aclrtContext m_context{nullptr};
d51ea997   Zhao Shuaihua   升级玩手机、雨棚模型;模型批处理;...
122
      acldvppStreamFormat m_enType;
09c2d08c   Hu Chunming   arm交付版
123
  
d51ea997   Zhao Shuaihua   升级玩手机、雨棚模型;模型批处理;...
124
      const void * m_postDecArg {nullptr};
09c2d08c   Hu Chunming   arm交付版
125
126
127
128
      POST_DECODE_CALLBACK post_decoded_cbk {nullptr};
  
      int m_vdec_out_size {-1};
  
746db74c   Hu Chunming   实现recode
129
      FFRecoderTaskManager m_recoderManager;
c5fce6ce   Zhao Shuaihua   增加二轮车玩手机505、加装雨棚5...
130
131
132
133
134
  
      queue<DvppDataMemory*> m_decoded_data_queue;
      mutex m_decoded_data_queue_mtx;
  
      long long last_ts {0};
d51ea997   Zhao Shuaihua   升级玩手机、雨棚模型;模型批处理;...
135
136
137
138
  
      uint64_t m_in_count {0};
      uint64_t m_out_count {0};
  
473215b4   Zhao Shuaihua   修复子sdk显存重复释放问题
139
      std::atomic<int> m_DvppCacheCounter{0};
d121e4ee   Zhao Shuaihua   道路分割区分农村路;优化逆行、占用...
140
141
  
      VpcUtils m_vpcUtils;
09c2d08c   Hu Chunming   arm交付版
142
  };