The NvMediaIEP object takes uncompressed image data and turns it into a codec specific bitstream. Only H.264, H.265 and VP9 encoding is supported.
6
Modules | |
Data types for H.264 encoding | |
Types and declarations for H.264 Encoding. | |
Image Encoder Output Extradata | |
Defines Image Encoder Output Extradata data types which can be used with NvMedia IEP APIs to retrieve encoder statistics/configurations. This feature is not available on the QNX Safety configuration. | |
Macros | |
#define | NVMEDIA_IEP_VERSION_MAJOR 1 |
Major Version number. More... | |
#define | NVMEDIA_IEP_VERSION_MINOR 0 |
Minor Version number. More... | |
#define | NVMEDIA_IEP_VERSION_PATCH 2 |
Patch Version number. More... | |
#define | NVMEDIA_IEP_MAX_PRENVSCISYNCFENCES (16U) |
Specifies the maximum number of times NvMediaIEPInsertPreNvSciSyncFence() can be called before each call to NvMediaIEPFeedFrame(). More... | |
Typedefs | |
typedef struct NvMediaIEP | NvMediaIEP |
Opaque NvMediaIEP object created by NvMediaIEPCreate. More... | |
Enumerations | |
enum | NvMediaIEPType { NVMEDIA_IMAGE_ENCODE_H264, NVMEDIA_IMAGE_ENCODE_HEVC, NVMEDIA_IMAGE_ENCODE_VP9, NVMEDIA_IMAGE_ENCODE_AV1, NVMEDIA_IMAGE_ENCODE_END } |
Image encode type. More... | |
#define MAX_NON_SLICE_DATA_SIZE |
Maximum encoded header info size.
Definition at line 642 of file nvmedia_common_encode.h.
#define NVMEDIA_ENCODE_INFINITE_GOPLENGTH |
Infinite GOP length so that keyframes are not inserted automatically.
Definition at line 50 of file nvmedia_common_encode.h.
#define NVMEDIA_ENCODE_TIMEOUT_INFINITE |
Infinite time-out for NvMediaIEPBitsAvailable.
6
Definition at line 44 of file nvmedia_common_encode.h.
#define NVMEDIA_IEP_MAX_PRENVSCISYNCFENCES (16U) |
Specifies the maximum number of times NvMediaIEPInsertPreNvSciSyncFence() can be called before each call to NvMediaIEPFeedFrame().
Definition at line 55 of file nvmedia_iep.h.
#define NVMEDIA_IEP_VERSION_MAJOR 1 |
Major Version number.
Definition at line 45 of file nvmedia_iep.h.
#define NVMEDIA_IEP_VERSION_MINOR 0 |
Minor Version number.
Definition at line 47 of file nvmedia_iep.h.
#define NVMEDIA_IEP_VERSION_PATCH 2 |
Patch Version number.
Definition at line 49 of file nvmedia_iep.h.
typedef struct NvMediaIEP NvMediaIEP |
Opaque NvMediaIEP object created by NvMediaIEPCreate.
Definition at line 75 of file nvmedia_iep.h.
enum NvMediaBlockingType |
Blocking type.
Enumerator | |
---|---|
NVMEDIA_ENCODE_BLOCKING_TYPE_NEVER | Never blocks. |
NVMEDIA_ENCODE_BLOCKING_TYPE_IF_PENDING | Block only when operation is pending. |
Definition at line 201 of file nvmedia_common_encode.h.
enum NvMediaEncAttrType |
Specifies the encoder get attribute type.
This can be extended to get other encoding parameter information.
Definition at line 615 of file nvmedia_common_encode.h.
Defines extended encoding profiles.
Definition at line 270 of file nvmedia_common_encode.h.
Defines H.264 specific Adaptive Transform modes.
Definition at line 488 of file nvmedia_common_encode.h.
Defines H.264 specific Bdirect modes.
Definition at line 473 of file nvmedia_common_encode.h.
Defines H.264 entropy coding modes.
Enumerator | |
---|---|
NVMEDIA_ENCODE_H264_ENTROPY_CODING_MODE_CAVLC | Entropy coding mode is CAVLC. |
NVMEDIA_ENCODE_H264_ENTROPY_CODING_MODE_CABAC | Entropy coding mode is CABAC. |
Definition at line 462 of file nvmedia_common_encode.h.
Defines H264 encoder configuration features.
Enumerator | |
---|---|
NVMEDIA_ENCODE_CONFIG_H264_ENABLE_OUTPUT_AUD | Enable to write access unit delimiter syntax in bitstream. |
NVMEDIA_ENCODE_CONFIG_H264_ENABLE_INTRA_REFRESH | Enable gradual decoder refresh or intra refresh. If the GOP structure uses B frames this will be ignored |
NVMEDIA_ENCODE_CONFIG_H264_ENABLE_DYNAMIC_SLICE_MODE | Enable dynamic slice mode. Client must specify max slice size using the NvMediaEncodeConfigH264::maxSliceSizeInBytes field. This setting is not supported in the QNX Safety build. |
NVMEDIA_ENCODE_CONFIG_H264_ENABLE_CONSTRANED_ENCODING | Enable constrainedFrame encoding where each slice in the constrained picture is independent of other slices. |
NVMEDIA_ENCODE_CONFIG_H264_ENABLE_LOSSLESS_COMPRESSION | Enable lossless compression.
|
NVMEDIA_ENCODE_CONFIG_H264_ENABLE_SLICE_LEVEL_OUTPUT | Enable slice level output encoding. This enables delivery encoded data slice by slice to client to reduce encode latency. This setting is not supported in the QNX Safety build. |
NVMEDIA_ENCODE_CONFIG_H264_ENABLE_RTP_MODE_OUTPUT | Enable RTP mode output. NAL unit start code will be replaced with NAL size for the NAL units. |
NVMEDIA_ENCODE_CONFIG_H264_ENABLE_EXT_PIC_RC_HINT | Enable support for external picture RC hint.
|
NVMEDIA_ENCODE_CONFIG_H264_ENABLE_DYNAMIC_RPS | Enable support for dynamic reference picture set RPS/DPB control support. After receiving an input buffer and result of previous frame encoding, based on real time information, Some client software determines properties for the new input buffer (long term/short term/non-referenced, frame number/poc/LT index). This setting is not supported in the QNX Safety build. |
NVMEDIA_ENCODE_CONFIG_H264_ENABLE_MV_BUFFER_DUMP | Enable support for motion vector buffer dump. This will enable motion vector dump. Motion vector buffer will be appended at the end of encoded bitstream data. This setting is not supported in the QNX Safety build. |
NVMEDIA_ENCODE_CONFIG_H264_ENABLE_PROFILING | Enable encoder profiling. Profiling information would be added as part of output extradata. This setting is not supported in the QNX Safety build. |
NVMEDIA_ENCODE_CONFIG_H264_INIT_QP | Enable support to use client provided Initial QP for all frame types. |
NVMEDIA_ENCODE_CONFIG_H264_QP_MAX | Enable support to use client provided QP max for all frame types. |
NVMEDIA_ENCODE_CONFIG_H264_ENABLE_FOUR_BYTE_START_CODE | Enable support to use 4 byte start code in all the slices in a picture. |
NVMEDIA_ENCODE_CONFIG_H264_ENABLE_ULTRA_FAST_ENCODE | Enable ultra fast encoding. It overrides some of the quality settings to achieve ultra fast encoding. This is equivalent to setting NVMEDIA_ENCODE_QUALITY_L0 as the NvMediaEncodeQuality. |
NVMEDIA_ENCODE_CONFIG_H264_ENABLE_MV_BUFFER_DUMP_V2 | Enable support for motion vector buffer dump in a simplified (V2) format. Motion vector buffer will be appended to the end of encoded bitstream data retrieved using NvMediaIEPGetBits. Refer NvMediaEncodeOutputExtradata for more information regarding the format of the dumped MV output. Either NVMEDIA_ENCODE_CONFIG_H264_ENABLE_MV_BUFFER_DUMP_V2 or NVMEDIA_ENCODE_CONFIG_H264_ENABLE_MV_BUFFER_DUMP should be enabled at a given time. If both are enabled, V2 format will be used. It should be ensured that size of NvMediaBitstreamBuffer passed to NvMediaIEPGetBits has sufficient space to store the MV buffer dump. The numBytesAvailable returned by NvMediaIEPBitsAvailable or numBytes returned by NvMediaIEPGetBits does not take MV buffer dump size into account - represents only the size of the encoded bits that are available. While allocating bitstream buffers, the additional amount of space required in bitstream to accommodate MV buffer data needs to be added. This can be calculated as follows: mvBufferSize = sizeof(NvMediaEncodeMVBufferHeader) +
ALIGN_256(numMacroBlocks * sizeof(NvMediaEncodeMVData))
where,
NumMacroBlocks =
(ALIGN_16(InputWidth)/16) * (ALIGN_16(InputHeight)/16)
bitstreamSize = ALIGN_8(bitsAvailable) + mvBufferSize
ALIGN_N refers to an operation which returns a multiple of N, greater than or equal to a number, closest to the number.
|
Definition at line 749 of file nvmedia_common_encode.h.
Defines motion prediction exclusion flags for H.264.
Definition at line 503 of file nvmedia_common_encode.h.
Defines motion search mode control flags for H.264.
Definition at line 575 of file nvmedia_common_encode.h.
Define H.264 pic_order_cnt_type.
Enumerator | |
---|---|
NVMEDIA_ENCODE_H264_POC_TYPE_AUTOSELECT | Automatic level selection. |
NVMEDIA_ENCODE_H264_POC_TYPE_0 | Pic_order_cnt_type 0. |
NVMEDIA_ENCODE_H264_POC_TYPE_2 | Pic_order_cnt_type 2. |
Definition at line 629 of file nvmedia_common_encode.h.
Specifies the frequency of the writing of Sequence and Picture parameters for H.264.
Definition at line 601 of file nvmedia_common_encode.h.
Defines H265encoding profiles.
Definition at line 356 of file nvmedia_common_encode.h.
enum NvMediaEncodeLevel |
Defines encoding levels for H264 encoder.
Definition at line 311 of file nvmedia_common_encode.h.
Defines encoding levels for H265 encoder.
Definition at line 380 of file nvmedia_common_encode.h.
Rate Control Modes.
Enumerator | |
---|---|
NVMEDIA_ENCODE_PARAMS_RC_CBR | Constant bitrate mode. |
NVMEDIA_ENCODE_PARAMS_RC_CONSTQP | Constant QP mode. |
NVMEDIA_ENCODE_PARAMS_RC_VBR | Variable bitrate mode. |
NVMEDIA_ENCODE_PARAMS_RC_VBR_MINQP | Variable bitrate mode with MinQP. This value is not supported in the QNX Safety build.
|
NVMEDIA_ENCODE_PARAMS_RC_CBR_MINQP | Constant bitrate mode with MinQP. This value is not supported in the QNX Safety build.
|
Definition at line 85 of file nvmedia_common_encode.h.
Defines encoding Picture encode flags.
Definition at line 419 of file nvmedia_common_encode.h.
enum NvMediaEncodePicType |
Input picture type.
Definition at line 219 of file nvmedia_common_encode.h.
enum NvMediaEncodeProfile |
Defines encoding profiles.
Definition at line 239 of file nvmedia_common_encode.h.
Specifies the encoder instance ID.
Definition at line 56 of file nvmedia_common_encode.h.
enum NvMediaEncPreset |
Defines encode preset level settings.
Definition at line 436 of file nvmedia_common_encode.h.
enum NvMediaIEPType |
Image encode type.
Enumerator | |
---|---|
NVMEDIA_IMAGE_ENCODE_H264 | H.264 encode. |
NVMEDIA_IMAGE_ENCODE_HEVC | HEVC codec. |
NVMEDIA_IMAGE_ENCODE_VP9 | VP9 codec. |
NVMEDIA_IMAGE_ENCODE_AV1 | AV1 codec. |
NVMEDIA_IMAGE_ENCODE_END |
Definition at line 60 of file nvmedia_iep.h.
NvMediaStatus NvMediaIEPBitsAvailable | ( | const NvMediaIEP * | encoder, |
uint32_t * | numBytesAvailable, | ||
NvMediaBlockingType | blockingType, | ||
uint32_t | millisecondTimeout | ||
) |
Returns the status of an encoding task submitted using NvMediaIEPFeedFrame, whose encoded output is to be retrieved next.
The number of bytes of encoded output that is available (if ready), is also retrieved along with the status. The specific behavior depends on the specified NvMediaBlockingType.
It is safe to call the API to submit a task (NvMediaIEPFeedFrame) and this function from two different threads.
Usage considerations
[in] | encoder | A pointer to the NvMediaIEP object. Input range: Non-NULL - valid pointer address |
[out] | numBytesAvailable | The number of bytes of encoded output that is available. This output corresponds to the next encoding task in the queue for which the output is yet to be retrieved. The value is valid only when the return value from this API is NVMEDIA_STATUS_OK. |
[in] | blockingType | Blocking type. Input range: The following are supported blocking types:
|
[in] | millisecondTimeout | Timeout in milliseconds or NVMEDIA_VIDEO_ENCODER_TIMEOUT_INFINITE if a timeout is not desired. |
NvMediaIEP* NvMediaIEPCreate | ( | NvMediaIEPType | encodeType, |
const void * | initParams, | ||
NvSciBufAttrList | bufAttrList, | ||
uint8_t | maxInOutBuffering, | ||
NvMediaEncoderInstanceId | instanceId | ||
) |
Create an NvMediaIEP object instance.
Usage considerations
Creates an NvMediaIEP object capable of turning a stream of YUV surfaces characterized by NvSciBufAttrList into a compressed bitstream of the specified NvMediaIEPType codec type. Surfaces are fed to the encoder with NvMediaIEPFeedFrame and generated bitstream buffers are retrieved with NvMediaIEPGetBits.
[in] | encodeType | The video compression standard to be used for encoding Input range: Entries in NvMediaIEPType enumeration |
[in] | initParams | The encoder initialization parameters Input range: Pointer to a populated encode parameter structures: QNX Safety build:
|
[in] | bufAttrList | Pointer to a list of reconciled attributes that characterizes the input surface that needs to be encoded. Supported surface format attributes (common to all codecs): Buffer Type: NvSciBufType_Image Layout: NvSciBufImage_BlockLinearType Scan Type: NvSciBufScan_ProgressiveType Plane base address alignment: 256 Supported surface format attributes (codec specific): QNX Safety build: H.264: Sub-sampling type: YUV420 (semi-planar), YUV444 (semi-planar) Bit Depth: 8 Non-safety build: H.264: Sub-sampling type: YUV420 (semi-planar), YUV444 (semi-planar) Bit Depth: 8 H.265/HEVC: Sub-sampling type: YUV420 (semi-planar), YUV444 (semi-planar) Bit Depth: 8, 10 VP9: Sub-sampling type: YUV420 (semi-planar) Bit Depth: 8, 12 AV1: Sub-sampling type: YUV420 (semi-planar) Bit Depth: 8, 10 Input range: Non-NULL - valid pointer address obtained by a call to NvSciBufObjGetAttrList called with a valid NvSciBufObj that will contain the input content. |
[in] | maxBuffering | Maximum number of frames outstanding at any given point in time that NvMediaIEP can hold before its output must be retrieved using NvMediaIEPGetBits. If maxBuffering frames worth of encoded bitstream is yet to be retrived, NvMediaIEPFeedFrame returns NVMEDIA_STATUS_INSUFFICIENT_BUFFERING. In this case, encoded output of one or more frames must be retrived with NvMediaIEPGetBits before feeding more frames using NvMediaIEPFeedFrame Input range: The values between 4 and 16, in increments of 1 |
[in] | instanceId | The ID of the NvENC HW engine instance Input range: The following instances are supported:
|
NvMediaIEP* NvMediaIEPCreateCtx | ( | void | ) |
Create an NvMediaIEP object instance.
Usage considerations
NvMediaIEP* NvMediaIEPCreateEx | ( | NvMediaIEPType | encodeType, |
const void * | initParams, | ||
const NvSciBufSurfSampleType | subsampleType, | ||
const NvSciBufSurfBPC | bitdepth, | ||
uint8_t | maxInOutBuffering, | ||
NvMediaEncoderInstanceId | instanceId | ||
) |
Create an NvMediaIEP object instance.
Usage considerations
Creates an NvMediaIEP object capable of turning a stream of YUV surfaces characterized by NvSciBufAttrList into a compressed bitstream of the specified NvMediaIEPType codec type. Surfaces are fed to the encoder with NvMediaIEPFeedFrame and generated bitstream buffers are retrieved with NvMediaIEPGetBits.
[in] | encodeType | The video compression standard to be used for encoding Input range: Entries in NvMediaIEPType enumeration |
[in] | initParams | The encoder initialization parameters Input range: Pointer to a populated encode parameter structures: QNX Safety build:
|
[in] | subsampleType | Subsampling type of the input YUV surface Supported and valid surface format attributes listed below (codec specific): QNX Safety build: H.264: Sub-sampling type: NvSciSurfSampleType_420 (semi-planar), NvSciSurfSampleType_444 (semi-planar) Non-safety build: H.264: Sub-sampling type: NvSciSurfSampleType_420 (semi-planar), NvSciSurfSampleType_444 (semi-planar) H.265/HEVC: Sub-sampling type: NvSciSurfSampleType_420 (semi-planar), NvSciSurfSampleType_444 (semi-planar) VP9: Sub-sampling type: NvSciSurfSampleType_420 (semi-planar) AV1: Sub-sampling type: NvSciSurfSampleType_420 (semi-planar) |
[in] | bitdepth | Bitdepth for the input YUV surface Supported and valid surface format attributes listed below (codec specific): QNX Safety build: H.264: Bit Depth: NvSciSurfBPC_8 Non-safety build: H.264: Bit Depth: NvSciSurfBPC_8 H.265/HEVC: Bit Depth: NvSciSurfBPC_8, NvSciSurfBPC_10 VP9: Bit Depth: NvSciSurfBPC_8, NvSciSurfBPC_12 AV1: Bit Depth: NvSciSurfBPC_8, NvSciSurfBPC_10 |
[in] | maxBuffering | Maximum number of frames outstanding at any given point in time that NvMediaIEP can hold before its output must be retrieved using NvMediaIEPGetBits. If maxBuffering frames worth of encoded bitstream is yet to be retrived, NvMediaIEPFeedFrame returns NVMEDIA_STATUS_INSUFFICIENT_BUFFERING. In this case, encoded output of one or more frames must be retrived with NvMediaIEPGetBits before feeding more frames using NvMediaIEPFeedFrame Input range: The values between 4 and 16, in increments of 1 |
[in] | instanceId | The ID of the NvENC HW engine instance Input range: The following instances are supported:
|
void NvMediaIEPDestroy | ( | NvMediaIEP * | encoder | ) |
Destroys an NvMediaIEP object instance.
Usage considerations
[in] | encoder | The NvMediaIEP object to destroy. Input range: Non-NULL - valid pointer address |
NvMediaStatus NvMediaIEPFeedFrame | ( | NvMediaIEP * | encoder, |
const NvSciBufObj | frame, | ||
const void * | picParams, | ||
NvMediaEncoderInstanceId | instanceId | ||
) |
Submits the specified frame for encoding.
The encoding process is asynchronous, as a result, the encoded output may not be available when the API returns. Refer NvMediaIEPBitsAvailable and NvMediaIEPGetBits for more details regarding how to retrieve the encoded output.
Usage considerations
[in] | encoder | A pointer to the NvMediaIEP object. Input range: Non-NULL - valid pointer address |
[in] | bufObj | Input bufObj that contains the input content that needs to be encoded, allocated with a call to NvSciBufObjAlloc. The characteristics of the allocated NvSciBufObj should be equivalent to the bufAttrList passed in NvMediaIEPCreate. The size of the YUV surfaces contained in the NvSciBufObj need to be at least as large as the encoding width and height configured in the initialization parameters of NvMediaIEPCreate. Input range: A valid NvSciBufObj |
[in] | picParams | Picture parameters used for the frame. Input range: Supported picture parameter structures:
|
[in] | instanceId | The specific ID of the encoder engine instance where the encoding task needs to be submitted. Input range: The following instances are supported:
|
NvMediaStatus NvMediaIEPFillNvSciBufAttrList | ( | NvMediaEncoderInstanceId | instanceId, |
NvSciBufAttrList | attrlist | ||
) |
Fills the NvMediaIEP specific NvSciBuf attributes which than then be used to allocate an NvSciBufObj that NvMediaIEP can consume.
This function updates the input NvSciBufAttrList with values equivalent to the following public attribute key-values: NvSciBufGeneralAttrKey_PeerHwEngineArray set to
This function assumes that attrlist is a valid NvSciBufAttrList created by the caller by a call to NvSciBufAttrListCreate.
Usage considerations
[in] | instanceId | The ID of the NvENC HW engine instance Input range: The following instances are supported:
|
[out] | attrlist | A pointer to an NvSciBufAttrList structure where NvMediaIEP places the NvSciBuf attributes. |
NvMediaStatus NvMediaIEPFillNvSciSyncAttrList | ( | const NvMediaIEP * | encoder, |
NvSciSyncAttrList | attrlist, | ||
NvMediaNvSciSyncClientType | clienttype | ||
) |
Fills the NvMediaIEP specific NvSciSync attributes.
This function assumes that attrlist is a valid NvSciSyncAttrList.
This function updates the input NvSciSyncAttrList with values equivalent to the following public attribute key-values: NvSciSyncAttrKey_RequiredPerm set to
The application must not set these attributes in the NvSciSyncAttrList passed as an input to this function.
Usage considerations
[in] | encoder | A pointer to the NvMediaIEP object. Input range: Non-NULL - valid pointer address |
[out] | attrlist | A pointer to an NvSciSyncAttrList structure where NvMedia places NvSciSync attributes. |
[in] | clienttype | Indicates whether the NvSciSyncAttrList requested for an NvMediaIEP signaler or an NvMediaIEP waiter. Input range: Entries in NvMediaNvSciSyncClientType enumeration |
NvMediaStatus NvMediaIEPGetAttribute | ( | const NvMediaIEP * | encoder, |
NvMediaEncAttrType | attrType, | ||
uint32_t | attrSize, | ||
void * | AttributeData | ||
) |
Gets the encoder attribute for the current encoding session.
This function can be called after passing the first frame for encoding. It can be used to get header information (SPS/PPS/VPS) for the current encoding session. Additionally, it can be extended for further requirements, by implementing proper data structures.
Before calling this function, you must pass the first frame for encoding.
Usage considerations
[in] | encoder | A pointer to the NvMediaIEP object. Input range: Non-NULL - valid pointer address |
[in] | attrType | Attribute type as defined in NvMediaEncAttrType. Input range: Supported values from NvMediaEncAttrType enumeration |
[in] | attrSize | Size of the data structure associated with attribute. Input range: sizeof(NvMediaNalData) |
[out] | AttributeData | A pointer to data structure associated with the attribute. |
NvMediaStatus NvMediaIEPGetBits | ( | const NvMediaIEP * | encoder, |
uint32_t * | numBytes, | ||
uint32_t | numBitstreamBuffers, | ||
const NvMediaBitstreamBuffer * | bitstreams, | ||
void * | extradata | ||
) |
Returns the bitstream for a slice or a frame.
It is safe to call the API to submit a task (NvMediaIEPFeedFrame) and this function from two different threads.
The return value and behavior of NvMediaIEPGetBits is the same as that of NvMediaIEPBitsAvailable when called with NVMEDIA_ENCODE_BLOCKING_TYPE_NEVER, except that when NVMEDIA_STATUS_OK is returned, bitstreams is filled in addition to numBytes.
Usage considerations
[in] | encoder | A pointer to the NvMediaIEP object. Input range: Non-NULL - valid pointer address |
[out] | numBytes | Size of the filled bitstream. |
[in] | numBitstreamBuffers | The length of the bitstreams array Input range: 1 to 64 in steps of 1 |
[in,out] | bitstreams | A pointer to an array of type NvMediaBitstreamBuffer, the length of the array being passed in numBitstreamBuffers. Encoded bitstream data will be filled in the entries of the array, starting from index 0 to (numBitstreamBuffers - 1), as and when each entry in the array gets filled up. The minimum combined bitstream size needs to be at least equal to the numBytesAvailable returned by NvMediaIEPBitsAvailable call. Members of each NvMediaBitstreamBuffer are to be set as follows:
|
[in,out] | extradata | Export encoding statistics. Pass a pointer to NvMediaEncodeOutputExtradata in order to populate encoding statistics. Refer NvMediaEncodeOutputExtradata documentation for more information on supported codecs, stats, etc. Pass NULL to disable this feature. |
NvMediaStatus NvMediaIEPGetEOFNvSciSyncFence | ( | const NvMediaIEP * | encoder, |
NvSciSyncObj | eofnvscisyncobj, | ||
NvSciSyncFence * | eofnvscisyncfence | ||
) |
Gets EOF NvSciSyncFence for an NvMediaIEPFeedFrame() operation.
The EOF NvSciSyncFence associated with an NvMediaIEPFeedFrame() operation is an NvSciSyncFence. Its expiry indicates that the corresponding NvMediaIEPFeedFrame() operation has finished.
This function returns the EOF NvSciSyncFence associated with the last NvMediaIEPFeedFrame() call. NvMediaIEPGetEOFNvSciSyncFence() must be called after an NvMediaIEPFeedFrame() call.
For example, in this sequence of code:
expiry of eofnvscisyncfence indicates that the preceding NvMediaIEPFeedFrame() operation has finished.
Usage considerations
[in] | encoder | A pointer to the NvMediaIEP object. Input range: Non-NULL - valid pointer address |
[in] | eofnvscisyncobj | An EOF NvSciSyncObj associated with the NvSciSyncFence which is being requested. Input range: A valid NvSciSyncObj |
[out] | eofnvscisyncfence | A pointer to the EOF NvSciSyncFence. |
NvMediaStatus NvMediaIEPGetVersion | ( | NvMediaVersion * | version | ) |
Retrieves the version information for the NvMedia IEP library.
Usage considerations
[in] | version | A pointer to a NvMediaVersion structure of the client. |
NvMediaStatus NvMediaIEPInit | ( | const NvMediaIEP * | encoder, |
NvMediaIEPType | encodeType, | ||
const void * | initParams, | ||
NvSciBufAttrList | bufAttrList, | ||
uint8_t | maxBuffering, | ||
NvMediaEncoderInstanceId | instanceId | ||
) |
Initialize an NvMediaIEP object instance.
Usage considerations
Initializes an NvMediaIEP object capable of turning a stream of YUV surfaces characterized by NvSciBufAttrList into a compressed bitstream of the specified NvMediaIEPType codec type. Surfaces are fed to the encoder with NvMediaIEPFeedFrame and generated bitstream buffers are retrieved with NvMediaIEPGetBits.
[in] | encoder | A pointer to the NvMediaIEP object. Input range: Non-NULL - valid pointer address |
[in] | encodeType | The video compression standard to be used for encoding Input range: Supported values from NvMediaIEPType enumeration |
[in] | initParams | The encoder initialization parameters Input range: Pointer to a populated encode parameter structures:
|
[in] | bufAttrList | Pointer to a list of reconciled attributes that characterizes the input surface that needs to be encoded Input range: Non-NULL - valid pointer address obtained by a call to NvSciBufObjGetAttrList called with a valid NvSciBufObj that will contain the input content Input range: A valid NvSciBufAttrList |
[in] | maxBuffering | Maximum number of frames outstanding at any given point in time that NvMediaIEP can hold before its output must be retrieved using NvMediaIEPGetBits. If maxBuffering frames worth of encoded bitstream is yet to be retrived, NvMediaIEPFeedFrame returns NVMEDIA_STATUS_INSUFFICIENT_BUFFERING. In this case, encoded output of one or more frames must be retrived with NvMediaIEPGetBits before feeding more frames using NvMediaIEPFeedFrame Input range: The values between 4 and 16, in increments of 1 |
[in] | instanceId | The ID of the NvENC HW engine instance Input range: The following instances are supported:
|
NvMediaStatus NvMediaIEPInsertPreNvSciSyncFence | ( | const NvMediaIEP * | encoder, |
const NvSciSyncFence * | prenvscisyncfence | ||
) |
Sets an NvSciSyncFence as a prefence for an NvMediaIEPFeedFrame() NvSciSyncFence operation.
You must call NvMediaIEPInsertPreNvSciSyncFence() before you call NvMediaIEPFeedFrame(). The NvMediaIEPFeedFrame() operation is started only after the expiry of the prenvscisyncfence.
For example, in this sequence of code:
the NvMediaIEPFeedFrame() operation is assured to start only after the expiry of prenvscisyncfence.
You can set a maximum of NVMEDIA_IEP_MAX_PRENVSCISYNCFENCES prefences by calling NvMediaIEPInsertPreNvSciSyncFence() before NvMediaIEPFeedFrame(). After the call to NvMediaIEPFeedFrame(), all NvSciSyncFences previously inserted by NvMediaIEPInsertPreNvSciSyncFence() are removed, and they are not reused for the subsequent NvMediaIEPFeedFrame() calls.
Usage considerations
[in] | encoder | A pointer to the NvMediaIEP object. Input range: Non-NULL - valid pointer address |
[in] | prenvscisyncfence | A pointer to NvSciSyncFence. Input range: Non-NULL - valid pointer address |
NvMediaStatus NvMediaIEPRegisterNvSciBufObj | ( | NvMediaIEP * | encoder, |
const NvSciBufObj | bufObj | ||
) |
Registers NvSciBufObj for use with a NvMediaIEP handle.
NvMediaIEP handle maintains a record of all the objects registered using this API and only the registered NvSciBufObj handles are accepted when submitted for encoding via NvMediaIEPFeedFrame. Even duplicated NvSciBufObj objects need to be registered using this API prior.
This is a mandatory API on QNX Safety Build to ensure deterministic execution time of NvMediaIEPFeedFrame. Although optional on other platform configurations, it is highly recommended to use this API.
Registration of the bufObj (input) is always with read-only permission.
To ensure deterministic execution time of NvMediaIEPFeedFrame API:
Maximum of 32 NvSciBufObj handles can be registered.
Usage considerations
[in] | encoder | A pointer to the NvMediaIEP object. Input range: Non-NULL - valid pointer address |
[in] | bufObj | NvSciBufObj object Input range: A valid NvSciBufObj |
NvMediaStatus NvMediaIEPRegisterNvSciSyncObj | ( | const NvMediaIEP * | encoder, |
NvMediaNvSciSyncObjType | syncobjtype, | ||
NvSciSyncObj | syncObj | ||
) |
Registers an NvSciSyncObj with NvMediaIEP.
Every NvSciSyncObj (even duplicate objects) used by NvMediaIEP must be registered by a call to this function before it is used. Only the exact same registered NvSciSyncObj can be passed to NvMediaIEPSetNvSciSyncObjforEOF(), NvMediaIEPGetEOFNvSciSyncFence(), or NvMediaIEPUnregisterNvSciSyncObj().
For a given NvMediaIEP handle, one NvSciSyncObj can be registered as one NvMediaNvSciSyncObjType only. For each NvMediaNvSciSyncObjType, a maximum of 16 NvSciSyncObjs can be registered.
Usage considerations
[in] | encoder | A pointer to the NvMediaIEP object. Input range: Non-NULL - valid pointer address |
[in] | syncobjtype | Determines how nvscisync is used by encoder. Input range: Entries in NvMediaNvSciSyncObjType enumeration |
[in] | nvscisync | The NvSciSyncObj to be registered with encoder. Input range: A valid NvSciSyncObj |
NvMediaStatus NvMediaIEPSetConfiguration | ( | NvMediaIEP * | encoder, |
const void * | configuration | ||
) |
Sets the encoder configuration.
The values in the configuration take effect only at the start of the next GOP.
Usage considerations
[in] | encoder | A pointer to the NvMediaIEP object. Input range: Non-NULL - valid pointer address |
[in] | configuration | Configuration data. Input range: Supported configuration structures:
|
NvMediaStatus NvMediaIEPSetNvSciSyncObjforEOF | ( | const NvMediaIEP * | encoder, |
NvSciSyncObj | nvscisyncEOF | ||
) |
Specifies the NvSciSyncObj to be used for an EOF NvSciSyncFence.
To use NvMediaIEPGetEOFNvSciSyncFence(), the application must call NvMediaIEPSetNvSciSyncObjforEOF() before it calls NvMediaIEPFeedFrame().
NvMediaIEPSetNvSciSyncObjforEOF() currently may be called only once before each call to NvMediaIEPFeedFrame(). The application may choose to call this function only once before the first call to NvMediaIEPFeedFrame().
Usage considerations
[in] | encoder | A pointer to the NvMediaIEP object. Input range: Non-NULL - valid pointer address |
[in] | nvscisyncEOF | A registered NvSciSyncObj which is to be associated with EOF NvSciSyncFence. Input range: A valid NvSciSyncObj |
NvMediaStatus NvMediaIEPUnregisterNvSciBufObj | ( | const NvMediaIEP * | encoder, |
const NvSciBufObj | bufObj | ||
) |
Un-registers NvSciBufObj which was previously registered with NvMediaIEP using NvMediaIEPRegisterNvSciBufObj().
For all NvSciBufObj handles registered with NvMediaIEP using NvMediaIEPRegisterNvSciBufObj API, NvMediaIEPUnregisterNvSciBufObj must be called before calling NvMediaIEPDestroy API. For unregistration to succeed, it should be ensured that none of the submitted tasks on the bufObj are pending prior to calling NvMediaIEPUnregisterNvSciBufObj. In order to ensure this, NvMediaIEPGetBits API needs to be called prior to unregistration, until the output of all the submitted tasks are retrieved, following which NvMediaIEPUnregisterNvSciSyncObj should be called on all registered NvSciSyncObj.
This is a mandatory API on QNX Safety Build to ensure deterministic execution time of NvMediaIEPFeedFrame. Although optional on other platform configurations, it is highly recommended to use this API.
To ensure deterministic execution time of NvMediaIEPFeedFrame API:
Usage considerations
[in] | encoder | A pointer to the NvMediaIEP object. Input range: Non-NULL - valid pointer address |
[in] | bufObj | NvSciBufObj object Input range: A valid NvSciBufObj |
NvMediaStatus NvMediaIEPUnregisterNvSciSyncObj | ( | const NvMediaIEP * | encoder, |
NvSciSyncObj | syncObj | ||
) |
Unregisters an NvSciSyncObj with NvMediaIEP.
Every NvSciSyncObj registered with NvMediaIEP by NvMediaIEPRegisterNvSciSyncObj() must be unregistered before calling NvMediaIEPUnregisterNvSciBufObj() to unregister the NvSciBufObjs.
Before the application calls this function, it must ensure that any NvMediaIEPFeedFrame() operation that uses the NvSciSyncObj has completed. If this function is called while NvSciSyncObj is still in use by any NvMediaIEPFeedFrame() operation, the API returns NVMEDIA_STATUS_PENDING to indicate the same. NvSciSyncFenceWait() API can be called on the EOF NvSciSyncFence obtained post the last call to NvMediaIEPFeedFrame() to wait for the associated tasks to complete. The EOF NvSciSyncFence would have been previously obtained via a call to NvMediaIEPGetEOFNvSciSyncFence(). The other option would be to call NvMediaIEPGetBits() till there is no more output to retrieve.
Usage considerations
[in] | encoder | A pointer to the NvMediaIEP object. Input range: Non-NULL - valid pointer address |
[in] | nvscisync | An NvSciSyncObj to be unregistered with encoder. Input range: A valid NvSciSyncObj |