定义 V4L2 视频转换器的辅助类。
使用视频转换器进行色彩空间转换、缩放以及硬件缓冲区内存 (V4L2_MEMORY_MMAP/ V4L2_MEMORY_DMABUF
) 和软件缓冲区内存 (V4L2_MEMORY_USERPTR
) 之间的转换。
视频转换器设备节点为 "/dev/nvhost-vic"
。转换器的类别名称为 "NVVIDCONV"
。
有关转换器的更多信息,请参阅 V4L2 视频转换器。
定义于文件 64 行 NvVideoConverter.h。
公有成员函数 | |
~NvVideoConverter () | |
int | setCapturePlaneFormat (uint32_t pixfmt, uint32_t width, uint32_t height, enum v4l2_nv_buffer_layout type) |
设置转换器输出平面上的格式。 更多... | |
int | setOutputPlaneFormat (uint32_t pixfmt, uint32_t width, uint32_t height, enum v4l2_nv_buffer_layout type) |
设置转换器输出平面上的格式。 更多... | |
int | setOutputPlaneBufferLayout (enum v4l2_nv_buffer_layout type) |
设置输出平面缓冲区的缓冲区布局。 更多... | |
int | setCapturePlaneBufferLayout (enum v4l2_nv_buffer_layout type) |
设置捕获平面缓冲区的缓冲区布局。 更多... | |
int | setInterpolationMethod (enum v4l2_interpolation_method method) |
设置用于缩放的插值(滤波器)方法。 更多... | |
int | setFlipMethod (enum v4l2_flip_method method) |
设置翻转方法。 更多... | |
int | setTnrAlgorithm (enum v4l2_tnr_algorithm algorithm) |
设置要使用的 TNR(时域降噪)算法。 更多... | |
int | setYUVRescale (enum v4l2_yuv_rescale_method method) |
设置要使用的 YUV 重新缩放方法。 更多... | |
int | setCropRect (uint32_t left, uint32_t top, uint32_t width, uint32_t height) |
设置转换器的裁剪矩形。 更多... | |
int | setDestRect (uint32_t left, uint32_t top, uint32_t width, uint32_t height) |
设置转换器的目标矩形。 更多... | |
int | waitForIdle (uint32_t max_wait_ms) |
等待直到输出平面上排队的所有缓冲区都已转换并从捕获平面出队。 更多... | |
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 () |
立即终止排队缓冲区的处理。 更多... | |
void | enableProfiling () |
为 V4l2Element 启用性能分析。 更多... | |
void | getProfilingData (NvElementProfiler::NvElementProfilerData &data) |
获取元素的性能分析数据。 更多... | |
void | printProfilingStats (std::ostream &out_stream=std::cout) |
将元素的性能分析数据打印到输出流。 更多... | |
bool | isProfilingEnabled () |
检查是否为元素启用了性能分析。 更多... | |
静态公有成员函数 | |
static NvVideoConverter * | createVideoConverter (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 |
元素的性能分析器。 更多... | |
NvVideoConverter::~NvVideoConverter | ( | ) |
|
继承自 |
立即终止排队缓冲区的处理。
所有缓冲区都返回给应用程序。
内部在两个平面上调用 VIDIOC_STREAMOFF IOCTL。
|
static |
创建一个名为 name 的新 V4L2 视频转换器对象。
此方法内部在转换器设备节点 "/dev/nvhost-vic"
上调用 v4l2_open
,并检查设备是否具有 V4L2_CAP_VIDEO_M2M_MPLANE
功能。此方法允许调用者指定打开设备时使用的其他标志。
设备以阻塞模式打开,可以通过将 O_NONBLOCK 标志传递给此方法来修改。
|
继承自 |
从元素中出队一个事件。
内部调用 VIDIOC_DQEVENT
IOCTL。调用者可以指定出队事件的最大等待时间。该调用将阻塞,直到事件成功出队或达到超时时间。
[输入/输出] | event | 要填充的 v4l2_event 结构的引用。 |
[输入] | max_wait_ms | 指定出队事件的最大等待时间,以毫秒为单位。 |
|
virtualinherited |
|
继承自 |
获取一个控件的值。
内部调用 VIDIOC_G_CTRL
IOCTL。
[输入] | id | 要获取的控件的 ID。 |
[输出] | value | 对将控制值读入的变量的引用。 |
|
继承自 |
获取多个控件的值。
内部调用 VIDIOC_G_EXT_CTRLS
IOCTL。
[输入/输出] | ctl | 指向要获取的控件的指针。 |
|
继承自 |
获取元素的性能分析数据。
|
virtualinherited |
从 NvElement 重新实现。
|
继承自 |
检查是否为元素启用了性能分析。
|
继承自 |
将元素的性能分析数据打印到输出流。
[输入] | out_stream | 要将数据打印到的 std::ostream 类型的输出流。如果未指定,则采用默认值 std::cout。 |
int NvVideoConverter::setCapturePlaneBufferLayout | ( | enum v4l2_nv_buffer_layout | type | ) |
设置捕获平面缓冲区的缓冲区布局。
内部调用 VIDIOC_S_EXT_CTRLS IOCTL,控制 ID 为 V4L2_CID_VIDEO_CONVERT_CAPTURE_PLANE_LAYOUT。必须在任何平面上调用 setFormat() 之前调用。
[输入] | type | 布局类型,为 v4l2_nv_buffer_layout 枚举类型之一。 |
int NvVideoConverter::setCapturePlaneFormat | ( | uint32_t | pixfmt, |
uint32_t | width, | ||
uint32_t | height, | ||
enum v4l2_nv_buffer_layout | type | ||
) |
设置转换器输出平面上的格式。
内部在捕获平面上调用 VIDIOC_S_FMT
IOCTL。
[输入] | pixfmt | 原始 V4L2 像素格式之一。 |
[输入] | width | 输出缓冲区的宽度,以像素为单位。 |
[输入] | height | 输出缓冲区的高度,以像素为单位。 |
[输入] | type | 平面缓冲区的布局,为 v4l2_nv_buffer_layout 枚举类型之一。 |
|
继承自 |
设置一个控件的值。
内部调用 VIDIOC_S_CTRL
IOCTL。
[输入] | id | 要设置的控件的 ID。 |
[输入] | value | 要在控件上设置的值。 |
int NvVideoConverter::setCropRect | ( | uint32_t | left, |
uint32_t | top, | ||
uint32_t | width, | ||
uint32_t | height | ||
) |
设置转换器的裁剪矩形。
内部在捕获平面上调用 VIDIOC_S_SELECTION。必须在任何平面上调用 setFormat() 之前调用。
[输入] | left | 矩形的水平偏移量,以像素为单位。 |
[输入] | top | 矩形的垂直偏移量,以像素为单位。 |
[输入] | width | 矩形的宽度,以像素为单位。 |
[输入] | height | 矩形的高度,以像素为单位。 |
int NvVideoConverter::setDestRect | ( | uint32_t | left, |
uint32_t | top, | ||
uint32_t | width, | ||
uint32_t | height | ||
) |
设置转换器的目标矩形。
内部在输出平面上调用 VIDIOC_S_SELECTION。必须在任何平面上调用 setFormat() 之前调用。
[输入] | left | 矩形的水平偏移量,以像素为单位 |
[输入] | top | 矩形的垂直偏移量,以像素为单位 |
[输入] | width | 矩形的宽度,以像素为单位 |
[输入] | height | 矩形的高度,以像素为单位 |
|
继承自 |
设置多个控件的值。
内部调用 VIDIOC_S_EXT_CTRLS
IOCTL。
[输入] | ctl | 指向要设置的控件的指针。 |
int NvVideoConverter::setFlipMethod | ( | enum v4l2_flip_method | method | ) |
设置翻转方法。
内部调用 VIDIOC_S_EXT_CTRLS IOCTL,控制 ID 为 V4L2_CID_VIDEO_CONVERT_FLIP_METHOD。必须在任何平面上调用 setFormat() 之前调用。
[输入] | method | 翻转方法类型,为 v4l2_flip_method 枚举类型之一。 |
int NvVideoConverter::setInterpolationMethod | ( | enum v4l2_interpolation_method | method | ) |
设置用于缩放的插值(滤波器)方法。
内部调用 VIDIOC_S_EXT_CTRLS IOCTL,控制 ID 为 V4L2_CID_VIDEO_CONVERT_INTERPOLATION_METHOD。必须在任何平面上调用 setFormat() 之前调用。
[输入] | method | 插值方法类型,为 v4l2_interpolation_method 枚举类型之一。 |
int NvVideoConverter::setOutputPlaneBufferLayout | ( | enum v4l2_nv_buffer_layout | type | ) |
设置输出平面缓冲区的缓冲区布局。
内部调用 VIDIOC_S_EXT_CTRLS IOCTL,控制 ID 为 V4L2_CID_VIDEO_CONVERT_OUTPUT_PLANE_LAYOUT。必须在任何平面上调用 setFormat() 之前调用。
[输入] | type | 布局类型,为 v4l2_nv_buffer_layout 枚举类型之一。 |
int NvVideoConverter::setOutputPlaneFormat | ( | uint32_t | pixfmt, |
uint32_t | width, | ||
uint32_t | height, | ||
enum v4l2_nv_buffer_layout | type | ||
) |
设置转换器输出平面上的格式。
内部在输出平面上调用 VIDIOC_S_FMT
IOCTL。
[输入] | pixfmt | 原始 V4L2 像素格式之一。 |
[输入] | width | 输出缓冲区的宽度,以像素为单位。 |
[输入] | height | 输出缓冲区的高度,以像素为单位。 |
[输入] | type | 平面缓冲区的布局,为 v4l2_nv_buffer_layout 枚举类型之一。 |
int NvVideoConverter::setTnrAlgorithm | ( | enum v4l2_tnr_algorithm | algorithm | ) |
设置要使用的 TNR(时域降噪)算法。
内部调用 VIDIOC_S_EXT_CTRLS IOCTL,控制 ID 为 V4L2_CID_VIDEO_CONVERT_TNR_ALGORITHM。必须在任何平面上调用 setForma() 之前调用。
[输入] | algorithm | TNR 算法类型,为 v4l2_tnr_algorithm 枚举类型之一。 |
int NvVideoConverter::setYUVRescale | ( | enum v4l2_yuv_rescale_method | method | ) |
设置要使用的 YUV 重新缩放方法。
内部调用 VIDIOC_S_EXT_CTRLS IOCTL,控制 ID 为 #V4L2_CID_VIDEO_CONVERT_YUV_RESCALE_METHOD。必须在任何平面上调用 setFormat() 之前调用。
[输入] | method | YUV 重新缩放方法类型,为 v4l2_yuv_rescale_method 枚举类型之一。 |
|
继承自 |
订阅一个 V4L2 事件。
内部调用 VIDIOC_SUBSCRIBE_EVENT
IOCTL。
[输入] | type | 事件类型。 |
[输入] | id | 事件源 ID。 |
[输入] | flags | 事件标志。 |
|
virtual |
等待直到输出平面上排队的所有缓冲区都已转换并从捕获平面出队。
这是一个阻塞调用。
[输入] | max_wait_ms | 最大等待时间,以毫秒为单位 |
从 NvV4l2Element 重新实现。
|
继承自 |
指向应用程序特定数据的指针。
定义于文件 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。