Jetson Linux API 参考

32.7.4 版本
NvVideoEncoder 类参考

详细描述

定义 V4L2 视频编码器的辅助类。

视频编码器设备节点是 "/dev/nvhost-msenc"。编码器的类别名称是 "NVENC"

有关编码器的更多信息,请参阅 V4L2 视频编码器

定义于文件 59NvVideoEncoder.h

NvVideoEncoder 的继承关系图
NvVideoEncoder 的协作图

公共成员函数

 ~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 &params)
 为下一个缓冲区设置感兴趣区域 (ROI) 参数,该缓冲区将使用索引 buffer_index 排队到输出平面上。 更多...
 
int enableROI (v4l2_enc_enable_roi_param &params)
 启用外部 ROI。 更多...
 
int enableReconCRC (v4l2_enc_enable_reconcrc_param &params)
 启用重建 CRC。 更多...
 
int enableExternalRPS (v4l2_enc_enable_ext_rps_ctr &params)
 启用外部 RPS。 更多...
 
int enableExternalRC (v4l2_enc_enable_ext_rate_ctr &params)
 启用外部图片 RC。 更多...
 
int enableAV1Tile (v4l2_enc_av1_tile_config &params)
 启用 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 &params)
 为下一个缓冲区设置输入元数据参数,该缓冲区将使用索引 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 NvVideoEncodercreateVideoEncoder (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::~NvVideoEncoder ( )

成员函数文档

◆ abort()

int NvV4l2Element::abort ( )
继承自

立即终止排队缓冲区的处理。

所有缓冲区都返回给应用程序。

在内部的两个平面上调用 VIDIOC_STREAMOFF IOCTL。

返回值
成功返回 0,否则返回 -1。

◆ ClearPollInterrupt()

int NvVideoEncoder::ClearPollInterrupt ( )

清除轮询中断,现在如果应用程序调用 Poll,设备应阻塞,直到事件被触发,换句话说,轮询被启用。

◆ createVideoEncoder()

static NvVideoEncoder* NvVideoEncoder::createVideoEncoder ( const char *  name,
int  flags = 0 
)
static

创建一个名为 name 的新 V4L2 视频编码器对象。

此方法在内部对编码器设备节点 "/dev/nvhost-msenc" 调用 v4l2_open,并检查设备上的 V4L2_CAP_VIDEO_M2M_MPLANE 功能。此方法允许调用者指定打开设备时要使用的其他标志。

设备在阻塞模式下打开,可以通过将 O_NONBLOCK 标志传递给此方法来修改。

返回值
指向新创建的编码器对象的引用,如果在初始化期间失败,则为 NULL。

◆ DevicePoll()

int NvVideoEncoder::DevicePoll ( v4l2_ctrl_video_device_poll devicepoll)

在设备上发出轮询,该轮询会阻塞,直到:a) 要从捕获平面或输出平面或任何事件中出队某些内容。

b) 轮询被使用 V4L2_CID_SET_POLL_INTERRUPT 调用设备中断 c) 应用程序已经通过 V4L2_CID_SET_POLL_INTERRUPT 中断了轮询

◆ dqEvent()

int NvV4l2Element::dqEvent ( struct v4l2_event &  event,
uint32_t  max_wait_ms 
)
继承自

从元素中出队一个事件。

在内部调用 VIDIOC_DQEVENT IOCTL。调用者可以指定出队事件的最大等待时间。该调用会阻塞,直到事件成功出队或达到超时时间。

参数
[输入,输出]event对要填充的 v4l2_event 结构的引用。
[输入]max_wait_ms指定出队事件的最大等待时间,以毫秒为单位。
返回值
成功返回 0,否则返回 -1。

◆ enableAV1Tile()

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 的结构
返回值
成功返回 0,否则返回 -1。

◆ enableExternalRC()

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 的结构
返回值
成功返回 0,否则返回 -1。

◆ enableExternalRPS()

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
返回值
成功返回 0,否则返回 -1。

◆ enableMotionVectorReporting()

int NvVideoEncoder::enableMotionVectorReporting ( )

启用视频编码器输出运动矢量元数据报告。

在内部使用控件 ID V4L2_CID_MPEG_VIDEOENC_METADATA_MV 调用 VIDIOC_S_EXT_CTRLS IOCTL。必须在设置两个平面的格式之后以及在任何平面上 requestBuffers 之前调用。

返回值
成功返回 0,否则返回 -1。

◆ enableProfiling()

void NvV4l2Element::enableProfiling ( )
virtualinherited

为 V4l2Element 启用性能分析。

必须在设置任何平面格式之前调用。

NvElement 重新实现。

◆ enableReconCRC()

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
返回值
成功返回 0,否则返回 -1。

◆ enableROI()

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
返回值
成功返回 0,否则返回 -1。

◆ forceIDR()

int NvVideoEncoder::forceIDR ( )

强制生成 IDR 帧。

在内部使用控件 ID V4L2_CID_MPEG_MFC51_VIDEO_FORCE_FRAME_TYPE 调用 VIDIOC_S_EXT_CTRLS IOCTL。必须在设置两个平面的格式之后调用。

返回值
成功返回 0,否则返回 -1。

◆ getControl()

int NvV4l2Element::getControl ( uint32_t  id,
int32_t &  value 
)
继承自

获取控件的值。

在内部调用 VIDIOC_G_CTRL IOCTL。

参数
[输入]id要获取的控件的 ID。
[输出]value对变量的引用,控件值将读取到该变量中。
返回值
成功返回 0,否则返回 -1。

◆ getExtControls()

int NvV4l2Element::getExtControls ( struct v4l2_ext_controls &  ctl)
继承自

获取多个控件的值。

在内部调用 VIDIOC_G_EXT_CTRLS IOCTL。

参数
[输入,输出]ctl指向要获取的控件的指针。
返回值
成功返回 0,否则返回 -1。

◆ getMetadata()

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 的引用。
返回值
成功返回 0,否则返回 -1。

◆ getMotionVectors()

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 的引用。
返回值
成功返回 0,否则返回 -1。

◆ getProfilingData()

void NvElement::getProfilingData ( NvElementProfiler::NvElementProfilerData data)
继承自

获取元素的性能分析数据。

返回值
对元素性能分析数据的常量引用。

◆ isInError()

virtual int NvV4l2Element::isInError ( )
virtualinherited

NvElement 重新实现。

◆ isProfilingEnabled()

bool NvElement::isProfilingEnabled ( )
继承自

检查是否为元素启用了性能分析。

返回值
布尔值,指示是否启用了性能分析。

◆ printProfilingStats()

void NvElement::printProfilingStats ( std::ostream &  out_stream = std::cout)
继承自

将元素的性能分析数据打印到输出流。

参数
[输入]out_stream要将数据打印到的 std::ostream 类型的输出流。如果未指定,则采用默认值 std::cout。

◆ setAlliFramesEncode()

int NvVideoEncoder::setAlliFramesEncode ( bool  enabled)

启用/禁用全 I 帧编码。

在内部使用控件 ID V4L2_CID_MPEG_VIDEOENC_ENABLE_ALLIFRAME_ENCODE 调用 VIDIOC_S_EXT_CTRLS IOCTL。必须在设置两个平面的格式之后调用。

参数
[输入]enabled布尔值,指示是否启用/禁用控件。
返回值
成功返回 0,否则返回 -1。

◆ setAV1DisableCDFUpdate()

int NvVideoEncoder::setAV1DisableCDFUpdate ( bool  disabled)

在符号解码过程中禁用 AV1 CDF 更新。

在内部使用控件 ID V4L2_CID_MPEG_VIDEOENC_AV1_DISABLE_CDF_UPDATE 调用 VIDIOC_S_EXT_CTRLS IOCTL。值 true 禁用 CDF 更新。必须在设置两个平面的格式之后调用。

参数
[输入]disabled布尔值,指示是否启用/禁用控件。
返回值
成功返回 0,否则返回 -1。

◆ setAV1SsimRdo()

int NvVideoEncoder::setAV1SsimRdo ( bool  enabled)

启用基于 AV1 方差的 SSIM RDO。

在内部使用控件 ID V4L2_CID_MPEG_VIDEOENC_AV1_ENABLE_SSIMRDO 调用 VIDIOC_S_EXT_CTRLS IOCTL。必须在设置两个平面的格式之后调用。

参数
[输入]enabled布尔值,指示是否启用/禁用控件。
返回值
成功返回 0,否则返回 -1。

◆ setBitrate()

int NvVideoEncoder::setBitrate ( uint32_t  bitrate)

设置编码器比特率。

在内部使用控件 ID V4L2_CID_MPEG_VIDEO_BITRATE 调用 VIDIOC_S_EXT_CTRLS IOCTL。可以在设置两个平面的格式之后的任何时间调用。

参数
[输入]bitrate编码流的比特率,以比特每秒为单位。
返回值
成功返回 0,否则返回 -1。

◆ setCABAC()

int NvVideoEncoder::setCABAC ( bool  enabled)

为 H264 启用/禁用 CABAC 熵编码。

在内部使用控件 ID V4L2_CID_MPEG_VIDEO_H264_ENTROPY_MODE 调用 VIDIOC_S_EXT_CTRLS IOCTL。必须在设置两个平面的格式之后调用。

参数
[输入]enabled布尔值,指示是否启用/禁用控件。
返回值
成功返回 0,否则返回 -1。

◆ setCapturePlaneFormat()

int NvVideoEncoder::setCapturePlaneFormat ( uint32_t  pixfmt,
uint32_t  width,
uint32_t  height,
uint32_t  sizeimage 
)

设置转换器捕获平面的格式。

在捕获平面上在内部调用 VIDIOC_S_FMT IOCTL。

参数
[输入]pixfmt编码的 V4L2 像素格式之一。
[输入]width输入缓冲区的宽度(以像素为单位)。
[输入]height输入缓冲区的高度(以像素为单位)。
[输入]sizeimage捕获平面上编码缓冲区的最大大小(以字节为单位)
返回值
成功返回 0,否则返回 -1。

◆ setChromaFactorIDC()

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。
返回值
成功返回 0,否则返回 -1。

◆ setConstantQp()

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布尔值,指示是否启用/禁用控件。
返回值
成功返回 0,否则返回 -1。

◆ setControl()

int NvV4l2Element::setControl ( uint32_t  id,
int32_t  value 
)
继承自

设置控件的值。

在内部调用 VIDIOC_S_CTRL IOCTL。

参数
[输入]id要设置的控件的 ID。
[输入]value要在控件上设置的值。
返回值
成功返回 0,否则返回 -1。

◆ setEncoderCommand()

int NvVideoEncoder::setEncoderCommand ( int  cmd,
int  flags 
)

设置编码器命令。

使用编码器命令在内部调用 VIDIOC_ENCODER_CMD。

返回值
成功返回 0,否则返回 -1。

◆ setExtControls()

int NvV4l2Element::setExtControls ( struct v4l2_ext_controls &  ctl)
继承自

设置多个控件的值。

在内部调用 VIDIOC_S_EXT_CTRLS IOCTL。

参数
[输入]ctl指向要设置的控件的指针。
返回值
成功返回 0,否则返回 -1。

◆ setExtendedColorFormat()

int NvVideoEncoder::setExtendedColorFormat ( bool  enabled)

启用/禁用扩展颜色格式。

在内部使用控件 ID V4L2_CID_MPEG_VIDEOENC_EXTEDED_COLORFORMAT 调用 VIDIOC_S_EXT_CTRLS IOCTL。必须在设置两个平面的格式之后调用。

参数
[输入]enabled布尔值,指示是否启用/禁用控件。
返回值
成功返回 0,否则返回 -1。

◆ setFrameRate()

int NvVideoEncoder::setFrameRate ( uint32_t  framerate_num,
uint32_t  framerate_den 
)

设置编码帧率。

在编码器捕获平面上调用 VIDIOC_S_PARM IOCTL。可以在设置两个平面的格式之后的任何时间调用。

参数
[输入]framerate_num帧率分数的分子部分。
[输入]framerate_den帧率分母部分。
返回值
成功返回 0,否则返回 -1。

◆ setFramesToEncode()

int NvVideoEncoder::setFramesToEncode ( uint32_t  framesToEncode)

设置要编码的帧数。

在内部使用控件 ID #V4L2_CID_MPEG_VIDEO_FRAMES_TO_ENCODE 调用 VIDIOC_S_EXT_CTRLS IOCTL。必须在设置两个平面的格式之后调用。

参数
[输入]framesToEncode设置要编码的帧数。
返回值
成功返回 0,否则返回 -1。

◆ setHWPresetType()

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 之一。
返回值
成功返回 0,否则返回 -1。

◆ setIDRInterval()

int NvVideoEncoder::setIDRInterval ( uint32_t  interval)

设置编码器 IDR 帧间隔。

在内部使用控件 ID V4L2_CID_MPEG_VIDEO_IDR_INTERVAL 调用 VIDIOC_S_EXT_CTRLS IOCTL。必须在设置两个平面的格式之后以及在任何平面上 requestBuffers 之前调用。

参数
[输入]interval两个 IDR 帧之间的间隔,以帧数为单位。
返回值
成功返回 0,否则返回 -1。

◆ setIFrameInterval()

int NvVideoEncoder::setIFrameInterval ( uint32_t  interval)

设置编码器 I 帧间隔。

在内部使用控件 ID V4L2_CID_MPEG_VIDEO_GOP_SIZE 调用 VIDIOC_S_EXT_CTRLS IOCTL。必须在设置两个平面的格式之后以及在任何平面上 requestBuffers 之前调用。

参数
[输入]interval两个 I 帧之间的间隔,以帧数为单位。
返回值
成功返回 0,否则返回 -1。

◆ setInitQP()

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帧初始QPI 帧的 Qp 值。
[输入]P帧初始QPP 帧的 Qp 值。
[输入]BinitQPB 帧的 Qp 值。
返回值
成功返回 0,否则返回 -1。

◆ SetInputMetaParams()

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 结构的参数。
返回值
成功返回 0,否则返回 -1。

◆ setInsertAudEnabled()

int NvVideoEncoder::setInsertAudEnabled ( bool  enabled)

启用/禁用插入 AUD。

内部调用 VIDIOC_S_EXT_CTRLS IOCTL,控制 ID 为 V4L2_CID_MPEG_VIDEO_H264_AUD_SAR_ENABLE。必须在两个 plane 上调用 setFormat 之后调用。

参数
[输入]enabled布尔值,指示是否启用/禁用控件。
返回值
成功返回 0,否则返回 -1。

◆ setInsertSpsPpsAtIdrEnabled()

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布尔值,指示是否启用/禁用控件。
返回值
成功返回 0,否则返回 -1。

◆ setInsertVuiEnabled()

int NvVideoEncoder::setInsertVuiEnabled ( bool  enabled)

启用/禁用插入 VUI。

内部调用 VIDIOC_S_EXT_CTRLS IOCTL,控制 ID 为 V4L2_CID_MPEG_VIDEOENC_INSERT_VUI。必须在两个 plane 上调用 setFormat 之后调用。

参数
[输入]enabled布尔值,指示是否启用/禁用控件。
返回值
成功返回 0,否则返回 -1。

◆ setLevel()

int NvVideoEncoder::setLevel ( uint32_t  level)

设置编码器 level。

内部调用 VIDIOC_S_EXT_CTRLS IOCTL,控制 ID 为 V4L2_CID_MPEG_VIDEO_H264_LEVELV4L2_CID_MPEG_VIDEOENC_H265_LEVEL,具体取决于编码器类型。必须在两个 plane 上调用 setFormat 之后,以及在任何 plane 上调用 requestBuffers 之前调用。

参数
[输入]level用于编码的 Level。
返回值
成功返回 0,否则返回 -1。

◆ setLossless()

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布尔值,指示是否启用/禁用控件。
返回值
成功返回 0,否则返回 -1。

◆ setMaxPerfMode()

int NvVideoEncoder::setMaxPerfMode ( int  flag)

将编码器设置为最大性能模式。

内部调用 VIDIOC_S_EXT_CTRLS IOCTL,控制 ID 为 V4L2_CID_MPEG_VIDEO_MAX_PERFORMANCE。必须在两个 plane 上调用 setFormat 之后,以及在任何 plane 上调用 requestBuffers 之前调用。

参数
[输入]flag指示是否启用/禁用最大性能的整数变量。
返回值
成功返回 0,否则返回 -1。

◆ setNumBFrames()

int NvVideoEncoder::setNumBFrames ( uint32_t  num)

设置 P 帧之间的 B 帧数量。

内部调用 VIDIOC_S_EXT_CTRLS IOCTL,控制 ID 为 V4L2_CID_MPEG_VIDEOENC_NUM_BFRAMES。必须在两个 plane 上调用 setFormat 之后调用。

参数
[输入]numB 帧的数量。
返回值
成功返回 0,否则返回 -1。

◆ setNumReferenceFrames()

int NvVideoEncoder::setNumReferenceFrames ( uint32_t  num_frames)

设置编码器的参考帧数量。

内部调用 VIDIOC_S_EXT_CTRLS IOCTL,控制 ID 为 V4L2_CID_MPEG_VIDEOENC_NUM_REFERENCE_FRAMES。必须在两个 plane 上调用 setFormat 之后调用。

参数
[输入]num_frames参考帧的数量。
返回值
成功返回 0,否则返回 -1。

◆ setOutputPlaneFormat()

int NvVideoEncoder::setOutputPlaneFormat ( uint32_t  pixfmt,
uint32_t  width,
uint32_t  height 
)

设置编码器输出 plane 的格式。

内部在输出 plane 上调用 VIDIOC_S_FMT IOCTL。

先决条件
应用程序必须在使用此方法之前,使用 setCapturePlaneFormat 设置 capture plane 格式。
参数
[输入]pixfmt原始 V4L2 像素格式之一。
[输入]width输入缓冲区的宽度(以像素为单位)。
[输入]height输入缓冲区的高度(以像素为单位)。
返回值
成功返回 0,否则返回 -1。

◆ setPeakBitrate()

int NvVideoEncoder::setPeakBitrate ( uint32_t  peak_bitrate)

设置编码器峰值比特率。

内部调用 VIDIOC_S_EXT_CTRLS IOCTL,控制 ID 为 V4L2_CID_MPEG_VIDEO_BITRATE_PEAK。可以在两个 plane 上调用 setFormat 之后的任何时间调用。在 VBR 模式下生效。

参数
[输入]peak_bitrate编码流的峰值比特率,单位为比特每秒。
返回值
成功返回 0,否则返回 -1。

◆ setPocType()

int NvVideoEncoder::setPocType ( uint32_t  pocType)

设置编码器图像顺序控制类型。

内部调用 VIDIOC_S_EXT_CTRLS IOCTL,控制 ID 为 V4L2_CID_MPEG_VIDEOENC_POC_TYPE。必须在两个 plane 上调用 setFormat 之后,以及在任何 plane 上调用 requestBuffers 之前调用。

参数
[输入]pocType设置编码器的图像顺序计数。
返回值
成功返回 0,否则返回 -1。

◆ SetPollInterrupt()

int NvVideoEncoder::SetPollInterrupt ( )

设置轮询中断,现在如果应用程序调用 Poll,设备不应阻塞,换句话说,轮询被禁用。

◆ setProfile()

int NvVideoEncoder::setProfile ( uint32_t  profile)

设置编码器 profile。

内部调用 VIDIOC_S_EXT_CTRLS IOCTL,控制 ID 为 V4L2_CID_MPEG_VIDEO_H264_PROFILEV4L2_CID_MPEG_VIDEO_H265_PROFILE,具体取决于编码器类型。必须在两个 plane 上调用 setFormat 之后,以及在任何 plane 上调用 requestBuffers 之前调用。

参数
[输入]profile用于编码的 Profile。
返回值
成功返回 0,否则返回 -1。

◆ setQpRange()

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 之后调用。

参数
[输入]MinQpII 帧的最小 Qp 值。
[输入]MaxQpII 帧的最小 Qp 值。
[输入]MinQpPP 帧的最小 Qp 值。
[输入]MaxQpPP 帧的最小 Qp 值。
[输入]MinQpBB 帧的最小 Qp 值。
[输入]MaxQpBB 帧的最小 Qp 值。
返回值
成功返回 0,否则返回 -1。

◆ setRateControlMode()

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 中的一种。
返回值
成功返回 0,否则返回 -1。

◆ setROIParams()

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 结构的参数。
返回值
成功返回 0,否则返回 -1。

◆ setSampleAspectRatioHeight()

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_HEIGHTV4L2_CID_MPEG_VIDEOENC_H265_VUI_EXT_SAR_HEIGHT,具体取决于编码器类型。必须在两个 plane 上调用 setFormat 之后调用。

参数
[输入]sar_heightSAR 高度。
返回值
成功返回 0,否则返回 -1。

◆ setSampleAspectRatioWidth()

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_WIDTHV4L2_CID_MPEG_VIDEOENC_H265_VUI_EXT_SAR_WIDTH,具体取决于编码器类型。必须在两个 plane 上调用 setFormat 之后调用。

参数
[输入]sar_widthSAR 宽度。
返回值
成功返回 0,否则返回 -1。

◆ setSliceIntrarefresh()

int NvVideoEncoder::setSliceIntrarefresh ( uint32_t  interval)

设置 slice 内刷新间隔参数。

内部调用 VIDIOC_S_EXT_CTRLS IOCTL,控制 ID 为 V4L2_CID_MPEG_VIDEOENC_SLICE_INTRAREFRESH_PARAM。必须在两个 plane 上调用 setFormat 之后调用。

参数
[输入]intervalSlice 内刷新间隔,以 slice 数量为单位。
返回值
成功返回 0,否则返回 -1。

◆ setSliceLength()

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 之前调用。

参数
[输入]typeSlice 长度类型,为 enum v4l2_enc_slice_length_type 中的一种。
[输入]lengthSlice 的长度,如果类型为 V4L2_ENC_SLICE_LENGTH_TYPE_BITS,则单位为字节;如果类型为 V4L2_ENC_SLICE_LENGTH_TYPE_MBLK,则单位为宏块数量。
返回值
成功返回 0,否则返回 -1。

◆ setSliceLevelEncode()

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布尔值,指示是否启用/禁用控件。
返回值
成功返回 0,否则返回 -1。

◆ setTemporalTradeoff()

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 中的一种。
返回值
成功返回 0,否则返回 -1。

◆ setVirtualBufferSize()

int NvVideoEncoder::setVirtualBufferSize ( uint32_t  size)

设置编码器的虚拟 buffer 大小。

内部调用 VIDIOC_S_EXT_CTRLS IOCTL,控制 ID 为 V4L2_CID_MPEG_VIDEOENC_VIRTUALBUFFER_SIZE。必须在两个 plane 上调用 setFormat 之后调用。

参数
[输入]size虚拟 buffer 大小,单位为字节。
返回值
成功返回 0,否则返回 -1。

◆ subscribeEvent()

int NvV4l2Element::subscribeEvent ( uint32_t  type,
uint32_t  id,
uint32_t  flags 
)
继承自

订阅 V4L2 事件。

内部调用 VIDIOC_SUBSCRIBE_EVENT IOCTL。

参数
[输入]type事件的类型。
[输入]id事件源的 ID。
[输入]flags事件标志。
返回值
成功返回 0,否则返回 -1。

◆ waitForIdle()

virtual int NvV4l2Element::waitForIdle ( uint32_t  max_wait_ms)
virtualinherited

等待直到 element 处理完所有输出 plane buffer。

扩展 V4l2Element 的对象必须实现此方法,因为空闲条件是组件特定的。

参数
[输入]max_wait_ms最大等待时间,单位为毫秒。
返回值
成功返回 0,否则返回 -1。

NvVideoConverter 中重新实现。

字段文档

◆ app_data

void* NvV4l2Element::app_data
继承自

指向应用程序特定数据的指针。

定义于文件 NvV4l2Element.h 的第 169 行。

◆ capture_plane

NvV4l2ElementPlane NvV4l2Element::capture_plane
继承自

设置 capture plane。

Element 的 Capture plane

定义于文件 NvV4l2Element.h 的第 145 行。

◆ capture_plane_pixfmt

uint32_t NvV4l2Element::capture_plane_pixfmt
protectedinherited

Capture plane buffer 的像素格式。

定义于文件 NvV4l2Element.h 的第 182 行。

◆ comp_name

const char* NvElement::comp_name
protectedinherited

指定组件的名称,用于调试。

定义于文件 NvElement.h 的第 122 行。

◆ fd

int NvV4l2Element::fd
protectedinherited

指定使用 v4l2_open 打开的设备的文件描述符 (FD)。

定义于文件 NvV4l2Element.h 的第 179 行。

◆ is_in_error

int NvElement::is_in_error
protectedinherited

指示 element 操作期间是否遇到错误。

定义于文件 NvElement.h 的第 120 行。

NvElement::isInError() 引用。

◆ output_plane

NvV4l2ElementPlane NvV4l2Element::output_plane
继承自

设置 output plane。

Element 的 Output plane

定义于文件 NvV4l2Element.h 的第 141 行。

◆ output_plane_pixfmt

uint32_t NvV4l2Element::output_plane_pixfmt
protectedinherited

Output plane buffer 的像素格式。

定义于文件 NvV4l2Element.h 的第 181 行。

◆ profiler

NvElementProfiler NvElement::profiler
protectedinherited

Element 的 Profiler。

定义于文件 NvElement.h 的第 124 行。


此类文档由以下文件生成
. All rights reserved.