Blame view

src/decoder/gb28181/DvppGB28181Decoder.h 2.46 KB
c8285c8d   Hu Chunming   GB28181 UDP 有重大进展...
1
2
3
  #ifndef _GB28181_DECODER_H_

  #define _GB28181_DECODER_H_

  

74d1e6a8   Hu Chunming   完成gb28181大体的代码,未完...
4
5
6
  #include <atomic>

  #include <mutex>

  

c8285c8d   Hu Chunming   GB28181 UDP 有重大进展...
7
  #include "RTPReceiver.h"

74d1e6a8   Hu Chunming   完成gb28181大体的代码,未完...
8
  #include "../dvpp/DvppStreamDecoder.h"

c8285c8d   Hu Chunming   GB28181 UDP 有重大进展...
9
10
11
12
  

  #include "common_header.h"

  #include "../interface/AbstractDecoder.h"

  

c8285c8d   Hu Chunming   GB28181 UDP 有重大进展...
13
14
15
16
17
18
  

  struct AVFormatContext;

  struct AVCodecContext;

  struct AVCodec;

  struct AVFrame;

  struct AVDictionary;

74d1e6a8   Hu Chunming   完成gb28181大体的代码,未完...
19
  struct AVPacket;

c8285c8d   Hu Chunming   GB28181 UDP 有重大进展...
20
21
22
  

  using namespace std;

  

74d1e6a8   Hu Chunming   完成gb28181大体的代码,未完...
23
  class DvppGB28181Decoder: public AbstractDecoder

c8285c8d   Hu Chunming   GB28181 UDP 有重大进展...
24
25
  {

  public:

74d1e6a8   Hu Chunming   完成gb28181大体的代码,未完...
26
27
  	DvppGB28181Decoder();

  	~DvppGB28181Decoder();

c8285c8d   Hu Chunming   GB28181 UDP 有重大进展...
28
29
30
31
32
33
34
35
36
37
38
39
40
  

      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 );

5b86d771   Hu Chunming   实现GB28181 UDP 基于d...
41
      bool getOutResolution( int &width, int &height );

c8285c8d   Hu Chunming   GB28181 UDP 有重大进展...
42
43
44
45
46
47
48
  

      bool isSurport(FFDecConfig& cfg);

  

      int getCachedQueueLength();

  

  	float fps();

  

5b86d771   Hu Chunming   实现GB28181 UDP 基于d...
49
50
51
      DECODER_TYPE getDecoderType(){ return DECODER_TYPE_DVPP_GB28181; }

  

      DeviceMemory* snapshot();

c8285c8d   Hu Chunming   GB28181 UDP 有重大进展...
52
  

c8285c8d   Hu Chunming   GB28181 UDP 有重大进展...
53
54
55
56
57
58
59
60
61
62
63
      void setName(string nm){

          m_dec_name = nm;

      }

  

      string getName(){

          return m_dec_name;

      }

  

      void setPostDecArg(const void* postDecArg);

      void setFinishedDecArg(const void* finishedDecArg);

  

5b86d771   Hu Chunming   实现GB28181 UDP 基于d...
64
65
66
67
      void doRecode(RecoderInfo& recoderInfo);

  

      void set_mq_callback(std::function<bool(const char *msg)> mq_publish);

  

c8285c8d   Hu Chunming   GB28181 UDP 有重大进展...
68
69
70
  public:

      void stream_callback(int videoType, char* data, int len, int isKey, uint64_t pts, uint64_t localPts);

  	void stream_end_callback();

74d1e6a8   Hu Chunming   完成gb28181大体的代码,未完...
71
      void display_thread();

c8285c8d   Hu Chunming   GB28181 UDP 有重大进展...
72
73
  

  private:

74d1e6a8   Hu Chunming   完成gb28181大体的代码,未完...
74
      int ff_decode(int videoType, AVPacket* pkt);

c8285c8d   Hu Chunming   GB28181 UDP 有重大进展...
75
76
      

  private:

74d1e6a8   Hu Chunming   完成gb28181大体的代码,未完...
77
      string m_dec_name;      // 必须为28181编码

c8285c8d   Hu Chunming   GB28181 UDP 有重大进展...
78
79
      FFDecConfig m_cfg;

  

74d1e6a8   Hu Chunming   完成gb28181大体的代码,未完...
80
  	RTPReceiver* m_rtpPtr {nullptr};

c8285c8d   Hu Chunming   GB28181 UDP 有重大进展...
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
  

      uint64_t  m_startPts {};

      uint64_t  m_lastPts {};   //上一次pts的值

  	uint64_t  m_curPts {};    //当前的pts	

  	uint64_t  m_diffPts {};

  

      uint32_t frameW {}, frameH {};

  	float m_fps {};

      int m_frameSkip {};

  	

      int log_count {};

      

      std::atomic_int m_status {};

  

      pthread_t m_post_decode_thread;

      const void * m_postDecArg;

      POST_DECODE_CALLBACK post_decoded_cbk;  // 解码数据回调接口

  

      const void * m_finishedDecArg;

      DECODE_FINISHED_CALLBACK decode_finished_cbk;

  

      queue<AVFrame*> mFrameQueue;

      mutex m_queue_mutex;

      mutex m_snapshot_mutex;

  

      bool m_dec_keyframe;

74d1e6a8   Hu Chunming   完成gb28181大体的代码,未完...
107
108
109
110
  

      DvppStreamDecoder streamDecoder;

  

      int m_gpuid {0};

c8285c8d   Hu Chunming   GB28181 UDP 有重大进展...
111
112
113
  };

  

  #endif // _GB28181_DECODER_H_