20 #include <NvCodec/NvEncoder/nvEncodeAPI.h>
24 #include <cuda_gl_interop.h>
25 #include <cuda_runtime_api.h>
26 #include <cuda_runtime.h>
29 #include <unordered_set>
30 #include <unordered_map>
32 #include <tbb/concurrent_queue.h>
47 CUdeviceptr pNV12devPtr = 0;
49 uint32_t uNV12Stride = 0;
51 void* nvRegisteredResource = 0;
52 NV_ENC_INPUT_PTR hInputSurface = 0;
59 NV_ENC_OUTPUT_PTR hBitstreamBuffer = 0;
66 unsigned int myPboId = 0;
69 cudaGraphicsResource* myCudaGraphicsResource =
nullptr;
72 void* myCudaGraphicsResourceMappedPointer =
nullptr;
79 virtual void process(
const std::vector<std::vector<uint8_t>>& encodedPackets) = 0;
117 virtual void deinitialize();
120 virtual bool initialize(
const osg::ref_ptr<osg::Image>& image,
unsigned int frameRate,
const std::string& encodingFormat);
123 virtual void submitPBO(
unsigned int pboId
124 ,
int width,
int height,
int rowSizeInBytes
125 ,
unsigned int frameRate
129 virtual bool registerGlResourceIfNecessary(
unsigned int pboId);
134 virtual void deinitCUDA();
140 virtual void deinitNVidiaEncoder();
143 virtual bool initNVidiaEncoder();
146 virtual void unmapDeviceBuffer();
151 virtual bool registerInputAndOutputResourcesIfNecessary(
int width,
int height,
int rowSizeInBytes);
153 virtual bool fillDefaultEncoderParams(NV_ENC_INITIALIZE_PARAMS& encoderParams);
156 virtual DtHwEncoderFormat toFormat(
const std::string& format)
const;
159 virtual void getEncodedPackets();
162 virtual void doWork();
202 int myToSendFrames = 0;
205 friend class DtEncoderIOGetEncodedPacketsTask;
214 tbb::concurrent_queue<DtEncoderSubmitPboWork>
myWork;
220 bool myWorkerInitialized =
false;
224 bool myWorkerToQuit =
false;
227 bool myInputOutputResourcesRegistered =
false;
233 #define DT_ENCODER_DEBUG_WRITE_TO_FILE 0
234 #if DT_ENCODER_DEBUG_WRITE_TO_FILE
235 std::ofstream* myOuputFile;
This is the OpenGL resource registered with cuda (pbo)
Definition: DtEncoderIO.h:63
int myCudaDeviceId
CUDA device ID use for the encoding.
Definition: DtEncoderIO.h:165
int myWidth
Definition: DtEncoderIO.h:89
This represents the unit of work that is submitted to the encoder via the submit pbo call...
Definition: DtEncoderIO.h:86
CUcontext myHcuContext
CUDA device context.
Definition: DtEncoderIO.h:171
DtHwEncoderFormat
Definition: DtEncoderIO.h:102
uint64_t myEncodeIdx
encoding index
Definition: DtEncoderIO.h:180
std::vector< DtEncodeInputBuffer > myInputBuffer
Definition: DtEncoderIO.h:174
static int theRunningId
Definition: DtEncoderIO.h:231
int myRowSizeInBytes
Definition: DtEncoderIO.h:91
int myHcuDevice
CUDA device handle.
Definition: DtEncoderIO.h:168
std::unordered_map< unsigned int, DtRegisteredCudaGlResource * > myRegisteredPbos
This is the list of pbos registered with this encoder. It corresponds to a ring buffer of pbos on the...
Definition: DtEncoderIO.h:211
std::vector< std::vector< uint8_t > > myHwEncodedPackets
Definition: DtEncoderIO.h:206
#define DT_DLL_VRVVIDEOSTREAM
Definition: vrvVideoStream.h:20
std::thread myWorkerThread
This is the worker thread which processes the work queue.
Definition: DtEncoderIO.h:217
int myHeight
Definition: DtEncoderIO.h:90
char * inputBuffer
Definition: lz4.h:460
std::vector< DtEncodeOutputBuffer > myOutputBuffer
Definition: DtEncoderIO.h:173
DtEncoderIOCallback * myCallback
Definition: DtEncoderIO.h:93
CUdeviceptr myCUDATempDevicePtr
Temp buffer on CUDA device.
Definition: DtEncoderIO.h:183
This is an abstract call back to process encoded packets.
Definition: DtEncoderIO.h:76
void * myNVEncoder
encoding pointer
Definition: DtEncoderIO.h:177
virtual void process(const std::vector< std::vector< uint8_t >> &encodedPackets)=0
unsigned int myFrameRate
Definition: DtEncoderIO.h:92
The EncoderIO class is responsible to initialize CUDA and NVidia encoder then will be responsible to ...
Definition: DtEncoderIO.h:99
static const int theDebugLevel
Definition: DtEncoderIO.h:237
tbb::concurrent_queue< DtEncoderSubmitPboWork > myWork
This is the work queue.
Definition: DtEncoderIO.h:214
DtHwEncoderFormat myEncodingFormat
Encoding Data format.
Definition: DtEncoderIO.h:195
The DtDe is the core component of any VR-Vantage application. It owns a DtRenderer, DtDeCommunicator, as well as a DtDisplay and other things.
Definition: DtDe.h:70
Encoding output buffer.
Definition: DtEncoderIO.h:56
DtDe & myDe
Definition: DtEncoderIO.h:197
unsigned int myPboId
Definition: DtEncoderIO.h:88
Contains DLL export macros.
uint32_t myTempStride
Temp buffer on CUDA device.
Definition: DtEncoderIO.h:189
unsigned int myFrameRate
Frame Rate.
Definition: DtEncoderIO.h:192
unsigned int myCUDATempDeviceSize
CUDATempDevicePtr size.
Definition: DtEncoderIO.h:186