定义 V4L2 视频解码器的辅助类。
视频解码器设备节点为 /dev/nvhost-nvdec。解码器的类别名称为 "NVDEC"。
有关解码器的更多信息,请参阅 V4L2 视频解码器。
定义于文件 58 行 NvVideoDecoder.h。


| 公共成员函数 | |
| ~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 NvVideoDecoder * | createVideoDecoder (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 | ( | ) | 
| 
 | 继承自 | 
立即终止排队缓冲区的处理。
所有缓冲区都将返回给应用程序。
在内部对两个平面调用 VIDIOC_STREAMOFF IOCTL。
| int NvVideoDecoder::checkifMasteringDisplayDataPresent | ( | v4l2_ctrl_video_displaydata & | displaydata | ) | 
| int NvVideoDecoder::ClearPollInterrupt | ( | ) | 
清除轮询中断,现在如果应用程序调用 Poll,设备应阻塞,直到事件被触发,换句话说,轮询被启用。
| 
 | static | 
创建一个名为 name 的新 V4L2 视频解码器对象。
此方法在内部对解码器设备节点 "/dev/nvhost-nvdec" 调用 v4l2_open,并检查设备上是否具有 V4L2_CAP_VIDEO_M2M_MPLANE 功能。此方法允许调用者指定设备应以哪些附加标志打开。
设备以阻塞模式打开,可以通过将 O_NONBLOCK 标志传递给此方法来修改。
| int NvVideoDecoder::DevicePoll | ( | v4l2_ctrl_video_device_poll * | devicepoll | ) | 
对设备发出 Poll,该调用会阻塞,直到:a) 捕获平面或输出平面有内容出队或有任何事件。
b) Poll 被使用 V4L2_CID_SET_POLL_INTERRUPT 调用设备中断 c) 应用程序已通过 V4L2_CID_SET_POLL_INTERRUPT 中断轮询
| int NvVideoDecoder::disableCompleteFrameInputBuffer | ( | ) | 
告知解码器输入缓冲区可能不包含完整的帧。
已弃用的接口,请改用 setFrameInputMode。
在内部使用 Control ID V4L2_CID_MPEG_VIDEO_DISABLE_COMPLETE_FRAME_INPUT 调用 VIDIOC_S_EXT_CTRLS IOCTL。
| int NvVideoDecoder::disableDPB | ( | ) | 
禁用显示图像缓冲区。
在内部使用 Control ID V4L2_CID_MPEG_VIDEO_DISABLE_DPB 调用 VIDIOC_S_EXT_CTRLS IOCTL。必须在两个平面上调用 setFormat 之后以及在任何平面上调用 requestBuffers 之前调用。
| 
 | 继承自 | 
从元素中出队一个事件。
在内部调用 VIDIOC_DQEVENT IOCTL。调用者可以指定出队事件的最长等待时间。调用会阻塞,直到事件成功出队或达到超时时间。
| [输入/输出] | event | 要填充的 v4l2_event结构的引用。 | 
| [输入] | max_wait_ms | 指定出队事件的最大等待时间,以毫秒为单位。 | 
| int NvVideoDecoder::enableMetadataReporting | ( | ) | 
启用视频解码器输出元数据报告。
在内部使用 Control ID V4L2_CID_MPEG_VIDEO_ERROR_REPORTING 调用 VIDIOC_S_EXT_CTRLS IOCTL。必须在两个平面上调用 setFormat 之后以及在任何平面上调用 requestBuffers 之前调用。
| 
 | virtualinherited | 
| 
 | 继承自 | 
获取控件的值。
在内部调用 VIDIOC_G_CTRL IOCTL。
| [输入] | id | 要获取的控件的 ID。 | 
| [输出] | value | 用于读取控件值的变量的引用。 | 
| 
 | 继承自 | 
获取多个控件的值。
在内部调用 VIDIOC_G_EXT_CTRLS IOCTL。
| [输入/输出] | ctl | 指向要获取的控件的指针。 | 
| 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 的引用。 | 
| 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 的引用。 | 
| int NvVideoDecoder::getMinimumCapturePlaneBuffers | ( | int & | num | ) | 
获取解码器捕获平面上要请求的最小缓冲区数量。
在内部使用 Control ID V4L2_CID_MIN_BUFFERS_FOR_CAPTURE 调用 VIDIOC_G_CTRL IOCTL。它在第一个 V4L2_RESOLUTION_CHANGE_EVENT 之后有效,并且可能在每个后续事件之后更改。
| [输出] | num | 用于返回缓冲区数量的整数的引用。 | 
| 
 | 继承自 | 
获取元素的性能分析数据。
| 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 高度的引用。 | 
| 
 | virtualinherited | 
从 NvElement 重新实现。
| 
 | 继承自 | 
检查是否为元素启用了性能分析。
| int NvVideoDecoder::MasteringDisplayData | ( | v4l2_ctrl_video_hdrmasteringdisplaydata * | hdrmasteringdisplaydata | ) | 
| 
 | 继承自 | 
将元素的性能分析数据打印到输出流。
| [输入] | out_stream | 要将数据打印到的 std::ostream 类型的输出流。如果未指定,则采用默认值 std::cout。 | 
| int NvVideoDecoder::setCapturePlaneFormat | ( | uint32_t | pixfmt, | 
| uint32_t | width, | ||
| uint32_t | height | ||
| ) | 
设置解码器输出平面的格式。
在捕获平面上内部调用 VIDIOC_S_FMT IOCTL。
| [输入] | pixfmt | 原始 V4L2 像素格式之一。 | 
| [输入] | width | 输出缓冲区的宽度(以像素为单位)。 | 
| [输入] | height | 输出缓冲区的高度(以像素为单位)。 | 
| 
 | 继承自 | 
设置控件的值。
在内部调用 VIDIOC_S_CTRL IOCTL。
| [输入] | id | 要设置的控件的 ID。 | 
| [输入] | value | 要在控件上设置的值。 | 
| 
 | 继承自 | 
设置多个控件的值。
在内部调用 VIDIOC_S_EXT_CTRLS IOCTL。
| [输入] | ctl | 指向要设置的控件的指针。 | 
| int NvVideoDecoder::setFrameInputMode | ( | unsigned int | ctrl_value | ) | 
告知解码器输入缓冲区可能不包含完整的帧。
在内部使用 Control ID V4L2_CID_MPEG_VIDEO_DISABLE_COMPLETE_FRAME_INPUT 调用 VIDIOC_S_EXT_CTRLS IOCTL。
| [输入] | ctrl_value | 用于禁用完整帧输入缓冲区的控件值。 | 
| int NvVideoDecoder::setMaxPerfMode | ( | int | flag | ) | 
将解码器设置为最大性能模式。
在内部使用 Control ID V4L2_CID_MPEG_VIDEO_MAX_PERFORMANCE 调用 VIDIOC_S_EXT_CTRLS IOCTL。必须在两个平面上调用 setFormat 之后以及在任何平面上调用 requestBuffers 之前调用。
| [输入] | flag | 指示是否启用/禁用最大性能的整数变量。 | 
| int NvVideoDecoder::setOutputPlaneFormat | ( | uint32_t | pixfmt, | 
| uint32_t | sizeimage | ||
| ) | 
设置解码器输出平面的格式。
在输出平面上内部调用 VIDIOC_S_FMT IOCTL。
| [输入] | pixfmt | 编码的 V4L2 像素格式之一。 | 
| [输入] | sizeimage | 输出平面上缓冲区最大大小,包含编码数据,以字节为单位。 | 
| int NvVideoDecoder::SetPollInterrupt | ( | ) | 
设置轮询中断,现在如果应用程序调用 Poll,设备不应阻塞,换句话说,轮询被禁用。
| 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 之一。 | 
| 
 | 继承自 | 
订阅 V4L2 事件。
在内部调用 VIDIOC_SUBSCRIBE_EVENT IOCTL。
| [输入] | type | 事件的类型。 | 
| [输入] | id | 事件源的 ID。 | 
| [输入] | flags | 事件标志。 | 
| 
 | virtualinherited | 
等待元素处理完所有输出平面缓冲区。
扩展 V4l2Element 的对象必须实现此方法,因为空闲条件是组件特定的。
| [输入] | max_wait_ms | 最大等待时间(以毫秒为单位)。 | 
在 NvVideoConverter 中重新实现。
| 
 | 继承自 | 
指向应用程序特定数据的指针。
定义于文件 169 行 NvV4l2Element.h。
| 
 | 继承自 | 
| 
 | protectedinherited | 
捕获平面缓冲区的像素格式。
定义于文件 182 行 NvV4l2Element.h。
| 
 | protectedinherited | 
指定组件的名称,用于调试。
定义于文件 122 行 NvElement.h。
| 
 | protectedinherited | 
指定使用 v4l2_open 打开的设备的文件描述符 (FD)。
定义于文件 179 行 NvV4l2Element.h。
| 
 | protectedinherited | 
| 
 | 继承自 | 
| 
 | protectedinherited | 
输出平面缓冲区的像素格式。
定义于文件 181 行 NvV4l2Element.h。
| 
 | protectedinherited | 
元素的性能分析器。
定义于文件 124 行 NvElement.h。