20 #include <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;
81 virtual void process(
const std::vector<std::vector<uint8_t>>& encodedPackets) = 0;
119 virtual void deinitialize();
122 virtual bool initialize(
const osg::ref_ptr<osg::Image>& image,
unsigned int frameRate,
const std::string& encodingFormat);
125 virtual void submitPBO(
unsigned int pboId
126 ,
int width,
int height,
int rowSizeInBytes
127 ,
unsigned int frameRate
131 virtual bool registerGlResourceIfNecessary(
unsigned int pboId);
136 virtual void deinitCUDA();
142 virtual void deinitNVidiaEncoder();
145 virtual bool initNVidiaEncoder();
148 virtual void initFinailizeh264(_NV_ENC_BUFFER_FORMAT bufferFormat, NV_ENC_INITIALIZE_PARAMS& encoderParams);
151 virtual void initFinailizeh265(_NV_ENC_BUFFER_FORMAT bufferFormat, NV_ENC_INITIALIZE_PARAMS& encoderParams);
157 virtual void setTuningInfo( NV_ENC_TUNING_INFO tuningInfo );
164 virtual void setPresetGUID( GUID preset );
167 virtual void unmapDeviceBuffer();
172 virtual bool registerInputAndOutputResourcesIfNecessary(
int width,
int height,
int rowSizeInBytes);
175 virtual DtHwEncoderFormat toFormat(
const std::string& format)
const;
178 virtual void getEncodedPackets();
181 virtual void doWork();
184 virtual void WaitForCompletionEvent(
int iEvent);
228 friend class DtEncoderIOGetEncodedPacketsTask;
237 tbb::concurrent_queue<DtEncoderSubmitPboWork>
myWork;
243 bool myWorkerInitialized =
false;
247 bool myWorkerToQuit =
false;
250 bool myInputOutputResourcesRegistered =
false;
262 #define DT_ENCODER_DEBUG_WRITE_TO_FILE 0
263 #if DT_ENCODER_DEBUG_WRITE_TO_FILE
264 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:188
int myWidth
Definition: DtEncoderIO.h:91
This represents the unit of work that is submitted to the encoder via the submit pbo call...
Definition: DtEncoderIO.h:88
CUcontext myHcuContext
CUDA device context.
Definition: DtEncoderIO.h:194
DtHwEncoderFormat
Definition: DtEncoderIO.h:104
uint64_t myEncodeIdx
encoding index
Definition: DtEncoderIO.h:203
std::vector< DtEncodeInputBuffer > myInputBuffer
Definition: DtEncoderIO.h:197
static int theRunningId
Definition: DtEncoderIO.h:257
int myRowSizeInBytes
Definition: DtEncoderIO.h:93
int myHcuDevice
CUDA device handle.
Definition: DtEncoderIO.h:191
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:234
std::vector< std::vector< uint8_t > > myHwEncodedPackets
Definition: DtEncoderIO.h:229
#define DT_DLL_VRVVIDEOSTREAM
Definition: vrvVideoStream.h:20
std::thread myWorkerThread
This is the worker thread which processes the work queue.
Definition: DtEncoderIO.h:240
int myHeight
Definition: DtEncoderIO.h:92
char * inputBuffer
Definition: lz4.h:460
std::vector< DtEncodeOutputBuffer > myOutputBuffer
Definition: DtEncoderIO.h:196
int myWidth
Definition: DtEncoderIO.h:222
DtEncoderIOCallback * myCallback
Definition: DtEncoderIO.h:95
CUdeviceptr myCUDATempDevicePtr
Temp buffer on CUDA device.
Definition: DtEncoderIO.h:206
This is an abstract call back to process encoded packets.
Definition: DtEncoderIO.h:76
void * myNVEncoder
encoding pointer
Definition: DtEncoderIO.h:200
virtual ~DtEncoderIOCallback()=default
virtual void process(const std::vector< std::vector< uint8_t >> &encodedPackets)=0
unsigned int myFrameRate
Definition: DtEncoderIO.h:94
int myToSendFrames
Definition: DtEncoderIO.h:225
NV_ENC_TUNING_INFO myTuningInfo
Definition: DtEncoderIO.h:259
The EncoderIO class is responsible to initialize CUDA and NVidia encoder then will be responsible to ...
Definition: DtEncoderIO.h:101
bool myUsingAsync
Definition: DtEncoderIO.h:252
static const int theDebugLevel
Definition: DtEncoderIO.h:266
tbb::concurrent_queue< DtEncoderSubmitPboWork > myWork
This is the work queue.
Definition: DtEncoderIO.h:237
Definition: DtIndirectGlTextureObjectManager.h:39
DtHwEncoderFormat myEncodingFormat
Encoding Data format.
Definition: DtEncoderIO.h:218
int myHeight
Definition: DtEncoderIO.h:223
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:76
Encoding output buffer.
Definition: DtEncoderIO.h:56
DtDe & myDe
Definition: DtEncoderIO.h:220
std::vector< void * > myCompletionEvent
Definition: DtEncoderIO.h:253
int myId
Definition: DtEncoderIO.h:255
GUID myPresetGUID
Definition: DtEncoderIO.h:260
unsigned int myPboId
Definition: DtEncoderIO.h:90
Contains DLL export macros.
uint32_t myTempStride
Temp buffer on CUDA device.
Definition: DtEncoderIO.h:212
unsigned int myFrameRate
Frame Rate.
Definition: DtEncoderIO.h:215
int myGotFrames
Definition: DtEncoderIO.h:226
unsigned int myCUDATempDeviceSize
CUDATempDevicePtr size.
Definition: DtEncoderIO.h:209