Blame view

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