Blame view

src/decoder/dvpp/DvppDecoder.h 3 KB
0b4cd5d5   Hu Chunming   完成轨迹定时抓拍
1
2
3
  #include<string>
  
  #include "depend_headers.h"
fce4580d   Hu Chunming   更新最新代码:修改解码器实现方式并...
4
5
6
7
8
  #include "dvpp_headers.h"
  #include "DvppDataMemory.hpp"
  
  #include <queue>
  #include <mutex>
9fc79d43   Hu Chunming   同步代码初步跑通
9
10
11
  #include <thread>
  #include <chrono>
  #include <atomic>
fce4580d   Hu Chunming   更新最新代码:修改解码器实现方式并...
12
  
9fc79d43   Hu Chunming   同步代码初步跑通
13
  #include "VpcUtils.h"
0b4cd5d5   Hu Chunming   完成轨迹定时抓拍
14
15
16
  
  using namespace std;
  
fce4580d   Hu Chunming   更新最新代码:修改解码器实现方式并...
17
18
  typedef void(*RECEIVER_FINISHED_CALLBACK)(const void* userPtr);
  
9fc79d43   Hu Chunming   同步代码初步跑通
19
20
  
  struct Vdec_CallBack_UserData;
fce4580d   Hu Chunming   更新最新代码:修改解码器实现方式并...
21
  
0b4cd5d5   Hu Chunming   完成轨迹定时抓拍
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
  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 );
9fc79d43   Hu Chunming   同步代码初步跑通
38
      bool getOutResolution( int &width, int &height );
0b4cd5d5   Hu Chunming   完成轨迹定时抓拍
39
40
41
42
43
44
45
46
47
48
49
50
51
  
      bool isSurport(FFDecConfig& cfg);
  
      float fps();
  
      void setName(string nm){
          m_dec_name = nm;
      }
  
      string getName(){
          return m_dec_name;
      }
  
9b4d4adf   Hu Chunming   添加定时抓拍;
52
      DeviceMemory* snapshot();
0b4cd5d5   Hu Chunming   完成轨迹定时抓拍
53
54
55
56
57
58
59
  
      void setPostDecArg(const void* postDecArg);
      void setFinishedDecArg(const void* finishedDecArg);
  
      int getCachedQueueLength();
  
  public:
9fc79d43   Hu Chunming   同步代码初步跑通
60
      void doVdppVdecCallBack(acldvppStreamDesc *input, acldvppPicDesc *output, void *pUserData);
fce4580d   Hu Chunming   更新最新代码:修改解码器实现方式并...
61
      void doProcessReport();
9fc79d43   Hu Chunming   同步代码初步跑通
62
      long long get_last_read_ts();
fce4580d   Hu Chunming   更新最新代码:修改解码器实现方式并...
63
64
65
  
  private:
      AVCodecContext* init_FFmpeg(FFDecConfig config);
9fc79d43   Hu Chunming   同步代码初步跑通
66
      bool init_dvpp(FFDecConfig cfg);
fce4580d   Hu Chunming   更新最新代码:修改解码器实现方式并...
67
68
69
      void release_ffmpeg();
      void read_thread();
      
9fc79d43   Hu Chunming   同步代码初步跑通
70
      int sendPkt(aclvdecChannelDesc *vdecChannelDesc, AVPacket* pkt, unsigned long long frame_nb);
fce4580d   Hu Chunming   更新最新代码:修改解码器实现方式并...
71
72
      bool sendVdecEos(aclvdecChannelDesc *vdecChannelDesc);
      void release_dvpp();
0b4cd5d5   Hu Chunming   完成轨迹定时抓拍
73
  
9fc79d43   Hu Chunming   同步代码初步跑通
74
75
76
77
78
79
      void display_thread();
  
      int getVdecType(int videoType, int profile);
  
      void calcOutResolution(int w, int h);
  
0b4cd5d5   Hu Chunming   完成轨迹定时抓拍
80
81
82
83
  private:
      FFDecConfig m_cfg;
      string m_dec_name;
  
9fc79d43   Hu Chunming   同步代码初步跑通
84
85
      const void * m_finishedDecArg {nullptr};
      DECODE_FINISHED_CALLBACK decode_finished_cbk {nullptr};
0b4cd5d5   Hu Chunming   完成轨迹定时抓拍
86
87
  
      bool m_bFinished{false};
fce4580d   Hu Chunming   更新最新代码:修改解码器实现方式并...
88
89
      bool m_bRunning{false};
      bool m_bPause{false};
9fc79d43   Hu Chunming   同步代码初步跑通
90
  
fce4580d   Hu Chunming   更新最新代码:修改解码器实现方式并...
91
      bool m_bExitReportThd{false};
9fc79d43   Hu Chunming   同步代码初步跑通
92
      bool m_bExitDisplayThd{false};
fce4580d   Hu Chunming   更新最新代码:修改解码器实现方式并...
93
94
  
      // 读取数据
fce4580d   Hu Chunming   更新最新代码:修改解码器实现方式并...
95
96
97
98
99
100
101
102
      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};
9fc79d43   Hu Chunming   同步代码初步跑通
103
104
105
      int out_frame_width{0};
  	int out_frame_height{0};
      bool m_bReal {false}; // 是否实时流
fce4580d   Hu Chunming   更新最新代码:修改解码器实现方式并...
106
107
      float m_fps{0.0};
  
9fc79d43   Hu Chunming   同步代码初步跑通
108
      std::thread* m_read_thread{nullptr};
fce4580d   Hu Chunming   更新最新代码:修改解码器实现方式并...
109
  
9fc79d43   Hu Chunming   同步代码初步跑通
110
111
      bool m_dec_keyframe {false};
      bool m_bResize {false};
fce4580d   Hu Chunming   更新最新代码:修改解码器实现方式并...
112
113
114
115
116
  
      // 解码
      int m_dvpp_deviceId {-1};
      int m_dvpp_channel {-1};
      aclrtContext m_context{nullptr};
9fc79d43   Hu Chunming   同步代码初步跑通
117
      acldvppStreamFormat m_enType;
fce4580d   Hu Chunming   更新最新代码:修改解码器实现方式并...
118
  
9fc79d43   Hu Chunming   同步代码初步跑通
119
120
      const void * m_postDecArg {nullptr};
      POST_DECODE_CALLBACK post_decoded_cbk {nullptr};
fce4580d   Hu Chunming   更新最新代码:修改解码器实现方式并...
121
122
  
      int m_vdec_out_size {-1};
0b4cd5d5   Hu Chunming   完成轨迹定时抓拍
123
  
9fc79d43   Hu Chunming   同步代码初步跑通
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
      queue<DvppDataMemory*> m_decoded_data_queue;
      mutex m_decoded_data_queue_mtx;
  
      long long last_ts {0};
  
      long long m_last_read_ts {0};
  
      uint64_t m_in_count {0};
      uint64_t m_out_count {0};
  
      int m_frameSkip {1};
  
      std::atomic<int> m_DvppCacheCounter{0};
      int m_cache_gop{0};
  
      VpcUtils m_vpcUtils;
0b4cd5d5   Hu Chunming   完成轨迹定时抓拍
140
  };