use std::ffi::c_void;
use super::constants::Guid;
#[repr(C)]
pub(super) struct NvEncOpenEncodeSessionExParams {
pub(super) version: u32,
pub(super) device_type: u32,
pub(super) device: *mut c_void,
pub(super) reserved: *mut c_void,
pub(super) api_version: u32,
pub(super) reserved1: [u32; 253],
pub(super) reserved2: [*mut c_void; 64],
}
#[repr(C)]
pub(super) struct NvEncInitializeParams {
pub(super) version: u32,
pub(super) encode_guid: Guid,
pub(super) preset_guid: Guid,
pub(super) encode_width: u32,
pub(super) encode_height: u32,
pub(super) dar_width: u32,
pub(super) dar_height: u32,
pub(super) frame_rate_num: u32,
pub(super) frame_rate_den: u32,
pub(super) enable_encode_async: u32,
pub(super) enable_ptd: u32,
pub(super) flags: u32,
pub(super) priv_data_size: u32,
pub(super) reserved: u32,
pub(super) priv_data: *mut c_void,
pub(super) encode_config: *mut c_void,
pub(super) max_encode_width: u32,
pub(super) max_encode_height: u32,
pub(super) max_me_hint_counts_per_block: [u32; 8],
pub(super) tuning_info: u32,
pub(super) buffer_format: u32,
pub(super) num_state_buffers: u32,
pub(super) output_stats_level: u32,
pub(super) reserved1: [u32; 284],
pub(super) reserved2: [*mut c_void; 64],
}
#[allow(dead_code)]
pub(super) const INIT_BIT_REPORT_SLICE_OFFSETS: u32 = 1 << 0;
#[allow(dead_code)]
pub(super) const INIT_BIT_ENABLE_SUB_FRAME_WRITE: u32 = 1 << 1;
#[allow(dead_code)]
pub(super) const INIT_BIT_ENABLE_EXTERNAL_ME_HINTS: u32 = 1 << 2;
#[allow(dead_code)]
pub(super) const INIT_BIT_ENABLE_ME_ONLY_MODE: u32 = 1 << 3;
#[allow(dead_code)]
pub(super) const INIT_BIT_ENABLE_WEIGHTED_PREDICTION: u32 = 1 << 4;
#[allow(dead_code)]
pub(super) const INIT_BIT_ENABLE_OUTPUT_IN_VIDMEM: u32 = 1 << 9;
#[allow(dead_code)]
pub(super) const INIT_BIT_ENABLE_RECON_FRAME_OUTPUT: u32 = 1 << 10;
#[allow(dead_code)]
pub(super) const INIT_BIT_ENABLE_OUTPUT_STATS: u32 = 1 << 11;
#[allow(dead_code)]
pub(super) const INIT_BIT_ENABLE_UNI_DIRECTIONAL_B: u32 = 1 << 12;
#[repr(C)]
pub(super) struct NvEncRcParams {
pub(super) version: u32,
pub(super) rate_control_mode: u32,
pub(super) const_qp_inter_p: u32,
pub(super) const_qp_inter_b: u32,
pub(super) const_qp_intra: u32,
pub(super) average_bitrate: u32,
pub(super) max_bitrate: u32,
pub(super) vbv_buffer_size: u32,
pub(super) vbv_initial_delay: u32,
pub(super) flags: u32,
pub(super) min_qp_inter_p: u32,
pub(super) min_qp_inter_b: u32,
pub(super) min_qp_intra: u32,
pub(super) max_qp_inter_p: u32,
pub(super) max_qp_inter_b: u32,
pub(super) max_qp_intra: u32,
pub(super) initial_rc_qp_inter_p: u32,
pub(super) initial_rc_qp_inter_b: u32,
pub(super) initial_rc_qp_intra: u32,
pub(super) temporally_layer_bitrate_ratio: [u32; 3],
pub(super) target_quality: u8,
pub(super) target_quality_lsb: u8,
pub(super) lookahead_depth: u16,
pub(super) low_delay_key_frame_scale: u32,
pub(super) qp_map_mode: u32,
pub(super) multi_pass: u32,
pub(super) alpha_layer_bitrate_ratio: u32,
pub(super) cbqpi_ofs: i8,
pub(super) cbqpp_ofs: i8,
pub(super) crqpi_ofs: i8,
pub(super) crqpp_ofs: i8,
pub(super) reserved: [u32; 4],
}
#[repr(C)]
pub(super) struct NvEncConfigAv1 {
pub(super) level: u32,
pub(super) tier: u32,
pub(super) min_part_size: u32,
pub(super) max_part_size: u32,
pub(super) flags: u32,
pub(super) idr_period: u32,
pub(super) intra_refresh_period: u32,
pub(super) intra_refresh_cnt: u32,
pub(super) max_num_ref_frames_in_dpb: u32,
pub(super) num_tile_columns: u32,
pub(super) num_tile_rows: u32,
pub(super) reserved2: u32,
pub(super) tile_widths: *mut u32,
pub(super) tile_heights: *mut u32,
pub(super) max_temporal_layers_minus1: u32,
pub(super) color_primaries: u32,
pub(super) transfer_characteristics: u32,
pub(super) matrix_coefficients: u32,
pub(super) color_range: u32,
pub(super) chroma_sample_position: u32,
pub(super) use_b_frames_as_ref: u32,
pub(super) film_grain_params: *mut c_void,
pub(super) num_fwd_refs: u32,
pub(super) num_bwd_refs: u32,
pub(super) output_bit_depth: u32,
pub(super) input_bit_depth: u32,
pub(super) ltr_num_frames: u32,
pub(super) num_temporal_layers: u32,
pub(super) tf_level: u32,
pub(super) reserved1: [u32; 230],
pub(super) reserved3: [*mut c_void; 62],
}
pub(super) const NV_ENC_BIT_DEPTH_8: u32 = 8;
pub(super) const NV_ENC_BIT_DEPTH_10: u32 = 10;
#[repr(C)]
pub(super) struct NvEncConfigHevcBitDepth {
pub(super) level: u32,
pub(super) tier: u32,
pub(super) min_cu_size: u32,
pub(super) max_cu_size: u32,
pub(super) flags: u32,
pub(super) idr_period: u32,
pub(super) intra_refresh_period: u32,
pub(super) intra_refresh_cnt: u32,
pub(super) max_num_ref_frames_in_dpb: u32,
pub(super) ltr_num_frames: u32,
pub(super) vps_id: u32,
pub(super) sps_id: u32,
pub(super) pps_id: u32,
pub(super) slice_mode: u32,
pub(super) slice_mode_data: u32,
pub(super) max_temporal_layers_minus1: u32,
pub(super) hevc_vui: [u32; 28],
pub(super) ltr_trust_mode: u32,
pub(super) use_b_frames_as_ref: u32,
pub(super) num_ref_l0: u32,
pub(super) num_ref_l1: u32,
pub(super) tf_level: u32,
pub(super) disable_deblocking_filter_idc: u32,
pub(super) output_bit_depth: u32,
pub(super) input_bit_depth: u32,
}
const _: () = assert!(std::mem::offset_of!(NvEncConfigHevcBitDepth, output_bit_depth) == 200);
const _: () = assert!(std::mem::offset_of!(NvEncConfigHevcBitDepth, input_bit_depth) == 204);
pub(super) const AV1_BIT_OUTPUT_ANNEXB_FORMAT: u32 = 1 << 0;
#[allow(dead_code)]
pub(super) const AV1_BIT_ENABLE_TIMING_INFO: u32 = 1 << 1;
pub(super) const AV1_BIT_REPEAT_SEQ_HDR: u32 = 1 << 5;
pub(super) const AV1_CHROMA_FORMAT_IDC_420: u32 = 1 << 7;
#[repr(C)]
pub(super) struct NvEncConfig {
pub(super) version: u32,
pub(super) profile_guid: Guid,
pub(super) gop_length: u32,
pub(super) frame_interval_p: u32,
pub(super) mono_chrome_encoding: u32,
pub(super) frame_field_mode: u32,
pub(super) mv_precision: u32,
pub(super) rc_params: NvEncRcParams,
pub(super) codec_config_av1: NvEncConfigAv1,
pub(super) _codec_config_pad: [u32; 60],
pub(super) reserved: [u32; 278],
pub(super) reserved2: [*mut c_void; 64],
}
#[repr(C)]
pub(super) struct NvEncPresetConfig {
pub(super) version: u32,
pub(super) reserved: u32,
pub(super) preset_cfg: NvEncConfig,
pub(super) reserved1: [u32; 256],
pub(super) reserved2: [*mut c_void; 64],
}
const _: () = assert!(std::mem::size_of::<NvEncOpenEncodeSessionExParams>() == 1552);
const _: () = assert!(std::mem::size_of::<NvEncInitializeParams>() == 1800);
const _: () = assert!(std::mem::size_of::<NvEncRcParams>() == 128);
const _: () = assert!(std::mem::size_of::<NvEncConfigAv1>() == 1552);
const _: () = assert!(std::mem::size_of::<NvEncConfig>() == 3584);
const _: () = assert!(std::mem::size_of::<NvEncPresetConfig>() == 5128);