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;
|
aac5773f
hucm
功能基本完成,接口待打磨
|
10
11
12
13
14
15
16
17
18
19
|
void postDecoded(const void * userPtr, AVFrame * gpuFrame){
FFNvDecoder* decoder = (FFNvDecoder*)userPtr;
if (decoder!= nullptr)
{
cout << decoder->getName() << endl;
const char* gpu_pixfmt = av_get_pix_fmt_name((AVPixelFormat)gpuFrame->format);
cout << "pixfmt: " << gpu_pixfmt << endl;
cout << "keyframe: " << gpuFrame->key_frame << " width: " << gpuFrame->width << " height: "<< gpuFrame->height << endl;
cout << "decode successed ✿✿ヽ(°▽°)ノ✿ " << endl;
|
e41a52bb
Hu Chunming
1.优化数据读取线程;2. 添加A...
|
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
if (gpuFrame->format == AV_PIX_FMT_CUDA)
{
cudaError_t cudaStatus;
if(pHwRgb == nullptr){
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;
}
saveJpeg("/home/cmhu/FFNvDecoder/a.jpg", pHwRgb, gpuFrame->width, gpuFrame->height); // 验证 CUDAToRGB
}
|
aac5773f
hucm
功能基本完成,接口待打磨
|
35
36
37
38
|
}
}
int main(){
|
e41a52bb
Hu Chunming
1.优化数据读取线程;2. 添加A...
|
39
40
41
|
cuda_common::setColorSpace2( ITU709, 0 );
|
aac5773f
hucm
功能基本完成,接口待打磨
|
42
|
FFNvDecoderManager* pDecManager = FFNvDecoderManager::getInstance();
|
f49bbf3d
Hu Chunming
修正pause逻辑;添加ignore
|
43
44
45
46
47
48
49
50
51
|
// FFNvDecoder* decoder = pDecManager->createDecoder("rtmp://192.168.10.56:1935/objecteye/1",postDecoded,"dec1");
// if (!decoder)
// {
// return 1;
// }
// pDecManager->setUserPtr("dec1", decoder);
// pDecManager->startDecodeByName("dec1");
FFNvDecoder* dec2 = pDecManager->createDecoder("/home/cmhu/data/duan1.avi",postDecoded,"dec2");
|
aac5773f
hucm
功能基本完成,接口待打磨
|
52
53
54
55
56
57
58
|
if (!dec2)
{
return 1;
}
pDecManager->setUserPtr("dec2", dec2);
pDecManager->startDecodeByName("dec2");
|
e41a52bb
Hu Chunming
1.优化数据读取线程;2. 添加A...
|
59
|
// while (getchar() != 'q');
|
aac5773f
hucm
功能基本完成,接口待打磨
|
60
|
|
e41a52bb
Hu Chunming
1.优化数据读取线程;2. 添加A...
|
61
62
63
|
// // pDecManager->closeDecoderByName("dec1");
// // pDecManager->pauseDecoder("dec1");
// pDecManager->pauseDecoder("dec2");
|
aac5773f
hucm
功能基本完成,接口待打磨
|
64
|
|
e41a52bb
Hu Chunming
1.优化数据读取线程;2. 添加A...
|
65
|
// while (getchar() != 'q');
|
aac5773f
hucm
功能基本完成,接口待打磨
|
66
|
|
e41a52bb
Hu Chunming
1.优化数据读取线程;2. 添加A...
|
67
68
|
// // pDecManager->resumeDecoder("dec1");
// pDecManager->resumeDecoder("dec2");
|
aac5773f
hucm
功能基本完成,接口待打磨
|
69
70
71
72
73
|
while (getchar() != 'q');
pDecManager->closeAllDecoder();
}
|