定义 V4L2 视频编码器的辅助类。
视频编码器设备节点是 "/dev/nvhost-msenc"
。编码器的类别名称是 "NVENC"
。
有关编码器的更多信息,请参阅 V4L2 视频编码器。
定义于文件 59 行 NvVideoEncoder.h。
公共成员函数 | |
~NvVideoEncoder () | |
int | setOutputPlaneFormat (uint32_t pixfmt, uint32_t width, uint32_t height) |
设置编码器输出平面的格式。 更多... | |
int | setCapturePlaneFormat (uint32_t pixfmt, uint32_t width, uint32_t height, uint32_t sizeimage) |
设置转换器捕获平面的格式。 更多... | |
int | setFrameRate (uint32_t framerate_num, uint32_t framerate_den) |
设置编码帧率。 更多... | |
int | setBitrate (uint32_t bitrate) |
设置编码器比特率。 更多... | |
int | setPeakBitrate (uint32_t peak_bitrate) |
设置编码器峰值比特率。 更多... | |
int | setProfile (uint32_t profile) |
设置编码器配置文件。 更多... | |
int | setEncoderCommand (int cmd, int flags) |
设置编码器命令。 更多... | |
int | setLevel (uint32_t level) |
设置编码器级别。 更多... | |
int | setMaxPerfMode (int flag) |
将编码器设置为最大性能模式。 更多... | |
int | setConstantQp (bool enabled_rc) |
为编码器设置恒定 QP。 更多... | |
int | setRateControlMode (enum v4l2_mpeg_video_bitrate_mode mode) |
设置编码器码率控制模式。 更多... | |
int | setIFrameInterval (uint32_t interval) |
设置编码器 I 帧间隔。 更多... | |
int | setIDRInterval (uint32_t interval) |
设置编码器 IDR 帧间隔。 更多... | |
int | forceIDR () |
强制生成 IDR 帧。 更多... | |
int | setTemporalTradeoff (v4l2_enc_temporal_tradeoff_level_type level) |
设置编码器时间权衡。 更多... | |
int | setSliceLength (v4l2_enc_slice_length_type type, uint32_t length) |
设置编码器输出切片长度。 更多... | |
int | setHWPresetType (v4l2_enc_hw_preset_type type) |
设置编码器硬件预设类型。 更多... | |
int | setROIParams (uint32_t buffer_index, v4l2_enc_frame_ROI_params ¶ms) |
为下一个缓冲区设置感兴趣区域 (ROI) 参数,该缓冲区将使用索引 buffer_index 排队到输出平面上。 更多... | |
int | enableROI (v4l2_enc_enable_roi_param ¶ms) |
启用外部 ROI。 更多... | |
int | enableReconCRC (v4l2_enc_enable_reconcrc_param ¶ms) |
启用重建 CRC。 更多... | |
int | enableExternalRPS (v4l2_enc_enable_ext_rps_ctr ¶ms) |
启用外部 RPS。 更多... | |
int | enableExternalRC (v4l2_enc_enable_ext_rate_ctr ¶ms) |
启用外部图片 RC。 更多... | |
int | enableAV1Tile (v4l2_enc_av1_tile_config ¶ms) |
启用 AV1 多瓦片配置。 更多... | |
int | setAV1SsimRdo (bool enabled) |
启用基于 AV1 方差的 SSIM RDO。 更多... | |
int | setAV1DisableCDFUpdate (bool disabled) |
在符号解码过程中禁用 AV1 CDF 更新。 更多... | |
int | SetInputMetaParams (uint32_t buffer_index, v4l2_ctrl_videoenc_input_metadata ¶ms) |
为下一个缓冲区设置输入元数据参数,该缓冲区将使用索引 buffer_index 排队到输出平面上。 更多... | |
int | setVirtualBufferSize (uint32_t size) |
设置编码器的虚拟缓冲区大小。 更多... | |
int | setNumReferenceFrames (uint32_t num_frames) |
设置编码器的参考帧数量。 更多... | |
int | setSliceIntrarefresh (uint32_t interval) |
设置切片内刷新间隔参数。 更多... | |
int | setNumBFrames (uint32_t num) |
设置 B 帧与 P 帧的数量比率。 更多... | |
int | setInsertSpsPpsAtIdrEnabled (bool enabled) |
启用/禁用在每个 IDR 帧处插入 SPS PPS。 更多... | |
int | setCABAC (bool enabled) |
为 H264 启用/禁用 CABAC 熵编码。 更多... | |
int | setSliceLevelEncode (bool enabled) |
为 H264 / HEVC 启用/禁用切片级编码。 更多... | |
int | enableMotionVectorReporting () |
启用视频编码器输出运动矢量元数据报告。 更多... | |
int | getMetadata (uint32_t buffer_index, v4l2_ctrl_videoenc_outputbuf_metadata &enc_metadata) |
获取编码捕获平面缓冲区的元数据。 更多... | |
int | getMotionVectors (uint32_t buffer_index, v4l2_ctrl_videoenc_outputbuf_metadata_MV &enc_mv_metadata) |
获取编码捕获平面缓冲区的运动矢量元数据。 更多... | |
int | setQpRange (uint32_t MinQpI, uint32_t MaxQpI, uint32_t MinQpP, uint32_t MaxQpP, uint32_t MinQpB, uint32_t MaxQpB) |
设置 I/P/B 帧的 QP 值。 更多... | |
int | setSampleAspectRatioWidth (uint32_t sar_width) |
为 VUI 编码设置样本宽高比宽度。 更多... | |
int | setSampleAspectRatioHeight (uint32_t sar_height) |
为 VUI 编码设置样本宽高比高度。 更多... | |
int | setInsertVuiEnabled (bool enabled) |
启用/禁用插入 VUI。 更多... | |
int | setExtendedColorFormat (bool enabled) |
启用/禁用扩展颜色格式。 更多... | |
int | setInsertAudEnabled (bool enabled) |
启用/禁用插入 AUD。 更多... | |
int | setAlliFramesEncode (bool enabled) |
启用/禁用全 I 帧编码。 更多... | |
int | setPocType (uint32_t pocType) |
设置编码器图像顺序控制类型。 更多... | |
int | setInitQP (uint32_t IinitQP, uint32_t PinitQP, uint32_t BinitQP) |
设置 I/P/B 帧的初始 QP。 更多... | |
int | setFramesToEncode (uint32_t framesToEncode) |
设置要编码的帧数。 更多... | |
int | setChromaFactorIDC (uint8_t crfactor) |
设置 H.265 编码器色度格式 IDC。 更多... | |
int | setLossless (bool enabled) |
为 H.264/H.265 设置无损编码。 更多... | |
int | DevicePoll (v4l2_ctrl_video_device_poll *devicepoll) |
在设备上发出轮询,该轮询会阻塞,直到:a) 要从捕获平面或输出平面或任何事件中出队某些内容。 更多... | |
int | SetPollInterrupt () |
设置轮询中断,现在如果应用程序调用 Poll,设备不应阻塞,换句话说,轮询被禁用。 更多... | |
int | ClearPollInterrupt () |
清除轮询中断,现在如果应用程序调用 Poll,设备应阻塞,直到事件被触发,换句话说,轮询被启用。 更多... | |
int | subscribeEvent (uint32_t type, uint32_t id, uint32_t flags) |
订阅 V4L2 事件。 更多... | |
int | dqEvent (struct v4l2_event &event, uint32_t max_wait_ms) |
从元素中出队一个事件。 更多... | |
int | setControl (uint32_t id, int32_t value) |
设置控件的值。 更多... | |
int | getControl (uint32_t id, int32_t &value) |
获取控件的值。 更多... | |
int | setExtControls (struct v4l2_ext_controls &ctl) |
设置多个控件的值。 更多... | |
int | getExtControls (struct v4l2_ext_controls &ctl) |
获取多个控件的值。 更多... | |
virtual int | isInError () |
int | abort () |
立即终止排队缓冲区的处理。 更多... | |
virtual int | waitForIdle (uint32_t max_wait_ms) |
等待直到元素处理完所有输出平面缓冲区。 更多... | |
void | enableProfiling () |
为 V4l2Element 启用性能分析。 更多... | |
void | getProfilingData (NvElementProfiler::NvElementProfilerData &data) |
获取元素的性能分析数据。 更多... | |
void | printProfilingStats (std::ostream &out_stream=std::cout) |
将元素的性能分析数据打印到输出流。 更多... | |
bool | isProfilingEnabled () |
检查是否为元素启用了性能分析。 更多... | |
静态公共成员函数 | |
static NvVideoEncoder * | createVideoEncoder (const char *name, int flags=0) |
创建一个名为 name 的新 V4L2 视频编码器对象。 更多... | |
数据字段 | |
NvV4l2ElementPlane | output_plane |
设置输出平面。 更多... | |
NvV4l2ElementPlane | capture_plane |
设置捕获平面。 更多... | |
void * | app_data |
指向应用程序特定数据的指针。 更多... | |
保护属性 | |
int | fd |
指定使用 v4l2_open 打开的设备的文件描述符。 更多... | |
uint32_t | output_plane_pixfmt |
输出平面缓冲区的像素格式。 更多... | |
uint32_t | capture_plane_pixfmt |
捕获平面缓冲区的像素格式。 更多... | |
int | is_in_error |
指示元素操作期间是否遇到错误。 更多... | |
const char * | comp_name |
指定组件的名称,用于调试。 更多... | |
NvElementProfiler | profiler |
元素的性能分析器。 更多... | |
NvVideoEncoder::~NvVideoEncoder | ( | ) |
|
继承自 |
立即终止排队缓冲区的处理。
所有缓冲区都返回给应用程序。
在内部的两个平面上调用 VIDIOC_STREAMOFF IOCTL。
int NvVideoEncoder::ClearPollInterrupt | ( | ) |
清除轮询中断,现在如果应用程序调用 Poll,设备应阻塞,直到事件被触发,换句话说,轮询被启用。
|
static |
创建一个名为 name 的新 V4L2 视频编码器对象。
此方法在内部对编码器设备节点 "/dev/nvhost-msenc"
调用 v4l2_open
,并检查设备上的 V4L2_CAP_VIDEO_M2M_MPLANE
功能。此方法允许调用者指定打开设备时要使用的其他标志。
设备在阻塞模式下打开,可以通过将 O_NONBLOCK 标志传递给此方法来修改。
int NvVideoEncoder::DevicePoll | ( | v4l2_ctrl_video_device_poll * | devicepoll | ) |
在设备上发出轮询,该轮询会阻塞,直到:a) 要从捕获平面或输出平面或任何事件中出队某些内容。
b) 轮询被使用 V4L2_CID_SET_POLL_INTERRUPT 调用设备中断 c) 应用程序已经通过 V4L2_CID_SET_POLL_INTERRUPT 中断了轮询
|
继承自 |
从元素中出队一个事件。
在内部调用 VIDIOC_DQEVENT
IOCTL。调用者可以指定出队事件的最大等待时间。该调用会阻塞,直到事件成功出队或达到超时时间。
[输入,输出] | event | 对要填充的 v4l2_event 结构的引用。 |
[输入] | max_wait_ms | 指定出队事件的最大等待时间,以毫秒为单位。 |
int NvVideoEncoder::enableAV1Tile | ( | v4l2_enc_av1_tile_config & | params | ) |
启用 AV1 多瓦片配置。
在内部使用控件 ID V4L2_CID_MPEG_VIDEOENC_AV1_TILE_CONFIGURATION 调用 VIDIOC_S_EXT_CTRLS IOCTL。必须在设置两个平面的格式之后以及在任何平面上 requestBuffers
之前调用。
[输入] | params | 要应用的参数,类型为 #v4l2_enc_av1_tile_config 的结构 |
int NvVideoEncoder::enableExternalRC | ( | v4l2_enc_enable_ext_rate_ctr & | params | ) |
启用外部图片 RC。
在内部使用控件 ID V4L2_CID_MPEG_VIDEOENC_ENABLE_EXTERNAL_RATE_CONTROL 调用 VIDIOC_S_EXT_CTRLS IOCTL。必须在请求两个平面上的缓冲区之后调用。
[输入] | params | 要应用于帧的参数,类型为 #v4l2_enc_enable_ext_rate_ctr 的结构 |
int NvVideoEncoder::enableExternalRPS | ( | v4l2_enc_enable_ext_rps_ctr & | params | ) |
启用外部 RPS。
在内部使用控件 ID V4L2_CID_MPEG_VIDEOENC_ENABLE_EXTERNAL_RPS_CONTROL 调用 VIDIOC_S_EXT_CTRLS IOCTL。必须在请求两个平面上的缓冲区之后调用。
[输入] | params | 要应用于帧的参数,类型为 v4l2_enc_enable_ext_rps_ctr |
int NvVideoEncoder::enableMotionVectorReporting | ( | ) |
启用视频编码器输出运动矢量元数据报告。
在内部使用控件 ID V4L2_CID_MPEG_VIDEOENC_METADATA_MV 调用 VIDIOC_S_EXT_CTRLS IOCTL。必须在设置两个平面的格式之后以及在任何平面上 requestBuffers
之前调用。
|
virtualinherited |
int NvVideoEncoder::enableReconCRC | ( | v4l2_enc_enable_reconcrc_param & | params | ) |
启用重建 CRC。
在内部使用控件 ID V4L2_CID_MPEG_VIDEOENC_ENABLE_RECONCRC_PARAM 调用 VIDIOC_S_EXT_CTRLS IOCTL。必须在请求两个平面上的缓冲区之后调用。
[输入] | params | 要应用于帧的参数,类型为 v4l2_enc_enable_reconcrc_param。 |
int NvVideoEncoder::enableROI | ( | v4l2_enc_enable_roi_param & | params | ) |
启用外部 ROI。
在内部使用控件 ID V4L2_CID_MPEG_VIDEOENC_ENABLE_ROI_PARAM 调用 VIDIOC_S_EXT_CTRLS IOCTL。必须在请求两个平面上的缓冲区之后调用。
[输入] | params | 要应用于帧的参数,类型为 v4l2_enc_enable_roi_param。 |
int NvVideoEncoder::forceIDR | ( | ) |
强制生成 IDR 帧。
在内部使用控件 ID V4L2_CID_MPEG_MFC51_VIDEO_FORCE_FRAME_TYPE
调用 VIDIOC_S_EXT_CTRLS IOCTL。必须在设置两个平面的格式之后调用。
|
继承自 |
获取控件的值。
在内部调用 VIDIOC_G_CTRL
IOCTL。
[输入] | id | 要获取的控件的 ID。 |
[输出] | value | 对变量的引用,控件值将读取到该变量中。 |
|
继承自 |
获取多个控件的值。
在内部调用 VIDIOC_G_EXT_CTRLS
IOCTL。
[输入,输出] | ctl | 指向要获取的控件的指针。 |
int NvVideoEncoder::getMetadata | ( | uint32_t | buffer_index, |
v4l2_ctrl_videoenc_outputbuf_metadata & | enc_metadata | ||
) |
获取编码捕获平面缓冲区的元数据。
在内部使用控件 ID V4L2_CID_MPEG_VIDEOENC_METADATA 调用 VIDIOC_S_EXT_CTRLS IOCTL。必须为已从捕获平面出队的缓冲区调用。返回的元数据对应于索引为 buffer_index 的最后一个出队缓冲区。
[输入] | buffer_index | 需要其元数据的捕获平面缓冲区的索引。 |
[输入,输出] | enc_metadata | 对要填充的元数据结构 v4l2_ctrl_videoenc_outputbuf_metadata 的引用。 |
int NvVideoEncoder::getMotionVectors | ( | uint32_t | buffer_index, |
v4l2_ctrl_videoenc_outputbuf_metadata_MV & | enc_mv_metadata | ||
) |
获取编码捕获平面缓冲区的运动矢量元数据。
在内部使用控件 ID V4L2_CID_MPEG_VIDEOENC_METADATA_MV 调用 VIDIOC_S_EXT_CTRLS IOCTL。必须为已从捕获平面出队的缓冲区调用。返回的元数据对应于索引为 buffer_index 的最后一个出队缓冲区。
[输入] | buffer_index | 需要其元数据的捕获平面缓冲区的索引。 |
[输入,输出] | enc_mv_metadata | 对要填充的元数据结构 v4l2_ctrl_videoenc_outputbuf_metadata_MV 的引用。 |
|
继承自 |
获取元素的性能分析数据。
|
virtualinherited |
从 NvElement 重新实现。
|
继承自 |
检查是否为元素启用了性能分析。
|
继承自 |
将元素的性能分析数据打印到输出流。
[输入] | out_stream | 要将数据打印到的 std::ostream 类型的输出流。如果未指定,则采用默认值 std::cout。 |
int NvVideoEncoder::setAlliFramesEncode | ( | bool | enabled | ) |
启用/禁用全 I 帧编码。
在内部使用控件 ID V4L2_CID_MPEG_VIDEOENC_ENABLE_ALLIFRAME_ENCODE
调用 VIDIOC_S_EXT_CTRLS IOCTL。必须在设置两个平面的格式之后调用。
[输入] | enabled | 布尔值,指示是否启用/禁用控件。 |
int NvVideoEncoder::setAV1DisableCDFUpdate | ( | bool | disabled | ) |
在符号解码过程中禁用 AV1 CDF 更新。
在内部使用控件 ID V4L2_CID_MPEG_VIDEOENC_AV1_DISABLE_CDF_UPDATE 调用 VIDIOC_S_EXT_CTRLS IOCTL。值 true 禁用 CDF 更新。必须在设置两个平面的格式之后调用。
[输入] | disabled | 布尔值,指示是否启用/禁用控件。 |
int NvVideoEncoder::setAV1SsimRdo | ( | bool | enabled | ) |
启用基于 AV1 方差的 SSIM RDO。
在内部使用控件 ID V4L2_CID_MPEG_VIDEOENC_AV1_ENABLE_SSIMRDO 调用 VIDIOC_S_EXT_CTRLS IOCTL。必须在设置两个平面的格式之后调用。
[输入] | enabled | 布尔值,指示是否启用/禁用控件。 |
int NvVideoEncoder::setBitrate | ( | uint32_t | bitrate | ) |
设置编码器比特率。
在内部使用控件 ID V4L2_CID_MPEG_VIDEO_BITRATE
调用 VIDIOC_S_EXT_CTRLS IOCTL。可以在设置两个平面的格式之后的任何时间调用。
[输入] | bitrate | 编码流的比特率,以比特每秒为单位。 |
int NvVideoEncoder::setCABAC | ( | bool | enabled | ) |
为 H264 启用/禁用 CABAC 熵编码。
在内部使用控件 ID V4L2_CID_MPEG_VIDEO_H264_ENTROPY_MODE 调用 VIDIOC_S_EXT_CTRLS IOCTL。必须在设置两个平面的格式之后调用。
[输入] | enabled | 布尔值,指示是否启用/禁用控件。 |
int NvVideoEncoder::setCapturePlaneFormat | ( | uint32_t | pixfmt, |
uint32_t | width, | ||
uint32_t | height, | ||
uint32_t | sizeimage | ||
) |
设置转换器捕获平面的格式。
在捕获平面上在内部调用 VIDIOC_S_FMT
IOCTL。
[输入] | pixfmt | 编码的 V4L2 像素格式之一。 |
[输入] | width | 输入缓冲区的宽度(以像素为单位)。 |
[输入] | height | 输入缓冲区的高度(以像素为单位)。 |
[输入] | sizeimage | 捕获平面上编码缓冲区的最大大小(以字节为单位) |
int NvVideoEncoder::setChromaFactorIDC | ( | uint8_t | crfactor | ) |
设置 H.265 编码器色度格式 IDC。
在内部使用控件 ID V4L2_CID_MPEG_VIDEOENC_H265_CHROMA_FACTOR_IDC 调用 VIDIOC_S_EXT_CTRLS IOCTL。必须在设置两个平面的格式之后以及在任何平面上 requestBuffers
之前调用。
[输入] | crfactor | 设置编码器的 chroma_factor_idc。 |
int NvVideoEncoder::setConstantQp | ( | bool | enabled_rc | ) |
为编码器设置恒定 QP。
在内部使用控件 ID V4L2_CID_MPEG_VIDEO_FRAME_RC_ENABLE
调用 VIDIOC_S_EXT_CTRLS IOCTL 以启用/禁用码率控制。如果给定值 false,则禁用 RC 并设置恒定 QP 参数。必须在设置两个平面的格式之后以及在任何平面上 requestBuffers
之前调用。
[输入] | enabled_rc | 布尔值,指示是否启用/禁用控件。 |
|
继承自 |
设置控件的值。
在内部调用 VIDIOC_S_CTRL
IOCTL。
[输入] | id | 要设置的控件的 ID。 |
[输入] | value | 要在控件上设置的值。 |
int NvVideoEncoder::setEncoderCommand | ( | int | cmd, |
int | flags | ||
) |
设置编码器命令。
使用编码器命令在内部调用 VIDIOC_ENCODER_CMD。
|
继承自 |
设置多个控件的值。
在内部调用 VIDIOC_S_EXT_CTRLS
IOCTL。
[输入] | ctl | 指向要设置的控件的指针。 |
int NvVideoEncoder::setExtendedColorFormat | ( | bool | enabled | ) |
启用/禁用扩展颜色格式。
在内部使用控件 ID V4L2_CID_MPEG_VIDEOENC_EXTEDED_COLORFORMAT
调用 VIDIOC_S_EXT_CTRLS IOCTL。必须在设置两个平面的格式之后调用。
[输入] | enabled | 布尔值,指示是否启用/禁用控件。 |
int NvVideoEncoder::setFrameRate | ( | uint32_t | framerate_num, |
uint32_t | framerate_den | ||
) |
设置编码帧率。
在编码器捕获平面上调用 VIDIOC_S_PARM IOCTL。可以在设置两个平面的格式之后的任何时间调用。
[输入] | framerate_num | 帧率分数的分子部分。 |
[输入] | framerate_den | 帧率分母部分。 |
int NvVideoEncoder::setFramesToEncode | ( | uint32_t | framesToEncode | ) |
设置要编码的帧数。
在内部使用控件 ID #V4L2_CID_MPEG_VIDEO_FRAMES_TO_ENCODE 调用 VIDIOC_S_EXT_CTRLS IOCTL。必须在设置两个平面的格式之后调用。
[输入] | framesToEncode | 设置要编码的帧数。 |
int NvVideoEncoder::setHWPresetType | ( | v4l2_enc_hw_preset_type | type | ) |
设置编码器硬件预设类型。
在内部使用控件 ID V4L2_CID_MPEG_VIDEOENC_HW_PRESET_TYPE_PARAM 调用 VIDIOC_S_EXT_CTRLS ioctl。必须在设置两个平面上的 setFormat() 之后以及在任何平面上 requestBuffers
之前调用。
[输入] | type | 硬件预设类型,枚举 v4l2_enc_hw_preset_type_param 之一。 |
int NvVideoEncoder::setIDRInterval | ( | uint32_t | interval | ) |
设置编码器 IDR 帧间隔。
在内部使用控件 ID V4L2_CID_MPEG_VIDEO_IDR_INTERVAL 调用 VIDIOC_S_EXT_CTRLS IOCTL。必须在设置两个平面的格式之后以及在任何平面上 requestBuffers
之前调用。
[输入] | interval | 两个 IDR 帧之间的间隔,以帧数为单位。 |
int NvVideoEncoder::setIFrameInterval | ( | uint32_t | interval | ) |
设置编码器 I 帧间隔。
在内部使用控件 ID V4L2_CID_MPEG_VIDEO_GOP_SIZE
调用 VIDIOC_S_EXT_CTRLS IOCTL。必须在设置两个平面的格式之后以及在任何平面上 requestBuffers
之前调用。
[输入] | interval | 两个 I 帧之间的间隔,以帧数为单位。 |
int NvVideoEncoder::setInitQP | ( | uint32_t | I帧初始QP, |
uint32_t | P帧初始QP, | ||
uint32_t | B帧初始QP | ||
) |
设置 I/P/B 帧的初始 QP。
内部调用 VIDIOC_S_EXT_CTRLS IOCTL,控制 ID 为 V4L2_CID_MPEG_VIDEOENC_INIT_FRAME_QP。必须在两个 plane 上调用 setFormat 之后调用。
[输入] | I帧初始QP | I 帧的 Qp 值。 |
[输入] | P帧初始QP | P 帧的 Qp 值。 |
[输入] | BinitQP | B 帧的 Qp 值。 |
int NvVideoEncoder::SetInputMetaParams | ( | uint32_t | buffer_index, |
v4l2_ctrl_videoenc_input_metadata & | params | ||
) |
为下一个将要在索引为 buffer_index 的输出 plane 上排队的 buffer 设置输入元数据参数。
内部调用 VIDIOC_S_EXT_CTRLS IOCTL,控制 ID 为 V4L2_CID_MPEG_VIDEOENC_INPUT_METADATA。必须在两个 plane 上请求 buffer 之后调用。
[输入] | buffer_index | 应用外部 RC 参数的输出 plane buffer 的索引。 |
[输入] | params | 要应用于帧的参数,类型为 v4l2_ctrl_videoenc_input_metadata 结构的参数。 |
int NvVideoEncoder::setInsertAudEnabled | ( | bool | enabled | ) |
启用/禁用插入 AUD。
内部调用 VIDIOC_S_EXT_CTRLS IOCTL,控制 ID 为 V4L2_CID_MPEG_VIDEO_H264_AUD_SAR_ENABLE
。必须在两个 plane 上调用 setFormat 之后调用。
[输入] | enabled | 布尔值,指示是否启用/禁用控件。 |
int NvVideoEncoder::setInsertSpsPpsAtIdrEnabled | ( | bool | enabled | ) |
启用/禁用在每个 IDR 帧处插入 SPS PPS。
内部调用 VIDIOC_S_EXT_CTRLS IOCTL,控制 ID 为 V4L2_CID_MPEG_VIDEOENC_INSERT_SPS_PPS_AT_IDR。必须在两个 plane 上调用 setFormat 之后调用。
[输入] | enabled | 布尔值,指示是否启用/禁用控件。 |
int NvVideoEncoder::setInsertVuiEnabled | ( | bool | enabled | ) |
启用/禁用插入 VUI。
内部调用 VIDIOC_S_EXT_CTRLS IOCTL,控制 ID 为 V4L2_CID_MPEG_VIDEOENC_INSERT_VUI
。必须在两个 plane 上调用 setFormat 之后调用。
[输入] | enabled | 布尔值,指示是否启用/禁用控件。 |
int NvVideoEncoder::setLevel | ( | uint32_t | level | ) |
设置编码器 level。
内部调用 VIDIOC_S_EXT_CTRLS IOCTL,控制 ID 为 V4L2_CID_MPEG_VIDEO_H264_LEVEL
或 V4L2_CID_MPEG_VIDEOENC_H265_LEVEL,具体取决于编码器类型。必须在两个 plane 上调用 setFormat 之后,以及在任何 plane 上调用 requestBuffers
之前调用。
[输入] | level | 用于编码的 Level。 |
int NvVideoEncoder::setLossless | ( | bool | enabled | ) |
为 H.264/H.265 设置无损编码。
内部调用 VIDIOC_S_EXT_CTRLS IOCTL,控制 ID 为 V4L2_CID_MPEG_VIDEOENC_ENABLE_LOSSLESS。必须在两个 plane 上调用 setFormat 之后,以及在任何 plane 上调用 requestBuffers
之前调用。
[输入] | enabled | 布尔值,指示是否启用/禁用控件。 |
int NvVideoEncoder::setMaxPerfMode | ( | int | flag | ) |
将编码器设置为最大性能模式。
内部调用 VIDIOC_S_EXT_CTRLS IOCTL,控制 ID 为 V4L2_CID_MPEG_VIDEO_MAX_PERFORMANCE。必须在两个 plane 上调用 setFormat 之后,以及在任何 plane 上调用 requestBuffers 之前调用。
[输入] | flag | 指示是否启用/禁用最大性能的整数变量。 |
int NvVideoEncoder::setNumBFrames | ( | uint32_t | num | ) |
设置 P 帧之间的 B 帧数量。
内部调用 VIDIOC_S_EXT_CTRLS IOCTL,控制 ID 为 V4L2_CID_MPEG_VIDEOENC_NUM_BFRAMES。必须在两个 plane 上调用 setFormat 之后调用。
[输入] | num | B 帧的数量。 |
int NvVideoEncoder::setNumReferenceFrames | ( | uint32_t | num_frames | ) |
设置编码器的参考帧数量。
内部调用 VIDIOC_S_EXT_CTRLS IOCTL,控制 ID 为 V4L2_CID_MPEG_VIDEOENC_NUM_REFERENCE_FRAMES。必须在两个 plane 上调用 setFormat 之后调用。
[输入] | num_frames | 参考帧的数量。 |
int NvVideoEncoder::setOutputPlaneFormat | ( | uint32_t | pixfmt, |
uint32_t | width, | ||
uint32_t | height | ||
) |
设置编码器输出 plane 的格式。
内部在输出 plane 上调用 VIDIOC_S_FMT
IOCTL。
[输入] | pixfmt | 原始 V4L2 像素格式之一。 |
[输入] | width | 输入缓冲区的宽度(以像素为单位)。 |
[输入] | height | 输入缓冲区的高度(以像素为单位)。 |
int NvVideoEncoder::setPeakBitrate | ( | uint32_t | peak_bitrate | ) |
设置编码器峰值比特率。
内部调用 VIDIOC_S_EXT_CTRLS IOCTL,控制 ID 为 V4L2_CID_MPEG_VIDEO_BITRATE_PEAK
。可以在两个 plane 上调用 setFormat 之后的任何时间调用。在 VBR 模式下生效。
[输入] | peak_bitrate | 编码流的峰值比特率,单位为比特每秒。 |
int NvVideoEncoder::setPocType | ( | uint32_t | pocType | ) |
设置编码器图像顺序控制类型。
内部调用 VIDIOC_S_EXT_CTRLS IOCTL,控制 ID 为 V4L2_CID_MPEG_VIDEOENC_POC_TYPE。必须在两个 plane 上调用 setFormat 之后,以及在任何 plane 上调用 requestBuffers
之前调用。
[输入] | pocType | 设置编码器的图像顺序计数。 |
int NvVideoEncoder::SetPollInterrupt | ( | ) |
设置轮询中断,现在如果应用程序调用 Poll,设备不应阻塞,换句话说,轮询被禁用。
int NvVideoEncoder::setProfile | ( | uint32_t | profile | ) |
设置编码器 profile。
内部调用 VIDIOC_S_EXT_CTRLS IOCTL,控制 ID 为 V4L2_CID_MPEG_VIDEO_H264_PROFILE
或 V4L2_CID_MPEG_VIDEO_H265_PROFILE,具体取决于编码器类型。必须在两个 plane 上调用 setFormat 之后,以及在任何 plane 上调用 requestBuffers
之前调用。
[输入] | profile | 用于编码的 Profile。 |
int NvVideoEncoder::setQpRange | ( | uint32_t | MinQpI, |
uint32_t | MaxQpI, | ||
uint32_t | MinQpP, | ||
uint32_t | MaxQpP, | ||
uint32_t | MinQpB, | ||
uint32_t | MaxQpB | ||
) |
设置 I/P/B 帧的 QP 值范围。
内部调用 VIDIOC_S_EXT_CTRLS IOCTL,控制 ID 为 V4L2_CID_MPEG_VIDEOENC_QP_RANGE。必须在两个 plane 上调用 setFormat 之后调用。
[输入] | MinQpI | I 帧的最小 Qp 值。 |
[输入] | MaxQpI | I 帧的最小 Qp 值。 |
[输入] | MinQpP | P 帧的最小 Qp 值。 |
[输入] | MaxQpP | P 帧的最小 Qp 值。 |
[输入] | MinQpB | B 帧的最小 Qp 值。 |
[输入] | MaxQpB | B 帧的最小 Qp 值。 |
int NvVideoEncoder::setRateControlMode | ( | enum v4l2_mpeg_video_bitrate_mode | mode | ) |
设置编码器码率控制模式。
内部调用 VIDIOC_S_EXT_CTRLS IOCTL,控制 ID 为 V4L2_CID_MPEG_VIDEO_BITRATE_MODE
。必须在两个 plane 上调用 setFormat 之后,以及在任何 plane 上调用 requestBuffers
之前调用。
[输入] | mode | 码率控制类型,为 enum v4l2_mpeg_video_bitrate_mode 中的一种。 |
int NvVideoEncoder::setROIParams | ( | uint32_t | buffer_index, |
v4l2_enc_frame_ROI_params & | params | ||
) |
为下一个将要在索引为 buffer_index 的输出 plane 上排队的 buffer 设置感兴趣区域 (ROI) 参数。
内部调用 VIDIOC_S_EXT_CTRLS IOCTL,控制 ID 为 V4L2_CID_MPEG_VIDEOENC_ROI_PARAMS。必须在两个 plane 上请求 buffer 之后调用。
[输入] | buffer_index | 应用 ROI 参数的输出 plane buffer 的索引。 |
[输入] | params | 要应用于帧的参数,类型为 v4l2_enc_frame_ROI_params 结构的参数。 |
int NvVideoEncoder::setSampleAspectRatioHeight | ( | uint32_t | sar_height | ) |
为 VUI 编码设置 Sample Aspect Ratio 高度。
内部调用 VIDIOC_S_EXT_CTRLS IOCTL,控制 ID 为 V4L2_CID_MPEG_VIDEO_H264_VUI_EXT_SAR_HEIGHT
或 V4L2_CID_MPEG_VIDEOENC_H265_VUI_EXT_SAR_HEIGHT,具体取决于编码器类型。必须在两个 plane 上调用 setFormat 之后调用。
[输入] | sar_height | SAR 高度。 |
int NvVideoEncoder::setSampleAspectRatioWidth | ( | uint32_t | sar_width | ) |
为 VUI 编码设置 Sample Aspect Ratio 宽度。
内部调用 VIDIOC_S_EXT_CTRLS IOCTL,控制 ID 为 V4L2_CID_MPEG_VIDEO_H264_VUI_EXT_SAR_WIDTH
或 V4L2_CID_MPEG_VIDEOENC_H265_VUI_EXT_SAR_WIDTH,具体取决于编码器类型。必须在两个 plane 上调用 setFormat 之后调用。
[输入] | sar_width | SAR 宽度。 |
int NvVideoEncoder::setSliceIntrarefresh | ( | uint32_t | interval | ) |
设置 slice 内刷新间隔参数。
内部调用 VIDIOC_S_EXT_CTRLS IOCTL,控制 ID 为 V4L2_CID_MPEG_VIDEOENC_SLICE_INTRAREFRESH_PARAM。必须在两个 plane 上调用 setFormat 之后调用。
[输入] | interval | Slice 内刷新间隔,以 slice 数量为单位。 |
int NvVideoEncoder::setSliceLength | ( | v4l2_enc_slice_length_type | type, |
uint32_t | length | ||
) |
设置编码器输出 slice 长度。
内部调用 VIDIOC_S_EXT_CTRLS IOCTL,控制 ID 为 V4L2_CID_MPEG_VIDEOENC_SLICE_LENGTH_PARAM。必须在两个 plane 上调用 setFormat 之后,以及在任何 plane 上调用 requestBuffers
之前调用。
[输入] | type | Slice 长度类型,为 enum v4l2_enc_slice_length_type 中的一种。 |
[输入] | length | Slice 的长度,如果类型为 V4L2_ENC_SLICE_LENGTH_TYPE_BITS,则单位为字节;如果类型为 V4L2_ENC_SLICE_LENGTH_TYPE_MBLK,则单位为宏块数量。 |
int NvVideoEncoder::setSliceLevelEncode | ( | bool | enabled | ) |
为 H264 / HEVC 启用/禁用 Slice 级别编码。
内部调用 VIDIOC_S_EXT_CTRLS IOCTL,控制 ID 为 V4L2_CID_MPEG_VIDEOENC_ENABLE_SLICE_LEVEL_ENCODE。必须在两个 plane 上调用 setFormat 之后调用。
[输入] | enabled | 布尔值,指示是否启用/禁用控件。 |
int NvVideoEncoder::setTemporalTradeoff | ( | v4l2_enc_temporal_tradeoff_level_type | level | ) |
设置编码器时间域权衡。
内部调用 VIDIOC_S_EXT_CTRLS IOCTL,控制 ID 为 V4L2_CID_MPEG_VIDEOENC_TEMPORAL_TRADEOFF_LEVEL。必须在两个 plane 上调用 setFormat 之后,以及在任何 plane 上调用 requestBuffers
之前调用。
[输入] | level | 时间域权衡级别,为 v4l2_enc_temporal_tradeoff_level_type 中的一种。 |
int NvVideoEncoder::setVirtualBufferSize | ( | uint32_t | size | ) |
设置编码器的虚拟 buffer 大小。
内部调用 VIDIOC_S_EXT_CTRLS IOCTL,控制 ID 为 V4L2_CID_MPEG_VIDEOENC_VIRTUALBUFFER_SIZE。必须在两个 plane 上调用 setFormat 之后调用。
[输入] | size | 虚拟 buffer 大小,单位为字节。 |
|
继承自 |
订阅 V4L2 事件。
内部调用 VIDIOC_SUBSCRIBE_EVENT
IOCTL。
[输入] | type | 事件的类型。 |
[输入] | id | 事件源的 ID。 |
[输入] | flags | 事件标志。 |
|
virtualinherited |
等待直到 element 处理完所有输出 plane buffer。
扩展 V4l2Element
的对象必须实现此方法,因为空闲条件是组件特定的。
[输入] | max_wait_ms | 最大等待时间,单位为毫秒。 |
在 NvVideoConverter 中重新实现。
|
继承自 |
指向应用程序特定数据的指针。
定义于文件 NvV4l2Element.h 的第 169 行。
|
继承自 |
|
protectedinherited |
Capture plane buffer 的像素格式。
定义于文件 NvV4l2Element.h 的第 182 行。
|
protectedinherited |
指定组件的名称,用于调试。
定义于文件 NvElement.h 的第 122 行。
|
protectedinherited |
指定使用 v4l2_open
打开的设备的文件描述符 (FD)。
定义于文件 NvV4l2Element.h 的第 179 行。
|
protectedinherited |
|
继承自 |
|
protectedinherited |
Output plane buffer 的像素格式。
定义于文件 NvV4l2Element.h 的第 181 行。
|
protectedinherited |
Element 的 Profiler。
定义于文件 NvElement.h 的第 124 行。