该驱动程序模拟各种类型的vedio4linux硬件:视频捕获、视频输出、vbi捕获和输出、元数据捕获和输出、无线电接收器和发射器、触摸捕获和软件定义的无线电接收器。此外,还提供了一个简单的帧缓冲设备,用于测试捕获和输出叠加层。最多可以创建64个vivid实例,每个实例最多具有16个输入和16个输出。每个输入可以是网络摄像头、电视捕获设备、S-Video捕获设备或HDMI捕获设备。每个输出可以是S-Video输出设备或HDMI输出设备。这些输入和输出的行为与真实硬件设备完全一样。这使您可以将此驱动程序用作应用程序开发的测试输入,因为您可以测试各种功能,而无需特殊硬件。该文档描述了此驱动程序实现的功能:•支持read/write、MMAP、USERPTR和DMABUF流式输入/输出。•大量的测试模式及其变化列表•工作亮度、对比度、饱和度和色调控件•支持alpha颜色分量•完整的颜色空间支持,包括有限/完整的RGB范围•所有可能的控制类型都存在•支持各种像素长宽比和视频长宽比•错误注入以测试出现错误时会发生什么•可以在任何组合中支持输入和输出的裁剪/合成/缩放•可以模拟高达4K的分辨率•支持所有标准的YUV和RGB格式,包括两种多平面YUV格式•原始和切片的VBI捕获和输出支持•电台接收器和发射器支持,包括RDS支持•软件定义无线电支持•捕获和输出叠加支持•元数据捕获和输出支持•触摸捕获支持下面将更详细地描述这些功能。Configuringthedriver该驱动程序默认创建一个实例,具有视频捕获设备、视频输出设备、一个vbi捕获设备、一个vbi输出设备、一个无线电接收器设备、一个无线电发射器设备和一个SDR设备。可以使用以下模块选项配置实例数、设备数、视频输入和输出及其类型:•n_devs:要创建的驱动程序实例数。默认设置为最多可以创建64个实例。•node_types:每个驱动程序实例应创建哪些设备。一个十六进制值数组,每个实例对应一个值。默认值为0x1d3d。每个值都是一个位掩码,含义如下:-第0位:视频捕获节点-第2-3位:VBI捕获节点:0=无,1=原始VBI,2=切片VBI,3=两者-第4位:无线电接收器节点-第5位:软件定义无线电接收器节点-第8位:视频输出节点-第10-11位:VBI输出节点:0=无,1=原始VBI,2=切片VBI,3=两者-第12位:无线电发射器节点-第16位:用于测试叠加的帧缓冲区-第17位:元数据捕获节点-第18位:元数据输出节点-第19位:触摸捕获节点要创建四个实例,前两个实例仅具有一个视频捕获设备,后两个实例仅具有一个视频输出设备,您需要将这些模块选项传递给vivid:
n_devs=4 node_types=0x1,0x1,0x100,0x100
•num_inputs:每个实例的输入数量。默认情况下,为每个视频捕获设备创建4个输入。最多可以创建16个输入,必须至少有一个。•input_types:每个实例的输入类型,默认值为0xe这定义了在为每个驱动程序实例创建输入时的每个输入类型。这是一个十六进制值,具有多达16对位,每对位将类型映射到输入0,将类型映射到输入30-31将类型映射到输入1每对位的含义如下:-00:这是一个网络摄像头输入-0这是一个电视调谐器输入-这是一个S-Video输入-1这是一个HDMI输入要创建具有8个输入的视频捕获设备,其中输入0是电视调谐器,输入1-3是S-Video输入,而输入4-7是HDMI输入,您需要使用以下模块选项:
num_inputs=8 input_types=0xffa9
•num_outputs:每个实例的输出数量。默认情况下,为每个视频输出设备创建2个输出。最多可创建16个输出,必须至少有一个。•output_types:每个实例的输出类型,默认值为0x0这定义了在为每个驱动程序实例创建输出时的每个输出类型。这是一个十六进制值,具有多达16位,每个位将类型映射到输出0,位1将类型映射到输出位15将类型映射到输出1每个位的含义如下:-0:这是一个S-Video输出-这是一个HDMI输出要创建具有8个输出的视频输出设备,其中输出0-3是S-Video输出,而输出4-7是HDMI输出,您需要使用以下模块选项:
num_outputs=8 output_types=0xf0
•vid_cap_nr:指定每个视频捕获设备所需的videoX起始编号。默认值为-这将仅使用第一个可用编号。这允许您将捕获视频节点映射到特定的videoX设备节点。例如:
n_devs=4 vid_cap_nr=2,4,6,8
$ sudo modprobe vivid n_devs=2 node_types=0x10101,0x1
$ 股票下单接口华宝,v4l2-ctl -d1 --find-fb
/dev/fb1 is the framebuffer associated with base address 0x12800000
$ sudo 股票下单接口华宝,v4l2-ctl -d2 --set-fbuf fb=1
$ v4l2-ctl -d1 --set-fbuf fb=1
$ v4l2-ctl -d0 --set-fmt-video=pixelformat="AR15"
$ v4l2-ctl -d1 --set-fmt-video-out=pixelformat="AR15"
$ v4l2-ctl -d2 --set-fmt-video=pixelformat="AR15"
$ v4l2-ctl -d0 -i2
$ v4l2-ctl -d2 -i2
$ v4l2-ctl -d2 -c horizontal_movement=4
$ v4l2-ctl -d1 --overlay=1
$ v4l2-ctl -d1 -c loop_video=1
$ v4l2-ctl -d2 --stream-mmap --overlay=1
$ v4l2-ctl -d1 --stream-out-mmap
$ qv4l2
开始出流。qv4l2是什么:qv4l2是一个Linux系统下的视频设备调试和测试工具,它基于Qt界面库开发。qv4l2可以查看摄像头和视频设备的属性,并提供简单的界面来控制和修改这些属性。此外,通过qv4l2还可以进行音视频流的播放和录制测试。正如您所看到的,这不是那些心志不坚的人可以胜任的……OutputOverlay注:输出覆盖层主要实现用于测试现有的V4L2输出覆盖API。是否应该为新驱动程序使用此API值得商榷。该驱动程序支持输出覆盖并具有以下功能:•位剪切•列表剪辑•色度键•源色度键•全局alpha•本地alpha•本地反向alpha对于多平面格式,不支持输出覆盖。此外,捕获格式和帧缓冲区的像素格式必须相同,以使覆盖层正常工作。否则,VIDIOC_OVERLAY将返回错误。仅当驱动程序被配置为通过在node_types模块选项中设置标志0x10000来创建帧缓冲区时,才支持输出覆盖层。所创建的帧缓冲区的大小为720x57支持ARGB1:5:5:5和RGB5:6:为了看到各种剪辑、色度键或alpha处理能力的效果,您需要打开视频循环,并在捕获端看到结果。剪辑、色度键或alpha处理能力的使用会显著降低视频循环速度,因为每个像素都需要进行大量的检查。CEC如果存在HDMI输入,则将创建具有相同数量的输入端口的CEC适配器。这相当于例如具有该数量输入的电视。每个HDMI输出也将创建一个CEC适配器,该适配器连接到相应的输入端口,或者根本没有连接。换句话说,这相当于将每个输出设备连接到电视的一个输入端口。任何剩余的输出设备都保持未连接状态。每个输出读取的EDID报告了一个唯一的CEC物理地址,该地址基于输入的EDID的物理地址。如果接收器的EDID具有物理地址0.0,则每个输出将看到包含物理地址0的EDID,其中C为1到输入数量。如果输出比输入多,则其余输出具有已禁用并报告无效物理地址的CEC适配器。SomeFutureImprovements提醒一下,没有特定的顺序:•添加虚拟alsa驱动程序以测试音频•添加虚拟子设备和媒体控制器支持•支持测试压缩视频•添加支持将原始VBI输出循环到原始VBI输入的功能•添加支持将电视滑动VBI输出循环到VBI输入的功能•循环交替场的视频时修复序列/场编号•为视频输出添加V4L2_CID_BG_COLOR支持•添加ARGB888叠加支持:更好地测试alpha通道•通过传递真正的v4l2_fract来改进tpg代码中的像素方面支持•使用每个队列锁和/或每个设备锁以提高吞吐量•添加支持从一个具体的输出到另一个具体的输入在vivid实例之间进行循环•SDR电台应使用与普通无线电接收机相同的“频率”,如果频率与站点频率不匹配,则返回噪声。•为RDS生成创建线程,这将有助于特别是对于“控制”RDSRxI/O模式,因为只读RDS控件可以实时更新。•改变EDID应导致热插拔检测仿真发生。
文章为作者独立观点,不代表股票交易接口观点