Blame view

src/main.cpp 4.03 KB
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();
  }