0b4cd5d5
Hu Chunming
完成轨迹定时抓拍
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
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
107
108
109
110
111
112
113
114
115
116
117
118
119
|
#include "DvppDecoder.h"
void receiver_finish_cbk(const void* userPtr){
if(userPtr != nullptr){
DvppDecoder* self = (DvppDecoder*)userPtr;
self->taskFinishing();
}
}
DvppDecoder::DvppDecoder(){
m_pktQueueptr = new CircularQueue<AVPacket *>();
}
DvppDecoder::~DvppDecoder(){
delete m_pktQueueptr;
m_pktQueueptr = nullptr;
}
bool DvppDecoder::init(FFDecConfig cfg){
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){
return false;
}
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 {
return false;
}
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){
return false;
}
m_cfg = cfg;
decode_finished_cbk = cfg.decode_finished_cbk;
m_bFinished = false;
return true;
}
bool DvppDecoder::isSurport(FFDecConfig& cfg){
return true;
}
bool DvppDecoder::start(){
m_receiver.start();
m_decoder.start();
return true;
}
void DvppDecoder::close(){
m_receiver.close();
}
void DvppDecoder::setPostDecArg(const void* postDecArg){
m_decoder.setPostDecArg(postDecArg);
}
void DvppDecoder::setFinishedDecArg(const void* finishedDecArg){
m_finishedDecArg = finishedDecArg;
}
void DvppDecoder::pause(){
m_receiver.pause();
}
void DvppDecoder::resume(){
m_receiver.resume();
}
void DvppDecoder::setDecKeyframe(bool bKeyframe){
m_receiver.setDecKeyframe(bKeyframe);
}
bool DvppDecoder::isRunning(){
return m_receiver.isRunning();
}
bool DvppDecoder::isFinished(){
return m_bFinished;
}
bool DvppDecoder::isPausing(){
return m_receiver.isPausing();
}
bool DvppDecoder::getResolution(int &width, int &height){
return m_receiver.getResolution(width, height);
}
float DvppDecoder::fps(){
return m_receiver.fps();
}
|
0b4cd5d5
Hu Chunming
完成轨迹定时抓拍
|
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
|
}
int DvppDecoder::getCachedQueueLength(){
return 0;
}
void DvppDecoder::taskFinishing(){
// receiver 中读取线程结束时执行
m_decoder.close();
decode_finished_cbk(m_finishedDecArg);
m_bFinished = true;
LOG_INFO("[{}]- task finished.", m_dec_name);
}
|