VR-Forces 5.0.2 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 unmapDeviceBuffer ()
 
virtual bool flipVertically (DtEncodeInputBuffer *inputBuffer, DtRegisteredCudaGlResource *val, int rowSizeInBytes, int imageHeight)
 
virtual bool registerInputAndOutputResourcesIfNecessary (int width, int height, int rowSizeInBytes)
 
virtual bool fillDefaultEncoderParams (NV_ENC_INITIALIZE_PARAMS &encoderParams)
 
virtual DtHwEncoderFormat toFormat (const std::string &format) const
 
virtual void getEncodedPackets ()
 
virtual void doWork ()
 

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 = 0
 
int myHeight = 0
 
int myToSendFrames = 0
 
int myGotFrames = 0
 
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
 
int myId = 0
 

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::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 bool makVrv::DtEncoderIO::fillDefaultEncoderParams ( NV_ENC_INITIALIZE_PARAMS &  encoderParams)
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.

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 = 0
protected
int makVrv::DtEncoderIO::myHeight = 0
protected
int makVrv::DtEncoderIO::myToSendFrames = 0
protected
int makVrv::DtEncoderIO::myGotFrames = 0
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.

int makVrv::DtEncoderIO::myId = 0
protected
int makVrv::DtEncoderIO::theRunningId
staticprotected
const int makVrv::DtEncoderIO::theDebugLevel
staticprotected

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

Document ID: Generated on Sun Dec 4 20:22:03 EST 2022 from SVN revision 249613
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)