Author:JonathanCorbet
$ mplayer tv:// -tv driver=v4l2:width=640:height=480 -nosound
$ mplayer tv:// -tv driver=v4l2:width=640:height=480:outfmt=bgr16 -nosound
"xawtv"工具可用;gqcam因未知原因无法使用。
Loadtimeoptions有一些加载时选项,大多数可以在加载后通过sysfs进行更改:•alloc_bufs_at_load:默认情况下,驱动程序不会在传输数据之前分配任何DMA缓冲区。如果设置了此选项,则会在模块加载时分配最坏情况大小的缓冲区。此选项将为模块的生命周期锁定内存,但可能会减少以后分配失败的机会。•dma_buf_size:要分配的DMA缓冲区的大小。请注意,此选项仅在加载时进行咨询;当在运行时分配缓冲区时,它们将根据当前相机设置适当地调整大小。•n_dma_bufs:控制器可以循环使用两个或三个DMA缓冲区。驱动程序尝试使用三个缓冲区;在更快的系统上,仅使用两个缓冲区也可以正常工作。•min_buffers:驱动程序将同意使用的最小流式I/O缓冲区数。默认值为但在较慢的系统上,将其设置为更高的值可以实现与mplayer更好的行为。•max_buffers:流式I/O缓冲区的最大数量;默认值为该数字是仔细挑选出来的,不应认为实际上表示太多东西。•flip:如果设置了此布尔参数,则会指示传感器反转视频像。是否有意义取决于您的特定摄像头安装方式。
3Thecpia2driverIntroduction这是STMicroelectronics的CPiA2摄像头的驱动程序。该摄像头以最高vga尺寸输出MJPEG流。它尽可能实现了Video4Linux接口。由于V4L接口不支持压缩格式,因此只能使用启用mjpeg的应用程序与摄像头一起使用。我们修改了gqcam应用程序以查看此流。该驱动程序实现为两个内核模块。cpia2模块包含相机功能和V4L接口。cpia2_usb模块包含usb特定功能。这样做的主要原因是模块的大小越来越大,因此我将它们分开。不太可能会有并行端口版本。
Features该驱动程序支持具有Visionstv6410和stv6500CMOS传感器的相机。我只有vga传感器,因此无法测试另一个。像格式:VGA、QVGA、CIF、QCIF和介于一些大小之间的多个尺寸。VGA和QVGA是VGA相机的本地像尺寸。CIF在协处理器中通过缩放QVGA完成。所有其他尺寸都通过剪裁完成。调色板:YCrCb,使用MJPEG压缩。可以设置一些压缩参数。传感器帧速率可调节。在流媒体时可调节亮度、颜色、对比度。可设置50或60赫兹的闪烁控制。CIF像分辨率:CIF全称为CommonIntermediateFormat,通用中间格式,是一种标准的视频格式之具体指:352*288像素,每秒钟25帧,每帧有24位色深的视频。这种格式主要适用于采集于VCD,SVCD等标准普及设计,是一种标准的视频压缩技术。VGA像分辨率:VGA是IBM于1987年为其PS/2系列计算机创建的一种模拟视频标准。现在,电脑行业已经扩展了这个标准,并将它包含在数百万个产品中。对于分辨率,VGA最高支持640x480,每秒钟60Hz或70Hz的刷新率。
Makingandinstallingthestv672drivermodulesRequirementsVideo4Linux必须作为内核的一部分进行编译,或者作为一个模块可用。Video4Linux2会在编译时自动被检测到并可用。
Setup使用"modprobecpia2"命令进行加载,使用"modprobe-rcpia2"命令进行卸载。这可能会被您的发行版自动完成。
Settingtheoptions如果您正在使用模块,编辑/etc/modules.conf文件,并添加像这样的选项行:
options cpia2 num_buffers=3 buffer_size=65535
如果驱动程序被编译进内核中,在启动时可以像这样指定它们:
cpia2.num_buffers=3 cpia2.buffer_size=65535
WhatbuffffersizeshouldIuse?像的最大尺寸取决于您选择的备用方案以及相机实现的帧率。如果压缩引擎能够跟上帧率,最大像大小如下表所示。
压缩引擎从最大压缩开始,会增加像质量,直到接近表格中的尺寸。只要压缩引擎能够跟上帧速率,在短时间内,所有像的大小都将大约为表中的大小,而不管分辨率如何。在低交替设置下,压缩引擎可能无法压缩像到足够小的尺寸,因此需要通过生成较大的像来降低帧率。默认值68k对于大多数用户应该是足够的,这将处理任何备用方案,帧速率可达15fps。对于更低的帧速率,可能需要增加缓冲区大小,以避免由于空间不足而丢失帧。
HowmanybuffffersshouldIuse?对于正常流媒体,使用3个缓冲区应该可以获得最佳的结果。如果只使用2个缓冲区,相机发送完一个像后,程序可能刚好开始读取另一个像。如果发生这种情况,驱动程序必须删除一帧。但如果您的计算机负载过重,可以使用2个缓冲区。在这种情况下,您可能没有以全帧速率进行读取。如果相机能够在读取完成之前发送多个像,则它可能会在读取完成之前覆盖第三个缓冲区,从而导致像损坏。单缓冲和双缓冲具有额外的检查以避免覆盖。
4Thecx88driverAuthor:GerdHoffffmannThisisav4l2devicedriverforthecx2388xchip.Currentstatusvideo•Works.•不支持置顶显示audio•Works.电视标准检测由驱动程序执行,因为硬件自动检测存在缺陷。•通过cx88-alsa支持音频数据DMA。vbi•Works.vbi是什么:VBI是指垂直消隐区域,是指电视信号中每一帧的顶部和底部之间可视部分之外的黑色区域,它主要用于传输其他视频信息,如字幕、时间戳等。
Howtoaddsupportfornewcards驱动程序需要一些有关TV卡的配置信息。这些信息在cx88-cards.c中。如果驱动程序运行不良,则可能需要在该文件中为您的卡添加新条目。使用dmesg检查内核日志以查看驱动程序是否识别您的卡。日志中会显示像这样的一行:
cx8800[0]: subsystem: 0070:3400, board: Hauppauge WinTV
34xxx models [card=1,autodetected]
如果您的卡被列为“board:UNKNOWN/GENERIC”,则驱动程序无法识别它。那么应该怎么办呢?尝试升级到最新的快照版本,也许之间已经添加了。您可以尝试自己创建一个新条目,请查看cx88-cards.c。如果成功了,请用统一的差异格式给我们发电子邮件您所做的更改。或者您可以将配置信息发送给我们。我们需要至少以下信息才能添加卡:•PCISubsystemID。•该卡使用的调谐器类型。您可以尝试使用tuner=
5TheVPBEV4L2driverdesignFunctionalpartitioning该系统由以下部分组成:V4L2显示驱动程序实现了创建video2和video3设备节点,并提供v4l2设备接口来管理VID0和VID1层。显示控制器加载了VENC、OSD和外部编码器。它提供一组API调用到V4L2驱动程序,以设置VENC或外部子设备中的输出/标准。它还提供了一个设备对象,以使用子设备操作从OSD子设备访问服务。在默认输出和标准选择或运行时应用程序通过V4L2IOCTL更改输出时,将在初始化时间基于这些设置将外部编码器连接到VENCLCD控制器端口。当连接到外部编码器时,vpbe控制器还负责根据板级特定设置设置VENC和外部编码器之间的接口。这使得可以与ths8200等外部编码器进行接口处理。setup_if_config也为此实施了configure_venc,以设置特定显示分辨率的VENC定时。作为这个patch系列的一部分,外部编码器的连接、使能和设置是不存在的,它们将成为下一个patch系列的一部分。VENC子设备模块负责在连接到端口或需要LCD面板定时的端口时设置由内部DAC提供的输出并设置VENC中的定时。当连接外部编码器/LCD面板时,从特定于板的表中检索特定标准/预设的定时,然后使用这些值在venc中设置定时,使用非标准定时模式。支持使用VENC的LCD面板显示。例如,要支持LogicPD显示,需要使用支持的分辨率设置LCD控制器端口,并设置点时钟。我们可以将可用输出作为特定于板的条目添加。可以在特定于板的设置文件中维护各种支持的LCD显示器的定时表以支持各种LCD显示器。目前,该patch的基本驱动程序是存在的,对外部编码器和显示的支持将成为下一个patch系列的一部分。OSD模块OSD模块实现所有OSD层管理和硬件特定功能。VPBE模块与OSD交互,以启用和禁用OSD的相应功能。视频里OSD是什么:在视频中,OSD是指"OnScreenDisplay",即屏幕显示。它是一个用户界面元素,通过在屏幕上显示信息来增强用户体验,例如在电视、摄像机和监视器等设备上显示当前频道、时间和其他参数等信息。
Currentstatus现已提供一个完全功能齐备、可用的V4L2驱动程序版本。该驱动程序已经通过NTSC和PAL标准以及缓冲流测试验证过了。
SupportedfeaturesFIMC设备支持以下特性:-相机并行接口采集;-相机串行接口采集;-存储到存储器的处理;-可在运行时进行动态管道重新配置;-运行时电源管理和系统范围挂起/恢复。
Notcurrentlysupported-LCD回写输入-每帧时钟门控
UserspaceinterfacesMediadeviceinterface该驱动程序支持媒体控制器API,遵循第四部分-媒体控制器API的定义。媒体设备驱动程序名为“SamsungS5PFIMC”。该接口的目的是允许在运行时更改将FIMC实例分配给SoC外围相机输入的方式,并可选地控制MIPI-CSIS设备与FIMC实体之间的内部连接。通过媒体设备接口,可以配置SoC通过多个FIMC实例来捕获传感器的像数据。可以通过启用/禁用驱动程序在初始化期间创建的媒体连接来重新配置。内部设备拓扑可以通过媒体实体和链接枚举轻松发现。
Memory-to-memoryvideonodeV4L2内存到内存接口在`/dev/video?`设备节点上。这是一个独立的视频设备,它没有媒体端口。但请注意,不允许在同一FIMC实例上同时使用内存到内存节点和捕获视频节点。驱动程序会检测这些情况,但应用程序应该避免这种未定义行为。
Cameracapturesubdevs每个FIMC实例都会导出一个子设备节点,每个可用的并在平台级别启用的MIPI-CSI接收器设备也会创建一个子设备节点。
sysfs为了通过子设备API实现更精确的相机管道控制,驱动程序创建了一个与“s5p-fimc-md”平台设备关联的sysfs条目。该条目路径为:`/sys/platform/devices/s5p-fimc-md/subdev_conf_mode`。在典型的用例中,可能存在以下捕获管道配置:传感器子设备->mipi-csi子设备->fimc子设备->视频节点。当我们通过用户空间的子设备API配置这些设备时,配置流必须从左到右进行,视频节点配置为最后一个。当我们不使用子设备用户空间API时,所有属于管道的设备的整个配置都由视频节点驱动程序完成。sysfs条目允许指示捕获节点驱动程序不配置子设备,以避免在视频节点上执行最后一个配置步骤时重置子设备的配置。为了完全支持子设备控制:
# echo "sub-dev" > /sys/platform/devices/s5p-fimc-md/subdev_conf_mode
对于V4L2视频节点控制而言:
# echo "vid-dev" > /sys/platform/devices/s5p-fimc-md/subdev_conf_mode
这是默认选项。
Devicemappingtovideoandsubdevdevicenodes每个硬件设备实例都有两个关联的视频设备节点-视频捕获和mem-to-mem,另外还有一个用于更精确的FIMC捕获子系统控制的子设备节点。此外,每个MIPI-CSIS设备都会创建一个单独的v4l2子设备节点。如何查找哪个/dev/video?或/dev/v4l-subdev?分配给了哪个设备?你可以通过grepkernel日志中的相关信息来查找,例如:
# dmesg | grep -i fimc
请注意,udev可能仍然重新排列了视频节点,你可以从`/dev/media?`中使用`media-ctl`工具检索信息:
# media-ctl -p
Build如果将驱动程序构建为可加载的内核模块,则会创建两个模块:s5p-fimc.ko和可选的s5p-csis.ko。
文章为作者独立观点,不代表股票交易接口观点