VR-Forces Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
List of all members | Public Types | Public Member Functions | Protected Member Functions | Protected Attributes | Static Protected Attributes | Friends
makVrv::DtEncoderIO Class Reference

The EncoderIO class is responsible to initialize CUDA and NVidia encoder then will be responsible to submit the Pixel Buffer Object to the GPU for encoding.

Public Types

enum  DtHwEncoderFormat { UNKNOWN = 0, H264 = 1, H265 = 2 }
 

Public Member Functions

 DtEncoderIO (DtDe &de)
 
virtual ~DtEncoderIO ()
 
virtual void deinitialize ()
 
virtual bool initialize (const osg::ref_ptr< osg::Image > &image, unsigned int frameRate, const std::string &encodingFormat)
 
virtual void submitPBO (unsigned int pboId, int width, int height, int rowSizeInBytes, unsigned int frameRate, DtEncoderIOCallback *callback)
 
virtual bool registerGlResourceIfNecessary (unsigned int pboId)
 

Protected Member Functions

virtual void deinitCUDA ()
 
virtual bool initCUDA (const osg::ref_ptr< osg::Image > &image, unsigned int frameRate)
 
virtual void deinitNVidiaEncoder ()
 
virtual bool initNVidiaEncoder ()
 
virtual void initFinailizeh264 (_NV_ENC_BUFFER_FORMAT bufferFormat, NV_ENC_INITIALIZE_PARAMS &encoderParams)
 
virtual void initFinailizeh265 (_NV_ENC_BUFFER_FORMAT bufferFormat, NV_ENC_INITIALIZE_PARAMS &encoderParams)
 
virtual void setTuningInfo (NV_ENC_TUNING_INFO tuningInfo)
 
virtual void setPresetGUID (GUID preset)
 
virtual void unmapDeviceBuffer ()
 
virtual bool flipVertically (DtEncodeInputBuffer *inputBuffer, DtRegisteredCudaGlResource *val, int rowSizeInBytes, int imageHeight)
 
virtual bool registerInputAndOutputResourcesIfNecessary (int width, int height, int rowSizeInBytes)
 
virtual DtHwEncoderFormat toFormat (const std::string &format) const
 
virtual void getEncodedPackets ()
 
virtual void doWork ()
 
virtual void WaitForCompletionEvent (int iEvent)
 

Protected Attributes

int myCudaDeviceId
 
int myHcuDevice
 
CUcontext myHcuContext
 
std::vector< DtEncodeOutputBuffermyOutputBuffer
 
std::vector< DtEncodeInputBuffermyInputBuffer
 
void * myNVEncoder
 
uint64_t myEncodeIdx
 
CUdeviceptr myCUDATempDevicePtr
 
unsigned int myCUDATempDeviceSize
 
uint32_t myTempStride
 
unsigned int myFrameRate
 
DtHwEncoderFormat myEncodingFormat
 
DtDemyDe
 
int myWidth
 
int myHeight
 
int myToSendFrames
 
int myGotFrames
 
std::vector< std::vector
< uint8_t > > 
myHwEncodedPackets
 
std::unordered_map< unsigned
int,
DtRegisteredCudaGlResource * > 
myRegisteredPbos
 
tbb::concurrent_queue
< DtEncoderSubmitPboWork
myWork
 
std::thread myWorkerThread
 
bool myWorkerInitialized = false
 
bool myWorkerToQuit = false
 
bool myInputOutputResourcesRegistered = false
 
bool myUsingAsync
 
std::vector< void * > myCompletionEvent
 
int myId
 
NV_ENC_TUNING_INFO myTuningInfo
 
GUID myPresetGUID
 

Static Protected Attributes

static int theRunningId
 
static const int theDebugLevel
 

Friends

class DtEncoderIOGetEncodedPacketsTask
 

Member Enumeration Documentation

Enumerator
UNKNOWN 
H264 
H265 

Constructor & Destructor Documentation

makVrv::DtEncoderIO::DtEncoderIO ( DtDe de)

CTOR.

virtual makVrv::DtEncoderIO::~DtEncoderIO ( )
virtual

DTOR.

Member Function Documentation

virtual void makVrv::DtEncoderIO::deinitialize ( )
virtual

Shutdown all (CUDA / NVIDIA encoder)

virtual bool makVrv::DtEncoderIO::initialize ( const osg::ref_ptr< osg::Image > &  image,
unsigned int  frameRate,
const std::string &  encodingFormat 
)
virtual

Initialize all (CUDA / NVIDIA encoder)

virtual void makVrv::DtEncoderIO::submitPBO ( unsigned int  pboId,
int  width,
int  height,
int  rowSizeInBytes,
unsigned int  frameRate,
DtEncoderIOCallback callback 
)
virtual

Submit Pixel Buffer Object.

virtual bool makVrv::DtEncoderIO::registerGlResourceIfNecessary ( unsigned int  pboId)
virtual

register the input pbo with cuda if necessary

virtual void makVrv::DtEncoderIO::deinitCUDA ( )
protectedvirtual

Shutdown CUDA.

virtual bool makVrv::DtEncoderIO::initCUDA ( const osg::ref_ptr< osg::Image > &  image,
unsigned int  frameRate 
)
protectedvirtual

Initialize CUDA.

virtual void makVrv::DtEncoderIO::deinitNVidiaEncoder ( )
protectedvirtual

Shutdown NVIDIA encoder.

virtual bool makVrv::DtEncoderIO::initNVidiaEncoder ( )
protectedvirtual

Initialize NVIDIA encoder.

virtual void makVrv::DtEncoderIO::initFinailizeh264 ( _NV_ENC_BUFFER_FORMAT  bufferFormat,
NV_ENC_INITIALIZE_PARAMS &  encoderParams 
)
protectedvirtual

Finalize the initialization settings for h264.

virtual void makVrv::DtEncoderIO::initFinailizeh265 ( _NV_ENC_BUFFER_FORMAT  bufferFormat,
NV_ENC_INITIALIZE_PARAMS &  encoderParams 
)
protectedvirtual

Finalize the initialization settings for h265.

virtual void makVrv::DtEncoderIO::setTuningInfo ( NV_ENC_TUNING_INFO  tuningInfo)
protectedvirtual

Set the encoding tuning information Must be called before initNVidiaEncoder See NV_ENC_TUNING_INFO for info Default NV_ENC_TUNING_INFO_ULTRA_LOW_LATENCY.

virtual void makVrv::DtEncoderIO::setPresetGUID ( GUID  preset)
protectedvirtual

Performance degrades and quality improves as we move from P1 to P7. Presets P3 to P7 for H264 and Presets P2 to P7 for HEVC have B frames enabled by default for HIGH_QUALITY and LOSSLESS tuning info, and will not work with Weighted Prediction enabled. In case Weighted Prediction is required, disable B frames by setting frameIntervalP = 1 Default = NV_ENC_PRESET_P3_GUID.

virtual void makVrv::DtEncoderIO::unmapDeviceBuffer ( )
protectedvirtual

Unmap CUDA buffer.

virtual bool makVrv::DtEncoderIO::flipVertically ( DtEncodeInputBuffer inputBuffer,
DtRegisteredCudaGlResource val,
int  rowSizeInBytes,
int  imageHeight 
)
protectedvirtual

Flip the input to the encoder buffer on the device with CUDA.

virtual bool makVrv::DtEncoderIO::registerInputAndOutputResourcesIfNecessary ( int  width,
int  height,
int  rowSizeInBytes 
)
protectedvirtual
virtual DtHwEncoderFormat makVrv::DtEncoderIO::toFormat ( const std::string &  format) const
protectedvirtual

helper

virtual void makVrv::DtEncoderIO::getEncodedPackets ( )
protectedvirtual

Internal function to get the encoded packets.

virtual void makVrv::DtEncoderIO::doWork ( )
protectedvirtual

This is done on another thread.

virtual void makVrv::DtEncoderIO::WaitForCompletionEvent ( int  iEvent)
protectedvirtual

This function is used to wait for completion of encode command.

Friends And Related Function Documentation

friend class DtEncoderIOGetEncodedPacketsTask
friend

Member Data Documentation

int makVrv::DtEncoderIO::myCudaDeviceId
protected

CUDA device ID use for the encoding.

int makVrv::DtEncoderIO::myHcuDevice
protected

CUDA device handle.

CUcontext makVrv::DtEncoderIO::myHcuContext
protected

CUDA device context.

std::vector<DtEncodeOutputBuffer> makVrv::DtEncoderIO::myOutputBuffer
protected
std::vector<DtEncodeInputBuffer> makVrv::DtEncoderIO::myInputBuffer
protected
void* makVrv::DtEncoderIO::myNVEncoder
protected

encoding pointer

uint64_t makVrv::DtEncoderIO::myEncodeIdx
protected

encoding index

CUdeviceptr makVrv::DtEncoderIO::myCUDATempDevicePtr
protected

Temp buffer on CUDA device.

unsigned int makVrv::DtEncoderIO::myCUDATempDeviceSize
protected

CUDATempDevicePtr size.

uint32_t makVrv::DtEncoderIO::myTempStride
protected

Temp buffer on CUDA device.

unsigned int makVrv::DtEncoderIO::myFrameRate
protected

Frame Rate.

DtHwEncoderFormat makVrv::DtEncoderIO::myEncodingFormat
protected

Encoding Data format.

DtDe& makVrv::DtEncoderIO::myDe
protected
int makVrv::DtEncoderIO::myWidth
protected
int makVrv::DtEncoderIO::myHeight
protected
int makVrv::DtEncoderIO::myToSendFrames
protected
int makVrv::DtEncoderIO::myGotFrames
protected
std::vector<std::vector<uint8_t> > makVrv::DtEncoderIO::myHwEncodedPackets
protected
std::unordered_map<unsigned int, DtRegisteredCudaGlResource*> makVrv::DtEncoderIO::myRegisteredPbos
protected

This is the list of pbos registered with this encoder. It corresponds to a ring buffer of pbos on the client side (the one calling the encoder) that are reading fbo asynchronously.

tbb::concurrent_queue<DtEncoderSubmitPboWork> makVrv::DtEncoderIO::myWork
protected

This is the work queue.

std::thread makVrv::DtEncoderIO::myWorkerThread
protected

This is the worker thread which processes the work queue.

bool makVrv::DtEncoderIO::myWorkerInitialized = false
protected

Whether the worker thread has been initialized.

bool makVrv::DtEncoderIO::myWorkerToQuit = false
protected

boolean used to indicate to the worker thread that it must quit and join the main thread

bool makVrv::DtEncoderIO::myInputOutputResourcesRegistered = false
protected

The registered resources.

bool makVrv::DtEncoderIO::myUsingAsync
protected
std::vector<void*> makVrv::DtEncoderIO::myCompletionEvent
protected
int makVrv::DtEncoderIO::myId
protected
int makVrv::DtEncoderIO::theRunningId
staticprotected
NV_ENC_TUNING_INFO makVrv::DtEncoderIO::myTuningInfo
protected
GUID makVrv::DtEncoderIO::myPresetGUID
protected
const int makVrv::DtEncoderIO::theDebugLevel
staticprotected

The documentation for this class was generated from the following file:

Document ID: Generated on Thu Oct 23 22:29:17 EDT 2025 from SVN revision 280951
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)