Abstract platform-agnostic base of standalone NVENC encoder. Derived classes perform platform-specific operations.
More...
#include <src/nvenc/nvenc_base.h>
|
virtual bool | create_and_register_input_buffer ()=0 |
| Required. Used for creating outside-facing input surface, registering this surface with nvenc->nvEncRegisterResource() and setting registered_input_buffer variable. Called during create_encoder() .
|
|
virtual bool | init_library ()=0 |
| Required. Used for loading NvEnc library and setting nvenc variable with NvEncodeAPICreateInstance() . Called during create_encoder() if nvenc variable is not initialized.
|
|
uint32_t | min_struct_version (uint32_t version, uint32_t v11_struct_version=0, uint32_t v12_struct_version=0) |
| This function returns the corresponding struct version for the minimum API required by the codec.
|
|
bool | nvenc_failed (NVENCSTATUS status) |
|
virtual bool | synchronize_input_buffer () |
| Optional. Override if you must perform additional operations on the registered input surface in the beginning of encode_frame() . Typically used for interop copy.
|
|
virtual bool | wait_for_async_event (uint32_t timeout_ms) |
| Optional. Override if you want to create encoder in async mode. In this case must also set async_event_handle variable.
|
|
|
void * | async_event_handle = nullptr |
|
void * | device = nullptr |
|
const NV_ENC_DEVICE_TYPE | device_type |
|
void * | encoder = nullptr |
|
struct { | |
|
NV_ENC_BUFFER_FORMAT buffer_format = NV_ENC_BUFFER_FORMAT_UNDEFINED | |
|
uint32_t height = 0 | |
|
uint32_t ref_frames_in_dpb = 0 | |
|
bool rfi = false | |
|
uint32_t width = 0 | |
|
} | encoder_params | |
|
std::string | last_nvenc_error_string |
|
std::shared_ptr< NV_ENCODE_API_FUNCTION_LIST > | nvenc |
|
NV_ENC_REGISTERED_PTR | registered_input_buffer = nullptr |
|
Abstract platform-agnostic base of standalone NVENC encoder. Derived classes perform platform-specific operations.
◆ nvenc_base()
nvenc::nvenc_base::nvenc_base |
( |
NV_ENC_DEVICE_TYPE | device_type | ) |
|
|
explicit |
- Parameters
-
device_type | Underlying device type used by derived class. |
◆ create_and_register_input_buffer()
virtual bool nvenc::nvenc_base::create_and_register_input_buffer |
( |
| ) |
|
|
protectedpure virtual |
Required. Used for creating outside-facing input surface, registering this surface with nvenc->nvEncRegisterResource()
and setting registered_input_buffer
variable. Called during create_encoder()
.
- Returns
true
on success, false
on error
◆ create_encoder()
Create the encoder.
- Parameters
-
config | NVENC encoder configuration. |
client_config | Stream configuration requested by the client. |
colorspace | YUV colorspace. |
buffer_format | Platform-agnostic input surface format. |
- Returns
true
on success, false
on error
◆ encode_frame()
Encode the next frame using platform-specific input surface.
- Parameters
-
frame_index | Frame index that uniquely identifies the frame. Afterwards serves as parameter for invalidate_ref_frames() . No restrictions on the first frame index, but later frame indexes must be subsequent. |
force_idr | Whether to encode frame as forced IDR. |
- Returns
- Encoded frame.
◆ init_library()
virtual bool nvenc::nvenc_base::init_library |
( |
| ) |
|
|
protectedpure virtual |
Required. Used for loading NvEnc library and setting nvenc
variable with NvEncodeAPICreateInstance()
. Called during create_encoder()
if nvenc
variable is not initialized.
- Returns
true
on success, false
on error
Implemented in nvenc::nvenc_d3d11.
◆ invalidate_ref_frames()
bool nvenc::nvenc_base::invalidate_ref_frames |
( |
uint64_t | first_frame, |
|
|
uint64_t | last_frame ) |
Perform reference frame invalidation (RFI) procedure.
- Parameters
-
first_frame | First frame index of the invalidation range. |
last_frame | Last frame index of the invalidation range. |
- Returns
true
on success, false
on error. After error next frame must be encoded with force_idr = true
.
◆ min_struct_version()
uint32_t nvenc::nvenc_base::min_struct_version |
( |
uint32_t | version, |
|
|
uint32_t | v11_struct_version = 0, |
|
|
uint32_t | v12_struct_version = 0 ) |
|
protected |
This function returns the corresponding struct version for the minimum API required by the codec.
Reducing the struct versions maximizes driver compatibility by avoiding needless API breaks.
- Parameters
-
version | The raw structure version from NVENCAPI_STRUCT_VERSION() . |
v11_struct_version | Optionally specifies the struct version to use with v11 SDK major versions. |
v12_struct_version | Optionally specifies the struct version to use with v12 SDK major versions. |
- Returns
- A suitable struct version for the active codec.
◆ synchronize_input_buffer()
virtual bool nvenc::nvenc_base::synchronize_input_buffer |
( |
| ) |
|
|
inlineprotectedvirtual |
Optional. Override if you must perform additional operations on the registered input surface in the beginning of encode_frame()
. Typically used for interop copy.
- Returns
true
on success, false
on error
◆ wait_for_async_event()
virtual bool nvenc::nvenc_base::wait_for_async_event |
( |
uint32_t | timeout_ms | ) |
|
|
inlineprotectedvirtual |
Optional. Override if you want to create encoder in async mode. In this case must also set async_event_handle
variable.
- Parameters
-
timeout_ms | Wait timeout in milliseconds |
- Returns
true
on success, false
on timeout or error
◆ async_event_handle
void* nvenc::nvenc_base::async_event_handle = nullptr |
|
protected |
◆ device
void* nvenc::nvenc_base::device = nullptr |
|
protected |
Platform-specific handle of encoding device. Should be set in constructor or init_library()
.
◆ nvenc
std::shared_ptr<NV_ENCODE_API_FUNCTION_LIST> nvenc::nvenc_base::nvenc |
|
protected |
Function pointers list produced by NvEncodeAPICreateInstance()
. Should be set in init_library()
.
◆ registered_input_buffer
NV_ENC_REGISTERED_PTR nvenc::nvenc_base::registered_input_buffer = nullptr |
|
protected |
The documentation for this class was generated from the following files: