VR-Forces 4.10 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
DtEncoderIO.h
Go to the documentation of this file.
1 /******************************************************************************
2 ** Copyright (c) 2019 VT-MAK Technologies, Inc.
3 ** All rights reserved.
4 ******************************************************************************/
5 
9 #pragma once
10 #include <vrvCore/DtDe.h>
14 #include <osg/Image>
15 // CUDA includes
16 #include "cuda_runtime.h"
17 #include <cuda_gl_interop.h>
18 
19 // CUDA utilities and system includes
21 #include <cuda.h>
22 #include <cuda_runtime_api.h>
23 
24 #include <NvCodec/NvEncoder/nvEncodeAPI.h>
25 
26 namespace makVrv
27 {
28 #define MAX_ENCODE_QUEUE 32
29 
32  {
34  : dwWidth(0)
35  , dwHeight(0)
36  , pNV12devPtr(0)
37  , uNV12Stride(0)
38  , nvRegisteredResource(0)
39  , hInputSurface(0)
40  , bufferFmt(NV_ENC_BUFFER_FORMAT_ARGB)
41  {
42 
43  }
44  unsigned int dwWidth;
45  unsigned int dwHeight;
46  CUdeviceptr pNV12devPtr;
47  uint32_t uNV12Stride;
49  NV_ENC_INPUT_PTR hInputSurface;
50  NV_ENC_BUFFER_FORMAT bufferFmt;
52 
55  {
57  : hBitstreamBuffer(0)
58  {
59 
60  }
61  NV_ENC_OUTPUT_PTR hBitstreamBuffer;
63 
66  {
69  } EncodeBuffer;
70 
75  {
76  public:
78  DtEncoderIO();
79 
81  virtual ~DtEncoderIO();
82 
84  void deinitialize();
85 
87  bool initialize(DtDe* theDe, const osg::ref_ptr<osg::Image>& image, unsigned int frameRate, const std::string& encodingFormat);
88 
90  void submitPBO(unsigned int pboId, osg::ref_ptr<osg::Image>& image, DtReadFramebufferProcessData& fbData, unsigned int frameRate);
91 
92  protected:
93 
95  void deinitCUDA();
96 
98  bool initCUDA(const osg::ref_ptr<osg::Image>& image, unsigned int frameRate);
99 
101  void deinitNVidiaEncoder();
102 
104  bool initNVidiaEncoder(const osg::ref_ptr<osg::Image>& image, unsigned int frameRate);
105 
107  void unmapDeviceBuffer();
108 
111 
114 
116  CUcontext myHcuContext;
117 
120 
123 
125  void * myNVEncoder;
126 
128  uint64_t myEncodeIdx;
129 
131  CUdeviceptr myCUDATempDevicePtr;
132 
134  unsigned int myCUDATempDeviceSize;
135 
137  uint32_t myTempStride;
138 
140  unsigned int myFrameRate;
141 
144 
146  std::string myEncodingFormat;
147 
150 
152  unsigned int myPboId;
153 
155  cudaGraphicsResource* myDeviceBufferResource;
156 
157  };
158 }
int myCudaDeviceId
CUDA device ID use for the encoding.
Definition: DtEncoderIO.h:110
struct DT_DLL_VRVVIDEOSTREAM makVrv::_EncodeInputBuffer EncodeInputBuffer
Encoding input buffer.
CUcontext myHcuContext
CUDA device context.
Definition: DtEncoderIO.h:116
uint64_t myEncodeIdx
encoding index
Definition: DtEncoderIO.h:128
Encoding buffer (contain input/output encoding buffers)
Definition: DtEncoderIO.h:65
_EncodeOutputBuffer()
Definition: DtEncoderIO.h:56
This is a non-extendable container class used to send the information to the NVidia encoder...
Definition: DtReadFramebufferProcessData.h:20
#define MAX_ENCODE_QUEUE
Definition: DtEncoderIO.h:28
NV_ENC_BUFFER_FORMAT bufferFmt
Definition: DtEncoderIO.h:50
int myHcuDevice
CUDA device handle.
Definition: DtEncoderIO.h:113
DtNvQueue< EncodeBuffer > myEncodeBufferQueue
Encoding queue.
Definition: DtEncoderIO.h:122
#define DT_DLL_VRVVIDEOSTREAM
Definition: vrvVideoStream.h:20
Contains makVrv::DtDe class.
void * myDeviceBufferPtr
CUDA resource pointer for PBO.
Definition: DtEncoderIO.h:149
struct DT_DLL_VRVVIDEOSTREAM makVrv::_EncodeOutputBuffer EncodeOutputBuffer
Encoding output buffer.
unsigned int dwHeight
Definition: DtEncoderIO.h:45
Contains the DtNvQueue class declaration.
CUdeviceptr pNV12devPtr
Definition: DtEncoderIO.h:46
unsigned int dwWidth
Definition: DtEncoderIO.h:44
_EncodeInputBuffer()
Definition: DtEncoderIO.h:33
EncodeInputBuffer stInputBfr
Definition: DtEncoderIO.h:68
std::string myEncodingFormat
Encoding Data format.
Definition: DtEncoderIO.h:146
CUdeviceptr myCUDATempDevicePtr
Temp buffer on CUDA device.
Definition: DtEncoderIO.h:131
DtDe * myDe
Copy of the DtDe.
Definition: DtEncoderIO.h:143
Contains modified utilities from the helper_cuda.h file.
cudaGraphicsResource * myDeviceBufferResource
Current CUDA resource.
Definition: DtEncoderIO.h:155
struct DT_DLL_VRVVIDEOSTREAM makVrv::_EncodeBuffer EncodeBuffer
Encoding buffer (contain input/output encoding buffers)
void * myNVEncoder
encoding pointer
Definition: DtEncoderIO.h:125
Contains the DtReadFramebufferProcessData class declaration.
The EncoderIO class is responsible to initialize CUDA and NVidia encoder then will be responsible to ...
Definition: DtEncoderIO.h:74
void * nvRegisteredResource
Definition: DtEncoderIO.h:48
NV_ENC_INPUT_PTR hInputSurface
Definition: DtEncoderIO.h:49
Encoding output buffer.
Definition: DtEncoderIO.h:54
Encoding input buffer.
Definition: DtEncoderIO.h:31
The DtDe is the core component of any VR-Vantage application.
Definition: DtDe.h:69
uint32_t uNV12Stride
Definition: DtEncoderIO.h:47
Contains DLL export macros.
NV_ENC_OUTPUT_PTR hBitstreamBuffer
Definition: DtEncoderIO.h:61
uint32_t myTempStride
Temp buffer on CUDA device.
Definition: DtEncoderIO.h:137
unsigned int myFrameRate
Frame Rate.
Definition: DtEncoderIO.h:140
EncodeOutputBuffer stOutputBfr
Definition: DtEncoderIO.h:67
unsigned int myCUDATempDeviceSize
CUDATempDevicePtr size.
Definition: DtEncoderIO.h:134
unsigned int myPboId
Current PBO Id.
Definition: DtEncoderIO.h:152

Document ID: Generated on Tue Sep 21 17:42:52 EDT 2021 from SVN revision 234861
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)