定义 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。