9.1.13. Zoran 驱动程序¶
统一的 zoran 驱动程序 (zr360x7, zoran, buz, dc10(+), dc30(+), lml33)
网站: http://mjpeg.sourceforge.net/driver-zoran/
9.1.13.1. 常见问题¶
9.1.13.2. 支持哪些卡¶
Iomega Buz, Linux Media Labs LML33/LML33R10, Pinnacle/Miro DC10/DC10+/DC30/DC30+ 和相关板(以各种名称提供)。
9.1.13.2.1. Iomega Buz¶
Zoran zr36067 PCI 控制器
Zoran zr36060 MJPEG 编解码器
Philips saa7111 电视解码器
Philips saa7185 电视编码器
要使用的驱动程序:videodev, i2c-core, i2c-algo-bit, videocodec, saa7111, saa7185, zr36060, zr36067
输入/输出:复合和 S-video
规范:PAL, SECAM (720x576 @ 25 fps), NTSC (720x480 @ 29.97 fps)
卡号:7
9.1.13.2.2. AverMedia 6 Eyes AVS6EYES¶
Zoran zr36067 PCI 控制器
Zoran zr36060 MJPEG 编解码器
Samsung ks0127 电视解码器
Conexant bt866 电视编码器
要使用的驱动程序:videodev, i2c-core, i2c-algo-bit, videocodec, ks0127, bt866, zr36060, zr36067
- 输入/输出
六个物理输入。 1-6 是复合的,1-2、3-4、5-6 兼作 S-video,1-3 兼作分量。 一个复合输出。
规范:PAL, SECAM (720x576 @ 25 fps), NTSC (720x480 @ 29.97 fps)
卡号:8
注意
未自动检测到,card=8 是必需的。
9.1.13.2.3. Linux Media Labs LML33¶
Zoran zr36067 PCI 控制器
Zoran zr36060 MJPEG 编解码器
Brooktree bt819 电视解码器
Brooktree bt856 电视编码器
要使用的驱动程序:videodev, i2c-core, i2c-algo-bit, videocodec, bt819, bt856, zr36060, zr36067
输入/输出:复合和 S-video
规范:PAL (720x576 @ 25 fps), NTSC (720x480 @ 29.97 fps)
卡号:5
9.1.13.2.4. Linux Media Labs LML33R10¶
Zoran zr36067 PCI 控制器
Zoran zr36060 MJPEG 编解码器
Philips saa7114 电视解码器
Analog Devices adv7170 电视编码器
要使用的驱动程序:videodev, i2c-core, i2c-algo-bit, videocodec, saa7114, adv7170, zr36060, zr36067
输入/输出:复合和 S-video
规范:PAL (720x576 @ 25 fps), NTSC (720x480 @ 29.97 fps)
卡号:6
9.1.13.2.5. Pinnacle/Miro DC10(new)¶
Zoran zr36057 PCI 控制器
Zoran zr36060 MJPEG 编解码器
Philips saa7110a 电视解码器
Analog Devices adv7176 电视编码器
要使用的驱动程序:videodev, i2c-core, i2c-algo-bit, videocodec, saa7110, adv7175, zr36060, zr36067
输入/输出:复合、S-video 和内部
规范:PAL, SECAM (768x576 @ 25 fps), NTSC (640x480 @ 29.97 fps)
卡号:1
9.1.13.2.6. Pinnacle/Miro DC10+¶
Zoran zr36067 PCI 控制器
Zoran zr36060 MJPEG 编解码器
Philips saa7110a 电视解码器
Analog Devices adv7176 电视编码器
要使用的驱动程序:videodev, i2c-core, i2c-algo-bit, videocodec, saa7110, adv7175, zr36060, zr36067
输入/输出:复合、S-video 和内部
规范:PAL, SECAM (768x576 @ 25 fps), NTSC (640x480 @ 29.97 fps)
卡号:2
9.1.13.2.7. Pinnacle/Miro DC10(old)¶
Zoran zr36057 PCI 控制器
Zoran zr36050 MJPEG 编解码器
Zoran zr36016 视频前端或 Fuji md0211 视频前端(克隆?)
Micronas vpx3220a 电视解码器
mse3000 电视编码器或 Analog Devices adv7176 电视编码器
要使用的驱动程序:videodev, i2c-core, i2c-algo-bit, videocodec, vpx3220, mse3000/adv7175, zr36050, zr36016, zr36067
输入/输出:复合、S-video 和内部
规范:PAL, SECAM (768x576 @ 25 fps), NTSC (640x480 @ 29.97 fps)
卡号:0
9.1.13.2.8. Pinnacle/Miro DC30¶
Zoran zr36057 PCI 控制器
Zoran zr36050 MJPEG 编解码器
Zoran zr36016 视频前端
Micronas vpx3225d/vpx3220a/vpx3216b 电视解码器
Analog Devices adv7176 电视编码器
要使用的驱动程序:videodev, i2c-core, i2c-algo-bit, videocodec, vpx3220/vpx3224, adv7175, zr36050, zr36016, zr36067
输入/输出:复合、S-video 和内部
规范:PAL, SECAM (768x576 @ 25 fps), NTSC (640x480 @ 29.97 fps)
卡号:3
9.1.13.2.9. Pinnacle/Miro DC30+¶
Zoran zr36067 PCI 控制器
Zoran zr36050 MJPEG 编解码器
Zoran zr36016 视频前端
Micronas vpx3225d/vpx3220a/vpx3216b 电视解码器
Analog Devices adv7176 电视编码器
要使用的驱动程序:videodev, i2c-core, i2c-algo-bit, videocodec, vpx3220/vpx3224, adv7175, zr36050, zr36015, zr36067
输入/输出:复合、S-video 和内部
规范:PAL, SECAM (768x576 @ 25 fps), NTSC (640x480 @ 29.97 fps)
卡号:4
注意
尚无 mse3000 的模块可用
尚无 vpx3224 的模块可用
9.1.13.3. 1.1 电视解码器可以做什么,不能做什么¶
最著名的电视标准是 NTSC/PAL/SECAM。但是对于解码帧来说,该信息是不够的。电视标准有几种格式。并非每个电视解码器都能够处理每种格式。驱动程序也不支持每种组合。目前全世界有 11 种不同的电视广播格式。
CCIR 定义了广播信号所需的参数。 CCIR 定义了不同的标准:A、B、D、E、F、G、D、H、I、K、K1、L、M、N,... CCIR 对使用的色彩系统没有太多说明!!!谈论色彩系统并不能说明它的广播方式。
CCIR 标准 A、E、F 不再使用。
当您谈论 NTSC 时,通常是指标准:CCIR - M 使用 NTSC 色彩系统,该系统在美国、日本、墨西哥、加拿大和其他一些国家/地区使用。
当您谈论 PAL 时,通常是指:CCIR - B/G 使用 PAL 色彩系统,该系统在许多国家/地区使用。
当您谈论 SECAM 时,您的意思是:CCIR - L 使用 SECAM 色彩系统,该系统在法国和其他一些国家/地区使用。
还有 SECAM 的其他版本,CCIR - D/K 在保加利亚、中国、斯洛伐克、匈牙利、韩国(共和国)、波兰、罗马尼亚和其他国家/地区使用。
CCIR - H 使用 PAL 色彩系统(有时是 SECAM),并在埃及、利比亚、斯里兰卡、叙利亚阿拉伯共和国中使用。
CCIR - I 使用 PAL 色彩系统,并在英国、香港、爱尔兰、尼日利亚、南非使用。
CCIR - N 使用 PAL 色彩系统和 PAL 帧大小,但使用 NTSC 帧速率,并在阿根廷、乌拉圭和其他一些国家/地区使用
我们不谈论音频是如何广播的!
关于电视标准的一些相当好的网站是:http://www.sony.jp/support/ http://info.electronicwerkstatt.de/bereiche/fernsehtechnik/frequenzen_und_normen/Fernsehnormen/ 和 http://www.cabl.com/restaurant/channel.html
周围的其他奇怪的东西:NTSC 4.43 是一种修改的 NTSC,主要在能够播放 NTSC 的 PAL VCR 中使用。 PAL 60 似乎与 NTSC 4.43 相同。数据表还谈到 NTSC 44,看起来它与 NTSC 4.43 相同。 NTSC Combs 似乎是一种解码器模式,其中解码器使用梳状滤波器来分割 coma 和 luma,而不是使用延迟线。
但我并没有明确地找出 NTSC Comb 是什么。
9.1.13.3.1. Philips saa7111 电视解码器¶
于 1997 年推出,用于 BUZ 中,并且
可以处理:PAL B/G/H/I、PAL N、PAL M、NTSC M、NTSC N、NTSC 4.43 和 SECAM
9.1.13.3.2. Philips saa7110a 电视解码器¶
于 1995 年推出,用于 Pinnacle/Miro DC10(new)、DC10+ 和
可以处理:PAL B/G、NTSC M 和 SECAM
9.1.13.3.3. Philips saa7114 电视解码器¶
于 2000 年推出,用于 LML33R10 和
可以处理:PAL B/G/D/H/I/N、PAL N、PAL M、NTSC M、NTSC 4.43 和 SECAM
9.1.13.3.4. Brooktree bt819 电视解码器¶
于 1996 年推出,用于 LML33 和
可以处理:PAL B/D/G/H/I、NTSC M
9.1.13.3.5. Micronas vpx3220a 电视解码器¶
于 1996 年推出,用于 DC30 和 DC30+ 和
可以处理:PAL B/G/H/I、PAL N、PAL M、NTSC M、NTSC 44、PAL 60、SECAM、NTSC Comb
9.1.13.3.6. Samsung ks0127 电视解码器¶
用于 AVS6EYES 卡,并且
可以处理:NTSC-M/N/44、PAL-M/N/B/G/H/I/D/K/L 和 SECAM
9.1.13.4. 电视编码器可以做什么,不能做什么¶
电视编码器执行与解码器“相同”的操作,但方向相反。您将数字数据馈送到它们,它们会生成复合或 SVHS 信号。有关色彩系统和电视规范的信息,请参阅电视解码器部分。
9.1.13.4.1. Philips saa7185 电视编码器¶
于 1996 年推出,用于 BUZ
可以生成:PAL B/G、NTSC M
9.1.13.4.2. Brooktree bt856 电视编码器¶
于 1994 年推出,用于 LML33
可以生成:PAL B/D/G/H/I/N、PAL M、NTSC M、PAL-N(阿根廷)
9.1.13.4.3. Analog Devices adv7170 电视编码器¶
于 2000 年推出,用于 LML300R10
可以生成:PAL B/D/G/H/I/N、PAL M、NTSC M、PAL 60
9.1.13.4.4. Analog Devices adv7175 电视编码器¶
于 1996 年推出,用于 DC10、DC10+、DC10 old、DC30、DC30+
可以生成:PAL B/D/G/H/I/N、PAL M、NTSC M
9.1.13.4.5. ITT mse3000 电视编码器¶
于 1991 年推出,用于 DC10 old
可以生成:PAL、NTSC、SECAM
9.1.13.4.6. Conexant bt866 电视编码器¶
用于 AVS6EYES,并且
可以生成:NTSC/PAL、PAL-M、PAL-N
adv717x 应该能够生成 PAL N。但是你在寄存器中找不到任何 PAL N 特定的东西。似乎您必须重复使用其他标准来生成 PAL N,也许如果您使用 PAL M 设置,它会起作用。
9.1.13.5. 如何让这个该死的东西工作¶
加载 zr36067.o。 如果它无法自动检测到您的卡,请使用 card=X insmod 选项,其中 X 是上一节中给出的卡号。 要拥有多个卡,请使用 card=X1[,X2[,X3,[X4[..]]]]
要自动执行此操作,请将以下内容添加到您的 /etc/modprobe.d/zoran.conf
options zr36067 card=X1[,X2[,X3[,X4[..]]]] alias char-major-81-0 zr36067
要记住的一件事是,这尚未加载 zr36067.o 本身。 它只是自动化加载。 如果您开始使用 xawtv,则设备在某些系统上不会加载,因为您正在尝试以用户的身份加载模块,这是不允许的(“权限被拒绝”)。 一个快速的解决方法是在默认情况下使用 X 时,将“Load “v4l””添加到 XF86Config-4,或者在您的启动脚本(通常是 rc.local)中运行“v4l-conf -c <device>”(如果您不使用 X)。 两者都确保模块在启动时在 root 帐户下加载。
9.1.13.6. 我应该使用什么主板(或者为什么我的卡不起作用)¶
<在此处插入糟糕的免责声明>。 简而言之:好=SiS/英特尔,坏=VIA。
经验告诉我们,平均而言,拥有 Buz 的人比拥有 DC10+/LML33 的用户遇到更多问题。 此外,它告诉我们,与使用基于不同芯片组的主板的用户相比,拥有基于 VIA 的主板(ktXXX、MVP3)的用户遇到更多问题。 以下是 Andrew Stevens 的一些说明
以下是我在各种主板上使用 LML33 和 Buz 的经验
- VIA MVP3
别想了。 无意义。 不起作用。
- 英特尔 430FX(奔腾 200)
LML33 完美,Buz 可以忍受(每部电影丢掉 3 或 4 帧)
- 英特尔 440BX(早期步进)
LML33 可以忍受。 Buz 开始变得烦人(每小时 6-10 帧)
- 英特尔 440BX(后期步进)
Buz 可以忍受,LML3 几乎完美(偶尔会丢掉单帧)
- SiS735
LML33 完美,Buz 可以忍受。
- VIA KT133(*)
LML33 开始变得烦人,Buz 足够差,我放弃了。
两块 440BX 板都是双 CPU 版本。
Bernhard Praschinger 后来补充说
- AMD 751
Buz 完美-可以忍受
- AMD 760
Buz 完美-可以忍受
一般来说,如果你的主板是基于VIA芯片组的,那么用户邮件列表中的人不会给你太多机会。VIA主板可能很便宜,但有时你最好多花点钱购买更好的主板。通常,VIA主板的IDE/PCI性能也会比其他主板差很多。你会注意到概览中没有提到DC10+/DC30+。基本上,你可以假设如果Buz能工作,LML33也能工作。如果LML33能工作,DC10+/DC30+也能工作。它们对所有支持的卡中,对不同主板芯片组的容忍度最高。
如果在捕获过程中遇到超时,请购买更好的主板,或在捕获期间降低质量/缓冲区大小(参见“关于缓冲区大小、质量、输出大小等”)。如果它挂起,目前我们无能为力。检查你的IRQ,并确保该卡有自己的中断。
9.1.13.7. 编程接口¶
该驱动程序符合video4linux2标准。在内核2.6.38中,已移除对V4L1和自定义zoran ioctl的支持。
有关编程示例,请查看MJPEG-tools中的lavrec.c和lavplay.c代码 (http://mjpeg.sf.net/)。
软件开发者的补充说明
驱动程序根据当前的电视标准(norm)返回maxwidth和maxheight参数。因此,与驱动程序通信并“请求”这些参数的软件应首先设置正确的电视标准。好吧,这似乎在逻辑上是正确的:对于当前国家/地区来说,电视标准比各种电视采集卡的几何设置“更恒定”,这些采集卡可能以ITU或方形像素格式工作。
9.1.13.8. 应用程序¶
已知可与此驱动程序配合使用的应用程序
电视观看
xawtv
kwintv
可能任何支持video4linux或video4linux2的电视应用程序。
MJPEG捕获/播放
mjpegtools/lavtools(或Linux Video Studio)
gstreamer
mplayer
通用原始捕获
xawtv
gstreamer
可能任何支持video4linux或video4linux2的应用程序
视频编辑
Cinelerra
MainActor
mjpegtools(或Linux Video Studio)
9.1.13.9. 关于缓冲区大小、质量、输出大小等¶
zr36060可以进行1:2的JPEG压缩。这实际上是芯片组可以达到的理论最大值。但是,驱动程序可以将压缩限制为最大(大小)1:4。原因是某些卡(例如Buz)无法处理1:2的压缩,否则在几分钟后会停止捕获。使用1:4,它通常可以工作。如果你有Buz,请使用'low_bitrate=1'进入1:4最大压缩模式。
因此,实际上100%的JPEG质量是1:2压缩。因此,对于一个完整的PAL帧(大小为720x576)。JPEG字段以YUY2格式存储,因此字段的大小为720x288x16/2 bits/field(2 fields/frame)= 207360 bytes/field x 2 = 414720 bytes/frame(为标头和DHT(huffman)/DQT(量化)表添加一些字节,你将得到大约512kB/帧的1:2压缩。对于1:4压缩,帧的大小将是此大小的一半。
Martin Samuelsson的一些补充说明,这也解释了缓冲区大小的重要性: -- > 嗯,我不认为真的是那样。使用当前的(周一下午6:00下载的)驱动程序,我得到以下10秒的输出大小: > -q 50 -b 128 : 24.283.332 Bytes > -q 50 -b 256 : 48.442.368 > -q 25 -b 128 : 24.655.992 > -q 25 -b 256 : 25.859.820
我醒了,无法再次入睡。我将花一些时间来解释为什么这对我来说并不奇怪。
让我们用704像素的宽度进行一些数学运算。我不确定Buz是否实际使用了该数字,但这现在并不重要。
704x288像素,一个字段是202752像素。除以每个块64像素;每个字段3168个块。每个像素由两个字节组成;每个块128个字节;每个块1024位。新驱动程序中的100%表示1:2压缩;最大输出变为每个块512位。实际上是510,但是512更易于计算。
假设我们指定d1q50。因此,我们需要每个块256位;乘以3168得到811008位;每个字段101376字节。我们在这里讨论的是原始位和字节,因此我们不需要对每像素位数等进行任何花哨的更正。每个字段101376字节。
d1视频包含每个帧两个字段。这些总计为每个帧202752字节,其中一个帧进入每个缓冲区。
但是等等! -b128给出128kB的缓冲区!不可能将202752字节的JPEG数据塞入128kB中!
这是驱动程序注意到的,并在你的示例中自动进行补偿。让我们使用此信息进行一些数学运算
128kB是131072字节。在此缓冲区中,我们要存储两个字段,这为每个字段留下65536字节。每个字段使用3168个块,我们得到每个块20.68686868 ...个可用字节;165位。当只有165位可用时,我们不能允许每个块256位的请求! -q50选项被静默覆盖,并且-b128选项优先,使我们等效于-q32。
这使我们的数据速率为每个块165位,乘以3168的总和为每个字段65340字节,在允许的65536字节中。当前驱动程序还有另一个级别的速率限制;它不会接受填充超过指定缓冲区的6/8的-q值。(我不确定为什么。“安全起见”似乎是一个安全的选择。就个人而言,我认为我会将请求的每块位数减少一位,或类似的东西。)我们不能使用每块165位,但必须再次将其降低到可用缓冲区空间的6/8:我们最终得到每块124位,等效于-q24。使用128kB缓冲区,你不能在-d1上使用大于-q24的值。(以及PAL和704像素宽度...)
第三个示例通过相同的过程被限制为-q24。第二个示例使用非常相似的计算,被限制为-q48。唯一实际上以指定的-q值抓取的示例是最后一个示例,从文件大小中可以清楚地看到。
结论:最终电影的质量取决于缓冲区大小、质量、是否使用'low_bitrate=1'作为zr36060.c模块的insmod选项以执行1:4而不是1:2压缩等等。
如果遇到超时,降低质量/缓冲区大小或使用'low_bitrate=1作为zr36060.o的insmod选项实际上可能会有所帮助,正如Buz所证明的那样。
9.1.13.10. 它挂起/崩溃/失败/随便什么!救命!¶
确保该卡有自己的中断(参见/proc/interrupts),在高详细程度下检查dmesg的输出(使用debug=2加载zr36067.o,使用debug=1加载所有其他模块)。检查你的主板是否有利(参见问题2),如果不是,请在另一台计算机中测试该卡。另请参阅问题3中给出的说明,如果在一段时间后记录失败,请尝试降低质量/缓冲区大小/捕获大小。
如果所有这些都无济于事,请清楚地描述问题,包括详细的硬件信息(内存+品牌,主板+芯片组+品牌,哪个MJPEG卡,处理器,可能令人感兴趣的其他PCI卡),给出系统PnP信息(/proc/interrupts,/proc/dma,/proc/devices),并给出内核版本,驱动程序版本,glibc版本,gcc版本以及任何其他可能感兴趣的信息。 此外,在高详细程度下提供dmesg输出。 请参阅“联系”以了解如何联系开发人员。
9.1.13.11. 维护者/联系方式¶
此驱动程序的先前维护者/开发人员是 - Laurent Pinchart <laurent.pinchart@skynet.be> - Ronald Bultje rbultje@ronald.bitfreak.net - Serguei Miridonov <mirsev@cicese.mx> - Wolfgang Scherr <scherr@net4you.net> - Dave Perks <dperks@ibm.net> - Rainer Johanni <Rainer@Johanni.de>
9.1.13.12. 驱动程序许可证¶
该驱动程序是根据通用公共许可证的条款分发的。
该程序是自由软件;你可以重新分发和/或修改它,但必须遵守由自由软件基金会发布的GNU通用公共许可证的条款;无论是版本2还是(根据你的选择)任何更高版本。
发布此程序的目的是希望它有用,但不作任何担保;甚至不包括适销性或特定用途适用性的暗示担保。 有关更多详细信息,请参见GNU通用公共许可证。
有关更多信息,请参见https://gnu.ac.cn/。