Blame view

src/dvpp/DvppDecoder.cpp 2.94 KB
63e6f7bc   Hu Chunming   完成dvpp。但是nv和gb281...
1
  #include "DvppDecoder.h"
63e6f7bc   Hu Chunming   完成dvpp。但是nv和gb281...
2
  
d248da62   Hu Chunming   优化代码,修正dvpp的一些bug
3
4
5
6
  void receiver_finish_cbk(const void* userPtr){
      if(userPtr != nullptr){
          DvppDecoder* self = (DvppDecoder*)userPtr;
          self->taskFinishing();
63e6f7bc   Hu Chunming   完成dvpp。但是nv和gb281...
7
      }
63e6f7bc   Hu Chunming   完成dvpp。但是nv和gb281...
8
9
  }
  
d248da62   Hu Chunming   优化代码,修正dvpp的一些bug
10
11
  DvppDecoder::DvppDecoder(){
      m_pktQueueptr = new CircularQueue<AVPacket *>();
63e6f7bc   Hu Chunming   完成dvpp。但是nv和gb281...
12
13
  }
  
d248da62   Hu Chunming   优化代码,修正dvpp的一些bug
14
15
16
  DvppDecoder::~DvppDecoder(){
      delete m_pktQueueptr;
      m_pktQueueptr = nullptr;
63e6f7bc   Hu Chunming   完成dvpp。但是nv和gb281...
17
18
  }
  
d248da62   Hu Chunming   优化代码,修正dvpp的一些bug
19
  bool DvppDecoder::init(FFDecConfig cfg){
63e6f7bc   Hu Chunming   完成dvpp。但是nv和gb281...
20
  
d248da62   Hu Chunming   优化代码,修正dvpp的一些bug
21
22
23
24
25
26
27
28
29
30
      m_dec_name = cfg.dec_name;
      
      ReceiverConfig receiver_config;
      receiver_config.uri = cfg.uri.c_str();
      receiver_config.dec_name = cfg.dec_name;
      receiver_config.force_tcp = cfg.force_tcp;
      receiver_config.pktQueueptr = m_pktQueueptr;
      receiver_config.receiver_finished_cbk = receiver_finish_cbk;
      AVCodecContext* avctx = m_receiver.init_FFmpeg(receiver_config);
      if(avctx == nullptr){
63e6f7bc   Hu Chunming   完成dvpp。但是nv和gb281...
31
32
          return false;
      }
d248da62   Hu Chunming   优化代码,修正dvpp的一些bug
33
34
35
36
37
38
39
40
      m_receiver.setFinishCbkArg(this);
  
      DvppDecConfig dec_cfg;
      if(avctx->codec_id == AV_CODEC_ID_H264){
          dec_cfg.codec_id = 0;
      }else if(avctx->codec_id == AV_CODEC_ID_HEVC){
          dec_cfg.codec_id = 1;
      }else {
63e6f7bc   Hu Chunming   完成dvpp。但是nv和gb281...
41
42
          return false;
      }
d248da62   Hu Chunming   优化代码,修正dvpp的一些bug
43
44
45
46
47
48
49
50
51
52
53
      dec_cfg.dec_name = cfg.dec_name;
      dec_cfg.post_decoded_cbk = cfg.post_decoded_cbk;
      dec_cfg.dev_id = cfg.gpuid;
      dec_cfg.force_tcp = cfg.force_tcp;
      dec_cfg.skip_frame = cfg.skip_frame;
      dec_cfg.profile = avctx->profile;
      dec_cfg.pktQueueptr = m_pktQueueptr;
      dec_cfg.width = avctx->width;
      dec_cfg.height = avctx->height;
      bool bRet = m_decoder.init_vdpp(dec_cfg);
      if(!bRet){
63e6f7bc   Hu Chunming   完成dvpp。但是nv和gb281...
54
55
          return false;
      }
63e6f7bc   Hu Chunming   完成dvpp。但是nv和gb281...
56
  
d248da62   Hu Chunming   优化代码,修正dvpp的一些bug
57
      m_cfg = cfg;
63e6f7bc   Hu Chunming   完成dvpp。但是nv和gb281...
58
  
d248da62   Hu Chunming   优化代码,修正dvpp的一些bug
59
      decode_finished_cbk = cfg.decode_finished_cbk;
63e6f7bc   Hu Chunming   完成dvpp。但是nv和gb281...
60
  
d248da62   Hu Chunming   优化代码,修正dvpp的一些bug
61
      m_bFinished = false;
63e6f7bc   Hu Chunming   完成dvpp。但是nv和gb281...
62
  
d248da62   Hu Chunming   优化代码,修正dvpp的一些bug
63
      return true;
63e6f7bc   Hu Chunming   完成dvpp。但是nv和gb281...
64
65
  }
  
d248da62   Hu Chunming   优化代码,修正dvpp的一些bug
66
67
68
  bool DvppDecoder::isSurport(FFDecConfig& cfg){
      return true;
  }
63e6f7bc   Hu Chunming   完成dvpp。但是nv和gb281...
69
  
d248da62   Hu Chunming   优化代码,修正dvpp的一些bug
70
71
72
73
  bool DvppDecoder::start(){
      m_receiver.start();
      m_decoder.start();
      return true;
63e6f7bc   Hu Chunming   完成dvpp。但是nv和gb281...
74
75
  }
  
d248da62   Hu Chunming   优化代码,修正dvpp的一些bug
76
77
  void DvppDecoder::close(){
      m_receiver.close();
63e6f7bc   Hu Chunming   完成dvpp。但是nv和gb281...
78
79
  }
  
d248da62   Hu Chunming   优化代码,修正dvpp的一些bug
80
81
  void DvppDecoder::setPostDecArg(const void* postDecArg){
      m_decoder.setPostDecArg(postDecArg);
63e6f7bc   Hu Chunming   完成dvpp。但是nv和gb281...
82
83
  }
  
d248da62   Hu Chunming   优化代码,修正dvpp的一些bug
84
85
  void DvppDecoder::setFinishedDecArg(const void* finishedDecArg){
      m_finishedDecArg = finishedDecArg;
63e6f7bc   Hu Chunming   完成dvpp。但是nv和gb281...
86
87
88
  }
  
  void DvppDecoder::pause(){
d248da62   Hu Chunming   优化代码,修正dvpp的一些bug
89
      m_receiver.pause();
63e6f7bc   Hu Chunming   完成dvpp。但是nv和gb281...
90
91
92
  }
  
  void DvppDecoder::resume(){
d248da62   Hu Chunming   优化代码,修正dvpp的一些bug
93
      m_receiver.resume();
63e6f7bc   Hu Chunming   完成dvpp。但是nv和gb281...
94
95
  }
  
d248da62   Hu Chunming   优化代码,修正dvpp的一些bug
96
97
  void DvppDecoder::setDecKeyframe(bool bKeyframe){
      m_receiver.setDecKeyframe(bKeyframe);
63e6f7bc   Hu Chunming   完成dvpp。但是nv和gb281...
98
99
100
  }
  
  bool DvppDecoder::isRunning(){
d248da62   Hu Chunming   优化代码,修正dvpp的一些bug
101
      return m_receiver.isRunning();
63e6f7bc   Hu Chunming   完成dvpp。但是nv和gb281...
102
103
104
  }
  
  bool DvppDecoder::isFinished(){
d248da62   Hu Chunming   优化代码,修正dvpp的一些bug
105
      return m_bFinished;
63e6f7bc   Hu Chunming   完成dvpp。但是nv和gb281...
106
107
108
  }
  
  bool DvppDecoder::isPausing(){
d248da62   Hu Chunming   优化代码,修正dvpp的一些bug
109
      return m_receiver.isPausing();
63e6f7bc   Hu Chunming   完成dvpp。但是nv和gb281...
110
111
  }
  
d248da62   Hu Chunming   优化代码,修正dvpp的一些bug
112
113
114
115
116
117
  bool DvppDecoder::getResolution(int &width, int &height){
      return m_receiver.getResolution(width, height);
  }
  
  float DvppDecoder::fps(){
      return m_receiver.fps();
63e6f7bc   Hu Chunming   完成dvpp。但是nv和gb281...
118
119
120
121
122
123
124
  }
  
  FFImgInfo* DvppDecoder::snapshot(){
  	// TODO
  	return nullptr;
  }
  
d248da62   Hu Chunming   优化代码,修正dvpp的一些bug
125
126
  int DvppDecoder::getCachedQueueLength(){
      return 0;
63e6f7bc   Hu Chunming   完成dvpp。但是nv和gb281...
127
128
  }
  
d248da62   Hu Chunming   优化代码,修正dvpp的一些bug
129
130
131
132
133
134
135
136
  void DvppDecoder::taskFinishing(){
      // receiver 中读取线程结束时执行
      m_decoder.close();
      decode_finished_cbk(m_finishedDecArg);
  
      m_bFinished = true;
  
      LOG_INFO("[{}]- task finished.", m_dec_name);
63e6f7bc   Hu Chunming   完成dvpp。但是nv和gb281...
137
  }