Jetson Linux API 参考

32.7.4 版本
NvVideoDecoder 类参考

详细描述

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

视频解码器设备节点为 /dev/nvhost-nvdec。解码器的类别名称为 "NVDEC"

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

定义于文件 58NvVideoDecoder.h

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

公共成员函数

 ~NvVideoDecoder ()
 
int setCapturePlaneFormat (uint32_t pixfmt, uint32_t width, uint32_t height)
 设置解码器输出平面的格式。 更多...
 
int setOutputPlaneFormat (uint32_t pixfmt, uint32_t sizeimage)
 设置解码器输出平面的格式。 更多...
 
int disableCompleteFrameInputBuffer ()
 告知解码器输入缓冲区可能不包含完整的帧。 更多...
 
int setFrameInputMode (unsigned int ctrl_value)
 告知解码器输入缓冲区可能不包含完整的帧。 更多...
 
int disableDPB ()
 禁用显示图像缓冲区。 更多...
 
int getMinimumCapturePlaneBuffers (int &num)
 获取解码器捕获平面上要请求的最小缓冲区数量。 更多...
 
int setSkipFrames (enum v4l2_skip_frames_type skip_frames)
 设置解码器的跳帧参数。 更多...
 
int setMaxPerfMode (int flag)
 将解码器设置为最大性能模式。 更多...
 
int enableMetadataReporting ()
 启用视频解码器输出元数据报告。 更多...
 
int checkifMasteringDisplayDataPresent (v4l2_ctrl_video_displaydata &displaydata)
 
int MasteringDisplayData (v4l2_ctrl_video_hdrmasteringdisplaydata *hdrmasteringdisplaydata)
 
int getMetadata (uint32_t buffer_index, v4l2_ctrl_videodec_outputbuf_metadata &metadata)
 获取解码的捕获平面缓冲区的元数据。 更多...
 
int getInputMetadata (uint32_t buffer_index, v4l2_ctrl_videodec_inputbuf_metadata &input_metadata)
 获取解码器输出平面缓冲区的元数据。 更多...
 
int getSAR (uint32_t &sar_width, uint32_t &sar_height)
 获取解码器的样本纵横比 (SAR) 宽度和高度。 更多...
 
int DevicePoll (v4l2_ctrl_video_device_poll *devicepoll)
 对设备发出 Poll,该调用会阻塞,直到: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 NvVideoDecodercreateVideoDecoder (const char *name, int flags=0)
 创建一个名为 name 的新 V4L2 视频解码器对象。 更多...
 

数据字段

NvV4l2ElementPlane output_plane
 设置输出平面。 更多...
 
NvV4l2ElementPlane capture_plane
 设置捕获平面。 更多...
 
void * app_data
 指向应用程序特定数据的指针。 更多...
 

保护属性

int fd
 指定使用 v4l2_open 打开的设备的文件描述符 (FD)。 更多...
 
uint32_t output_plane_pixfmt
 输出平面缓冲区的像素格式。 更多...
 
uint32_t capture_plane_pixfmt
 捕获平面缓冲区的像素格式。 更多...
 
int is_in_error
 指示元素操作期间是否遇到错误。 更多...
 
const char * comp_name
 指定组件的名称,用于调试。 更多...
 
NvElementProfiler profiler
 元素的性能分析器。 更多...
 

构造函数 & 析构函数文档

◆ ~NvVideoDecoder()

NvVideoDecoder::~NvVideoDecoder ( )

成员函数文档

◆ abort()

int NvV4l2Element::abort ( )
继承自

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

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

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

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

◆ checkifMasteringDisplayDataPresent()

int NvVideoDecoder::checkifMasteringDisplayDataPresent ( v4l2_ctrl_video_displaydata displaydata)

◆ ClearPollInterrupt()

int NvVideoDecoder::ClearPollInterrupt ( )

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

◆ createVideoDecoder()

static NvVideoDecoder* NvVideoDecoder::createVideoDecoder ( const char *  name,
int  flags = 0 
)
static

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

此方法在内部对解码器设备节点 "/dev/nvhost-nvdec" 调用 v4l2_open,并检查设备上是否具有 V4L2_CAP_VIDEO_M2M_MPLANE 功能。此方法允许调用者指定设备应以哪些附加标志打开。

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

返回值
返回新创建的解码器对象的引用,如果初始化期间失败,则返回 NULL

◆ DevicePoll()

int NvVideoDecoder::DevicePoll ( v4l2_ctrl_video_device_poll devicepoll)

对设备发出 Poll,该调用会阻塞,直到:a) 捕获平面或输出平面有内容出队或有任何事件。

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

◆ disableCompleteFrameInputBuffer()

int NvVideoDecoder::disableCompleteFrameInputBuffer ( )

告知解码器输入缓冲区可能不包含完整的帧。

已弃用的接口,请改用 setFrameInputMode。

在内部使用 Control ID V4L2_CID_MPEG_VIDEO_DISABLE_COMPLETE_FRAME_INPUT 调用 VIDIOC_S_EXT_CTRLS IOCTL。

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

◆ disableDPB()

int NvVideoDecoder::disableDPB ( )

禁用显示图像缓冲区。

在内部使用 Control ID V4L2_CID_MPEG_VIDEO_DISABLE_DPB 调用 VIDIOC_S_EXT_CTRLS IOCTL。必须在两个平面上调用 setFormat 之后以及在任何平面上调用 requestBuffers 之前调用。

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

◆ dqEvent()

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

从元素中出队一个事件。

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

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

◆ enableMetadataReporting()

int NvVideoDecoder::enableMetadataReporting ( )

启用视频解码器输出元数据报告。

在内部使用 Control ID V4L2_CID_MPEG_VIDEO_ERROR_REPORTING 调用 VIDIOC_S_EXT_CTRLS IOCTL。必须在两个平面上调用 setFormat 之后以及在任何平面上调用 requestBuffers 之前调用。

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

◆ enableProfiling()

void NvV4l2Element::enableProfiling ( )
virtualinherited

为 V4l2Element 启用性能分析。

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

NvElement 重新实现。

◆ 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。

◆ getInputMetadata()

int NvVideoDecoder::getInputMetadata ( uint32_t  buffer_index,
v4l2_ctrl_videodec_inputbuf_metadata input_metadata 
)

获取解码器输出平面缓冲区的元数据。

在内部使用 Control ID V4L2_CID_MPEG_VIDEODEC_INPUT_METADATA 调用 VIDIOC_G_EXT_CTRLS IOCTL。必须为已从输出平面出队的缓冲区调用。返回的元数据对应于最后一个出队的缓冲区,索引为 buffer_index

参数
[输入]buffer_index需要其元数据的输出平面缓冲区的索引。
[输入/输出]input_metadata要填充的元数据结构 v4l2_ctrl_videodec_inputbuf_metadata 的引用。
返回值
成功返回 0,否则返回 -1。

◆ getMetadata()

int NvVideoDecoder::getMetadata ( uint32_t  buffer_index,
v4l2_ctrl_videodec_outputbuf_metadata metadata 
)

获取解码的捕获平面缓冲区的元数据。

在内部使用 Control ID V4L2_CID_MPEG_VIDEODEC_METADATA 调用 VIDIOC_G_EXT_CTRLS IOCTL。必须为已从捕获平面出队的缓冲区调用。返回的元数据对应于最后一个出队的缓冲区,索引为 buffer_index

参数
[输入]buffer_index需要其元数据的捕获平面缓冲区的索引。
[输入/输出]metadata要填充的元数据结构 v4l2_ctrl_videodec_outputbuf_metadata 的引用。
返回值
成功返回 0,否则返回 -1。

◆ getMinimumCapturePlaneBuffers()

int NvVideoDecoder::getMinimumCapturePlaneBuffers ( int &  num)

获取解码器捕获平面上要请求的最小缓冲区数量。

在内部使用 Control ID V4L2_CID_MIN_BUFFERS_FOR_CAPTURE 调用 VIDIOC_G_CTRL IOCTL。它在第一个 V4L2_RESOLUTION_CHANGE_EVENT 之后有效,并且可能在每个后续事件之后更改。

参数
[输出]num用于返回缓冲区数量的整数的引用。
返回值
成功返回 0,否则返回 -1。

◆ getProfilingData()

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

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

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

◆ getSAR()

int NvVideoDecoder::getSAR ( uint32_t &  sar_width,
uint32_t &  sar_height 
)

获取解码器的样本纵横比 (SAR) 宽度和高度。

在内部使用 Control ID V4L2_CID_MPEG_VIDEODEC_SAR_WIDTH 和 V4L2_CID_MPEG_VIDEODEC_SAR_HEIGHT 调用 VIDIOC_G_EXT_CTRLS IOCTL。必须在 V4L2_EVENT_RESOLUTION_CHANGE 出队后调用。

参数
[输入/输出]sar_width要填充的 SAR 宽度的引用。
[输入/输出]sar_height要填充的 SAR 高度的引用。
返回值
成功返回 0,否则返回 -1。

◆ isInError()

virtual int NvV4l2Element::isInError ( )
virtualinherited

NvElement 重新实现。

◆ isProfilingEnabled()

bool NvElement::isProfilingEnabled ( )
继承自

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

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

◆ MasteringDisplayData()

int NvVideoDecoder::MasteringDisplayData ( v4l2_ctrl_video_hdrmasteringdisplaydata hdrmasteringdisplaydata)

◆ printProfilingStats()

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

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

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

◆ setCapturePlaneFormat()

int NvVideoDecoder::setCapturePlaneFormat ( uint32_t  pixfmt,
uint32_t  width,
uint32_t  height 
)

设置解码器输出平面的格式。

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

参数
[输入]pixfmt原始 V4L2 像素格式之一。
[输入]width输出缓冲区的宽度(以像素为单位)。
[输入]height输出缓冲区的高度(以像素为单位)。
返回值
成功返回 0,否则返回 -1。

◆ setControl()

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

设置控件的值。

在内部调用 VIDIOC_S_CTRL IOCTL。

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

◆ setExtControls()

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

设置多个控件的值。

在内部调用 VIDIOC_S_EXT_CTRLS IOCTL。

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

◆ setFrameInputMode()

int NvVideoDecoder::setFrameInputMode ( unsigned int  ctrl_value)

告知解码器输入缓冲区可能不包含完整的帧。

在内部使用 Control ID V4L2_CID_MPEG_VIDEO_DISABLE_COMPLETE_FRAME_INPUT 调用 VIDIOC_S_EXT_CTRLS IOCTL。

参数
[输入]ctrl_value用于禁用完整帧输入缓冲区的控件值。
返回值
成功返回 0,否则返回 -1。

◆ setMaxPerfMode()

int NvVideoDecoder::setMaxPerfMode ( int  flag)

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

在内部使用 Control ID V4L2_CID_MPEG_VIDEO_MAX_PERFORMANCE 调用 VIDIOC_S_EXT_CTRLS IOCTL。必须在两个平面上调用 setFormat 之后以及在任何平面上调用 requestBuffers 之前调用。

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

◆ setOutputPlaneFormat()

int NvVideoDecoder::setOutputPlaneFormat ( uint32_t  pixfmt,
uint32_t  sizeimage 
)

设置解码器输出平面的格式。

在输出平面上内部调用 VIDIOC_S_FMT IOCTL。

参数
[输入]pixfmt编码的 V4L2 像素格式之一。
[输入]sizeimage输出平面上缓冲区最大大小,包含编码数据,以字节为单位。
返回值
成功返回 0,否则返回 -1。

◆ SetPollInterrupt()

int NvVideoDecoder::SetPollInterrupt ( )

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

◆ setSkipFrames()

int NvVideoDecoder::setSkipFrames ( enum v4l2_skip_frames_type  skip_frames)

设置解码器的跳帧参数。

在内部使用 Control ID V4L2_CID_MPEG_VIDEO_SKIP_FRAMES 调用 VIDIOC_S_EXT_CTRLS IOCTL。必须在两个平面上调用 setFormat 之后以及在任何平面上调用 requestBuffers 之前调用。

参数
[输入]skip_frames要跳过解码的帧类型,为 enum v4l2_skip_frames_type 之一。
返回值
成功返回 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

等待元素处理完所有输出平面缓冲区。

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

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

NvVideoConverter 中重新实现。

字段文档

◆ app_data

void* NvV4l2Element::app_data
继承自

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

定义于文件 169NvV4l2Element.h

◆ capture_plane

NvV4l2ElementPlane NvV4l2Element::capture_plane
继承自

设置捕获平面。

元素的捕获平面

定义于文件 145NvV4l2Element.h

◆ capture_plane_pixfmt

uint32_t NvV4l2Element::capture_plane_pixfmt
protectedinherited

捕获平面缓冲区的像素格式。

定义于文件 182NvV4l2Element.h

◆ comp_name

const char* NvElement::comp_name
protectedinherited

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

定义于文件 122NvElement.h

◆ fd

int NvV4l2Element::fd
protectedinherited

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

定义于文件 179NvV4l2Element.h

◆ is_in_error

int NvElement::is_in_error
protectedinherited

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

定义于文件 120NvElement.h

引用自 NvElement::isInError()

◆ output_plane

NvV4l2ElementPlane NvV4l2Element::output_plane
继承自

设置输出平面。

元素的输出平面

定义于文件 141NvV4l2Element.h

◆ output_plane_pixfmt

uint32_t NvV4l2Element::output_plane_pixfmt
protectedinherited

输出平面缓冲区的像素格式。

定义于文件 181NvV4l2Element.h

◆ profiler

NvElementProfiler NvElement::profiler
protectedinherited

元素的性能分析器。

定义于文件 124NvElement.h


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