aac5773f
hucm
功能基本完成,接口待打磨
|
1
2
3
|
#include "FFNvDecoderManager.h"
#include <iostream>
|
e41a52bb
Hu Chunming
1.优化数据读取线程;2. 添加A...
|
4
5
6
7
8
9
|
#include "cuda_kernels.h"
#include "NvJpegEncoder.h"
unsigned char *pHwRgb = nullptr;
|
0b43216c
Hu Chunming
添加重要注释
|
10
11
12
|
/**
* 注意: gpuFrame 在解码器设置的显卡上,后续操作要十分注意这一点,尤其是多线程情况
* */
|
aac5773f
hucm
功能基本完成,接口待打磨
|
13
14
15
16
|
void postDecoded(const void * userPtr, AVFrame * gpuFrame){
FFNvDecoder* decoder = (FFNvDecoder*)userPtr;
if (decoder!= nullptr)
{
|
48330793
Hu Chunming
修正解码线程自然结束时解码器内存没...
|
17
18
19
|
cout << "decode name: " << decoder->getName() << endl;
// const char* gpu_pixfmt = av_get_pix_fmt_name((AVPixelFormat)gpuFrame->format);
// cout << "pixfmt: " << gpu_pixfmt << endl;
|
aac5773f
hucm
功能基本完成,接口待打磨
|
20
|
cout << "keyframe: " << gpuFrame->key_frame << " width: " << gpuFrame->width << " height: "<< gpuFrame->height << endl;
|
48330793
Hu Chunming
修正解码线程自然结束时解码器内存没...
|
21
|
// cout << "decode successed ✿✿ヽ(°▽°)ノ✿ " << endl;
|
e41a52bb
Hu Chunming
1.优化数据读取线程;2. 添加A...
|
22
23
|
if (gpuFrame->format == AV_PIX_FMT_CUDA)
|
7319ea36
Hu Chunming
多显卡设置
|
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
{
cout << "gpuid = " << atoi(decoder->m_cfg.gpuid.c_str()) << endl;
// cudaSetDevice(atoi(decoder->m_cfg.gpuid.c_str()));
// cudaError_t cudaStatus;
// if(pHwRgb == nullptr){
// cuda_common::setColorSpace2( ITU709, 0 );
// cudaStatus = cudaMalloc((void **)&pHwRgb, 3 * gpuFrame->width * gpuFrame->height * sizeof(unsigned char));
// }
// cudaStatus = cuda_common::CUDAToBGR((CUdeviceptr)gpuFrame->data[0],(CUdeviceptr)gpuFrame->data[1], gpuFrame->linesize[0], gpuFrame->linesize[1], pHwRgb, gpuFrame->width, gpuFrame->height);
// cudaDeviceSynchronize();
// if (cudaStatus != cudaSuccess) {
// cout << "CUDAToBGR failed !!!" << endl;
// return;
// }
// string path = "/home/cmhu/FFNvDecoder/" + decoder->m_cfg.gpuid + ".jpg";
// saveJpeg(path.c_str(), pHwRgb, gpuFrame->width, gpuFrame->height); // 验证 CUDAToRGB
|
e41a52bb
Hu Chunming
1.优化数据读取线程;2. 添加A...
|
41
|
}
|
aac5773f
hucm
功能基本完成,接口待打磨
|
42
43
44
|
}
}
|
48330793
Hu Chunming
修正解码线程自然结束时解码器内存没...
|
45
|
void createDecode(int index){
|
aac5773f
hucm
功能基本完成,接口待打磨
|
46
|
FFNvDecoderManager* pDecManager = FFNvDecoderManager::getInstance();
|
7319ea36
Hu Chunming
多显卡设置
|
47
|
MgrDecConfig config;
|
48330793
Hu Chunming
修正解码线程自然结束时解码器内存没...
|
48
49
|
config.name = "dec" + to_string(index);
config.cfg.uri = "rtsp://176.10.0.4:8554/stream";
|
7319ea36
Hu Chunming
多显卡设置
|
50
51
52
53
54
55
|
config.cfg.post_decoded_cbk = postDecoded;
config.cfg.force_tcp = true;
config.cfg.gpuid = "1";
FFNvDecoder* decoder = pDecManager->createDecoder(config);
if (!decoder)
{
|
48330793
Hu Chunming
修正解码线程自然结束时解码器内存没...
|
56
|
return ;
|
7319ea36
Hu Chunming
多显卡设置
|
57
58
59
|
}
pDecManager->setUserPtr(config.name, decoder);
pDecManager->startDecodeByName(config.name);
|
48330793
Hu Chunming
修正解码线程自然结束时解码器内存没...
|
60
61
62
63
64
|
}
int main(){
FFNvDecoderManager* pDecManager = FFNvDecoderManager::getInstance();
|
7319ea36
Hu Chunming
多显卡设置
|
65
|
|
48330793
Hu Chunming
修正解码线程自然结束时解码器内存没...
|
66
67
68
69
70
71
|
// for (size_t i = 0; i < 20; i++)
// {
// createDecode(i);
// }
MgrDecConfig config;
|
7319ea36
Hu Chunming
多显卡设置
|
72
|
config.name = "dec2";
|
48330793
Hu Chunming
修正解码线程自然结束时解码器内存没...
|
73
74
75
|
config.cfg.uri = "/home/cmhu/data/test.mp4";
config.cfg.post_decoded_cbk = postDecoded;
config.cfg.force_tcp = true;
|
7319ea36
Hu Chunming
多显卡设置
|
76
77
|
config.cfg.gpuid = "2";
FFNvDecoder* dec2 = pDecManager->createDecoder(config);
|
aac5773f
hucm
功能基本完成,接口待打磨
|
78
79
80
81
|
if (!dec2)
{
return 1;
}
|
7319ea36
Hu Chunming
多显卡设置
|
82
83
84
85
|
pDecManager->setUserPtr(config.name, dec2);
pDecManager->startDecodeByName(config.name);
|
48330793
Hu Chunming
修正解码线程自然结束时解码器内存没...
|
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
// config.name = "dec0";
// config.cfg.uri = "rtmp://192.168.10.56:1935/objecteye/1";
// config.cfg.gpuid = "0";
// FFNvDecoder* dec0 = pDecManager->createDecoder(config);
// if (!dec0)
// {
// return 1;
// }
// pDecManager->setUserPtr(config.name, dec0);
// pDecManager->startDecodeByName(config.name);
// config.name = "dec01";
// config.cfg.uri = "rtmp://192.168.10.56:1935/objecteye/1";
// config.cfg.gpuid = "0";
// FFNvDecoder* dec01 = pDecManager->createDecoder(config);
// if (!dec01)
// {
// return 1;
// }
// pDecManager->setUserPtr(config.name, dec01);
// pDecManager->startDecodeByName(config.name);
|
aac5773f
hucm
功能基本完成,接口待打磨
|
107
|
|
e41a52bb
Hu Chunming
1.优化数据读取线程;2. 添加A...
|
108
|
// while (getchar() != 'q');
|
aac5773f
hucm
功能基本完成,接口待打磨
|
109
|
|
e41a52bb
Hu Chunming
1.优化数据读取线程;2. 添加A...
|
110
111
112
|
// // pDecManager->closeDecoderByName("dec1");
// // pDecManager->pauseDecoder("dec1");
// pDecManager->pauseDecoder("dec2");
|
aac5773f
hucm
功能基本完成,接口待打磨
|
113
|
|
e41a52bb
Hu Chunming
1.优化数据读取线程;2. 添加A...
|
114
|
// while (getchar() != 'q');
|
aac5773f
hucm
功能基本完成,接口待打磨
|
115
|
|
e41a52bb
Hu Chunming
1.优化数据读取线程;2. 添加A...
|
116
117
|
// // pDecManager->resumeDecoder("dec1");
// pDecManager->resumeDecoder("dec2");
|
aac5773f
hucm
功能基本完成,接口待打磨
|
118
119
120
121
122
|
while (getchar() != 'q');
pDecManager->closeAllDecoder();
}
|