Blame view

src/gb28181/FFGB28181Decoder.h 2.32 KB
3d2ab595   Hu Chunming   支持gb28181
1
2
3
4
5
  #ifndef _GB28181_DECODER_H_

  #define _GB28181_DECODER_H_

  

  #include "RTPReceiver.h"

  

00b0fbdb   Hu Chunming   编译nvdec
6
7
  #include "common_header.h"

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

3d2ab595   Hu Chunming   支持gb28181
8
9
  

  #include <atomic>

92989af0   ming   更新解码器
10
  #include <mutex>

3d2ab595   Hu Chunming   支持gb28181
11
12
13
14
15
16
17
  

  struct AVFormatContext;

  struct AVCodecContext;

  struct AVCodec;

  struct AVFrame;

  struct AVPacket;

  struct SwsContext;

00b0fbdb   Hu Chunming   编译nvdec
18
  struct AVDictionary;

3d2ab595   Hu Chunming   支持gb28181
19
  

92989af0   ming   更新解码器
20
  using namespace std;

3d2ab595   Hu Chunming   支持gb28181
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
  

  class FFGB28181Decoder: public AbstractDecoder

  {

  public:

  	FFGB28181Decoder();

  	~FFGB28181Decoder();

  

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

  

      bool isSurport(FFDecConfig& cfg);

  

      int getCachedQueueLength();

  

  	float fps();

  

      DECODER_TYPE getDecoderType(){ return DECODER_TYPE_GB28181; }

  

63e6f7bc   Hu Chunming   完成dvpp。但是nv和gb281...
49
50
      FFImgInfo* snapshot();

  

00b0fbdb   Hu Chunming   编译nvdec
51
52
53
54
55
56
57
58
59
60
61
      void setName(string nm){

          m_dec_name = nm;

      }

  

      string getName(){

          return m_dec_name;

      }

  

      void setPostDecArg(const void* postDecArg);

      void setFinishedDecArg(const void* finishedDecArg);

  

3d2ab595   Hu Chunming   支持gb28181
62
63
64
  public:

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

  	void stream_end_callback();

92989af0   ming   更新解码器
65
      void post_decode_thread();

3d2ab595   Hu Chunming   支持gb28181
66
67
  

  private:

00b0fbdb   Hu Chunming   编译nvdec
68
69
70
71
72
73
      DeviceRgbMemory* convert2bgr(AVFrame * gpuFrame);

      

  private:

      string m_dec_name;

      FFDecConfig m_cfg;

  

3d2ab595   Hu Chunming   支持gb28181
74
75
      AVCodecContext* m_pAVCodecCtx {};

      const AVCodec* m_pAVCodec {};

3d2ab595   Hu Chunming   支持gb28181
76
77
78
  

      int m_gpuid {-1};

  

372e629f   ming   gb28181支持TCP数据流
79
  	RTPReceiver* m_rtpPtr;

3d2ab595   Hu Chunming   支持gb28181
80
      int m_port;

3d2ab595   Hu Chunming   支持gb28181
81
82
83
84
85
86
87
88
89
90
91
92
93
  

      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 {};

92989af0   ming   更新解码器
94
95
96
97
  

      AVDictionary *gpu_options = nullptr;

  

      pthread_t m_post_decode_thread;

00b0fbdb   Hu Chunming   编译nvdec
98
99
100
101
102
      const void * m_postDecArg;

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

  

      const void * m_finishedDecArg;

      DECODE_FINISHED_CALLBACK decode_finished_cbk;

63e6f7bc   Hu Chunming   完成dvpp。但是nv和gb281...
103
104
105
106
  

      queue<AVFrame*> mFrameQueue;

      mutex m_queue_mutex;

      mutex m_snapshot_mutex;

00b0fbdb   Hu Chunming   编译nvdec
107
108
  

      bool m_dec_keyframe;

3d2ab595   Hu Chunming   支持gb28181
109
110
111
  };

  

  #endif // _GB28181_DECODER_H_