DvppDecoder.h
2.21 KB
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
#include<string>
#include <pthread.h>
#include "dvpp_headers.h"
#include "depend_headers.h"
#include "user_mem.h"
#include "CircularQueue.hpp"
#include "VpcPicConverter.h"
#include <queue>
using namespace std;
#define TEST_DECODER
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 );
bool isSurport(FFDecConfig& cfg);
int getCachedQueueLength();
float fps();
DECODER_TYPE getDecoderType(){ return DECODER_TYPE_DVPP; }
void setName(string nm){
m_dec_name = nm;
}
string getName(){
return m_dec_name;
}
FFImgInfo* snapshot();
void setPostDecArg(const void* postDecArg);
void setFinishedDecArg(const void* finishedDecArg);
public:
void doProcessReport();
void doVdppVdecCallBack(acldvppStreamDesc *input, acldvppPicDesc *output, DvppDecoder *self);
private:
void decode_thread();
void post_decode_thread();
void releaseFFmpeg();
void releaseResource();
bool init_FFmpeg(const char* uri, bool force_tcp);
bool init_vdpp(int _deviceId);
bool sendVdecEos(aclvdecChannelDesc *vdecChannelDesc);
private:
AVStream* stream;
int stream_index;
AVFormatContext *fmt_ctx;
AVPixelFormat pix_fmt;
uint32_t m_vdec_out_size{0};
int frame_width{0};
int frame_height{0};
int m_dvpp_deviceId {-1};
int m_dvpp_channel {-1};
pthread_t m_decode_thread;
pthread_t m_post_decode_thread;
bool m_bRunning;
bool m_bFinished;
bool m_bPause;
bool m_bReal; // 是否实时流
float m_fps;
FFDecConfig m_cfg;
string m_dec_name;
bool m_dec_keyframe;
AVBSFContext * h264bsfc{nullptr};
aclrtContext m_context;
acldvppStreamFormat enType;
vector<void*> m_vec_vdec;
CircularQueue<void *> m_vdecQueue;
const void * m_postDecArg;
POST_DECODE_CALLBACK post_decoded_cbk;
const void * m_finishedDecArg;
DECODE_FINISHED_CALLBACK decode_finished_cbk;
VpcPicConverter picConverter;
};