xref: /OK3568_Linux_fs/kernel/Documentation/translations/zh_CN/video4linux/omap3isp.txt (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593SmuzhiyunChinese translated version of Documentation/admin-guide/media/omap3isp.rst
2*4882a593Smuzhiyun
3*4882a593SmuzhiyunIf you have any comment or update to the content, please contact the
4*4882a593Smuzhiyunoriginal document maintainer directly.  However, if you have a problem
5*4882a593Smuzhiyuncommunicating in English you can also ask the Chinese maintainer for
6*4882a593Smuzhiyunhelp.  Contact the Chinese maintainer if this translation is outdated
7*4882a593Smuzhiyunor if there is a problem with the translation.
8*4882a593Smuzhiyun
9*4882a593SmuzhiyunMaintainer: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
10*4882a593Smuzhiyun	  Sakari Ailus <sakari.ailus@iki.fi>
11*4882a593Smuzhiyun	  David Cohen <dacohen@gmail.com>
12*4882a593SmuzhiyunChinese maintainer: Fu Wei <tekkamanninja@gmail.com>
13*4882a593Smuzhiyun---------------------------------------------------------------------
14*4882a593SmuzhiyunDocumentation/admin-guide/media/omap3isp.rst 的中文翻译
15*4882a593Smuzhiyun
16*4882a593Smuzhiyun如果想评论或更新本文的内容,请直接联系原文档的维护者。如果你使用英文
17*4882a593Smuzhiyun交流有困难的话,也可以向中文版维护者求助。如果本翻译更新不及时或者翻
18*4882a593Smuzhiyun译存在问题,请联系中文版维护者。
19*4882a593Smuzhiyun英文版维护者: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
20*4882a593Smuzhiyun	  Sakari Ailus <sakari.ailus@iki.fi>
21*4882a593Smuzhiyun	  David Cohen <dacohen@gmail.com>
22*4882a593Smuzhiyun中文版维护者: 傅炜 Fu Wei <tekkamanninja@gmail.com>
23*4882a593Smuzhiyun中文版翻译者: 傅炜 Fu Wei <tekkamanninja@gmail.com>
24*4882a593Smuzhiyun中文版校译者: 傅炜 Fu Wei <tekkamanninja@gmail.com>
25*4882a593Smuzhiyun
26*4882a593Smuzhiyun
27*4882a593Smuzhiyun以下为正文
28*4882a593Smuzhiyun---------------------------------------------------------------------
29*4882a593SmuzhiyunOMAP 3 图像信号处理器 (ISP) 驱动
30*4882a593Smuzhiyun
31*4882a593SmuzhiyunCopyright (C) 2010 Nokia Corporation
32*4882a593SmuzhiyunCopyright (C) 2009 Texas Instruments, Inc.
33*4882a593Smuzhiyun
34*4882a593Smuzhiyun联系人: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
35*4882a593Smuzhiyun	  Sakari Ailus <sakari.ailus@iki.fi>
36*4882a593Smuzhiyun	  David Cohen <dacohen@gmail.com>
37*4882a593Smuzhiyun
38*4882a593Smuzhiyun
39*4882a593Smuzhiyun介绍
40*4882a593Smuzhiyun===
41*4882a593Smuzhiyun
42*4882a593Smuzhiyun本文档介绍了由 drivers/media/video/omap3isp 加载的德州仪器
43*4882a593Smuzhiyun(TI)OMAP 3 图像信号处理器 (ISP) 驱动。原始驱动由德州仪器(TI)
44*4882a593Smuzhiyun编写,但此后由诺基亚重写了两次。
45*4882a593Smuzhiyun
46*4882a593Smuzhiyun驱动已在以下 OMAP 3 系列的芯片中成功使用:
47*4882a593Smuzhiyun
48*4882a593Smuzhiyun	3430
49*4882a593Smuzhiyun	3530
50*4882a593Smuzhiyun	3630
51*4882a593Smuzhiyun
52*4882a593Smuzhiyun驱动实现了 V4L2、媒体控制器和 v4l2_subdev 接口。支持内核中使用
53*4882a593Smuzhiyunv4l2_subdev 接口的传感器、镜头和闪光灯驱动。
54*4882a593Smuzhiyun
55*4882a593Smuzhiyun
56*4882a593Smuzhiyun拆分为子设备
57*4882a593Smuzhiyun==========
58*4882a593Smuzhiyun
59*4882a593SmuzhiyunOMAP 3 ISP 被拆分为 V4L2 子设备,ISP中的每个模块都由一个子设备
60*4882a593Smuzhiyun来表示。每个子设备向用户空间提供一个 V4L2 子设备接口。
61*4882a593Smuzhiyun
62*4882a593Smuzhiyun	OMAP3 ISP CCP2
63*4882a593Smuzhiyun	OMAP3 ISP CSI2a
64*4882a593Smuzhiyun	OMAP3 ISP CCDC
65*4882a593Smuzhiyun	OMAP3 ISP preview
66*4882a593Smuzhiyun	OMAP3 ISP resizer
67*4882a593Smuzhiyun	OMAP3 ISP AEWB
68*4882a593Smuzhiyun	OMAP3 ISP AF
69*4882a593Smuzhiyun	OMAP3 ISP histogram
70*4882a593Smuzhiyun
71*4882a593SmuzhiyunISP 中每个可能的连接都通过一个链接嵌入到媒体控制器接口中。详见例程 [2]。
72*4882a593Smuzhiyun
73*4882a593Smuzhiyun
74*4882a593Smuzhiyun控制 OMAP 3 ISP
75*4882a593Smuzhiyun==============
76*4882a593Smuzhiyun
77*4882a593Smuzhiyun通常,对 OMAP 3 ISP 的配置会在下一帧起始时生效。在传感器垂直消隐期间,
78*4882a593Smuzhiyun模块变为空闲时完成配置。在内存到内存的操作中,视频管道一次处理一帧。
79*4882a593Smuzhiyun应用配置应在帧间完成。
80*4882a593Smuzhiyun
81*4882a593SmuzhiyunISP 中的所有模块,除 CSI-2 和 (可能存在的)CCP2 接收器外,都必须
82*4882a593Smuzhiyun接收完整的帧数据。因此,传感器必须保证从不发送部分帧数据给ISP。
83*4882a593Smuzhiyun
84*4882a593SmuzhiyunAutoidle(自动空闲)功能至少在 3430 的 ISP 模块中确实存在一些问题。
85*4882a593Smuzhiyun当 omap3isp 模块参数 autoidle 非零时,autoidle(自动空闲)功能
86*4882a593Smuzhiyun仅在 3630 中启用了。
87*4882a593Smuzhiyun
88*4882a593Smuzhiyun
89*4882a593Smuzhiyun事件机制
90*4882a593Smuzhiyun======
91*4882a593Smuzhiyun
92*4882a593SmuzhiyunOMAP 3 ISP 驱动在 CCDC 和统计(AEWB、AF 和 直方图)子设备中支持
93*4882a593SmuzhiyunV4L2 事件机制接口。
94*4882a593Smuzhiyun
95*4882a593SmuzhiyunCCDC 子设备通过 HS_VS 中断,处理 V4L2_EVENT_FRAME_SYNC 类型
96*4882a593Smuzhiyun事件,用于告知帧起始。早期版本的驱动则使用 V4L2_EVENT_OMAP3ISP_HS_VS。
97*4882a593Smuzhiyun当在 CCDC 模块中接收到起始帧的第一行时,会准确地触发事件。这个事件
98*4882a593Smuzhiyun可以在 CCDC 子设备中“订阅”。
99*4882a593Smuzhiyun
100*4882a593Smuzhiyun(当使用并行接口时,必须注意正确地配置 VS 信号极性。而当使用串行接收时
101*4882a593Smuzhiyun这个会自动校正。)
102*4882a593Smuzhiyun
103*4882a593Smuzhiyun每个统计子设备都可以产生事件。每当一个统计缓冲区可由用户空间应用程序
104*4882a593Smuzhiyun通过 VIDIOC_OMAP3ISP_STAT_REQ IOCTL 操作获取时,就会产生一个
105*4882a593Smuzhiyun事件。当前存在以下事件:
106*4882a593Smuzhiyun
107*4882a593Smuzhiyun	V4L2_EVENT_OMAP3ISP_AEWB
108*4882a593Smuzhiyun	V4L2_EVENT_OMAP3ISP_AF
109*4882a593Smuzhiyun	V4L2_EVENT_OMAP3ISP_HIST
110*4882a593Smuzhiyun
111*4882a593Smuzhiyun这些 ioctl 的事件数据类型为 struct omap3isp_stat_event_status
112*4882a593Smuzhiyun结构体。如果出现计算错误的统计,也同样会产生一个事件,但没有相关的统计
113*4882a593Smuzhiyun数据缓冲区。这种情况下 omap3isp_stat_event_status.buf_err 会被
114*4882a593Smuzhiyun设置为非零值。
115*4882a593Smuzhiyun
116*4882a593Smuzhiyun
117*4882a593Smuzhiyun私有 IOCTL
118*4882a593Smuzhiyun==========
119*4882a593Smuzhiyun
120*4882a593SmuzhiyunOMAP 3 ISP 驱动支持标准的 V4L2 IOCTL 以及可能存在且实用的控制。但
121*4882a593SmuzhiyunISP 提供的许多功能都不在标准 IOCTL 之列,例如 gamma(伽马)表和统计
122*4882a593Smuzhiyun数据采集配置等。
123*4882a593Smuzhiyun
124*4882a593Smuzhiyun通常,会有一个私有 ioctl 用于配置每个包含硬件依赖功能的模块。
125*4882a593Smuzhiyun
126*4882a593Smuzhiyun支持以下私有 IOCTL:
127*4882a593Smuzhiyun
128*4882a593Smuzhiyun	VIDIOC_OMAP3ISP_CCDC_CFG
129*4882a593Smuzhiyun	VIDIOC_OMAP3ISP_PRV_CFG
130*4882a593Smuzhiyun	VIDIOC_OMAP3ISP_AEWB_CFG
131*4882a593Smuzhiyun	VIDIOC_OMAP3ISP_HIST_CFG
132*4882a593Smuzhiyun	VIDIOC_OMAP3ISP_AF_CFG
133*4882a593Smuzhiyun	VIDIOC_OMAP3ISP_STAT_REQ
134*4882a593Smuzhiyun	VIDIOC_OMAP3ISP_STAT_EN
135*4882a593Smuzhiyun
136*4882a593Smuzhiyuninclude/linux/omap3isp.h 中描述了这些 ioctl 使用的参数结构体。
137*4882a593Smuzhiyun与特定 ISP 模块相关的 ISP 自身的详细功能在技术参考手册 (TRMs)中有
138*4882a593Smuzhiyun描述,详见文档结尾。
139*4882a593Smuzhiyun
140*4882a593Smuzhiyun虽然在不使用任何私有 IOCTL 的情况下使用 ISP 驱动是可能的,但这样无法
141*4882a593Smuzhiyun获得最佳的图像质量。AEWB、AF 和 直方图(译者注:一般用于自动曝光和增益
142*4882a593Smuzhiyun控制,以及图像均衡等)模块无法在未使用适当的私有 IOCTL 配置的情况下使用。
143*4882a593Smuzhiyun
144*4882a593Smuzhiyun
145*4882a593SmuzhiyunCCDC 和 preview(预览)模块 IOCTL
146*4882a593Smuzhiyun===============================
147*4882a593Smuzhiyun
148*4882a593SmuzhiyunVIDIOC_OMAP3ISP_CCDC_CFG 和 VIDIOC_OMAP3ISP_PRV_CFG IOCTL
149*4882a593Smuzhiyun被分别用于配置、启用和禁用 CCDC 和 preview(预览)模块的功能。在它们
150*4882a593Smuzhiyun所控制的模块中,两个 IOCTL 控制多种功能。VIDIOC_OMAP3ISP_CCDC_CFG IOCTL
151*4882a593Smuzhiyun接受一个指向 omap3isp_ccdc_update_config 结构体的指针作为它的参数。
152*4882a593Smuzhiyun同样的,VIDIOC_OMAP3ISP_PRV_CFG 接受一个指向 omap3isp_prev_update_config
153*4882a593Smuzhiyun结构体的指针。以上两个结构体定义位于 [1]。
154*4882a593Smuzhiyun
155*4882a593Smuzhiyun这些结构体中的 update 域标识是否针对指定的功能更新配置,而 flag 域
156*4882a593Smuzhiyun则标识是启用还是禁用此功能。
157*4882a593Smuzhiyun
158*4882a593Smuzhiyunupdate 和 flag 位接受以下掩码值。CCDC 和 preview(预览)模块的
159*4882a593Smuzhiyun每个单独功能都与一个 flag 关联(禁用或启用;在结构体中 flag 域的
160*4882a593Smuzhiyun一部分)和一个指向功能配置数据的指针。
161*4882a593Smuzhiyun
162*4882a593Smuzhiyun对于 VIDIOC_OMAP3ISP_CCDC_CFG,下面列出了 update 和 flag 域
163*4882a593Smuzhiyun中的有效值。 这些值可能会在同一个 IOCTL 调用中配置多个功能。
164*4882a593Smuzhiyun
165*4882a593Smuzhiyun        OMAP3ISP_CCDC_ALAW
166*4882a593Smuzhiyun        OMAP3ISP_CCDC_LPF
167*4882a593Smuzhiyun        OMAP3ISP_CCDC_BLCLAMP
168*4882a593Smuzhiyun        OMAP3ISP_CCDC_BCOMP
169*4882a593Smuzhiyun        OMAP3ISP_CCDC_FPC
170*4882a593Smuzhiyun        OMAP3ISP_CCDC_CULL
171*4882a593Smuzhiyun        OMAP3ISP_CCDC_CONFIG_LSC
172*4882a593Smuzhiyun        OMAP3ISP_CCDC_TBL_LSC
173*4882a593Smuzhiyun
174*4882a593Smuzhiyun针对 VIDIOC_OMAP3ISP_PRV_CFG 的相应值如下:
175*4882a593Smuzhiyun
176*4882a593Smuzhiyun        OMAP3ISP_PREV_LUMAENH
177*4882a593Smuzhiyun        OMAP3ISP_PREV_INVALAW
178*4882a593Smuzhiyun        OMAP3ISP_PREV_HRZ_MED
179*4882a593Smuzhiyun        OMAP3ISP_PREV_CFA
180*4882a593Smuzhiyun        OMAP3ISP_PREV_CHROMA_SUPP
181*4882a593Smuzhiyun        OMAP3ISP_PREV_WB
182*4882a593Smuzhiyun        OMAP3ISP_PREV_BLKADJ
183*4882a593Smuzhiyun        OMAP3ISP_PREV_RGB2RGB
184*4882a593Smuzhiyun        OMAP3ISP_PREV_COLOR_CONV
185*4882a593Smuzhiyun        OMAP3ISP_PREV_YC_LIMIT
186*4882a593Smuzhiyun        OMAP3ISP_PREV_DEFECT_COR
187*4882a593Smuzhiyun        OMAP3ISP_PREV_GAMMABYPASS
188*4882a593Smuzhiyun        OMAP3ISP_PREV_DRK_FRM_CAPTURE
189*4882a593Smuzhiyun        OMAP3ISP_PREV_DRK_FRM_SUBTRACT
190*4882a593Smuzhiyun        OMAP3ISP_PREV_LENS_SHADING
191*4882a593Smuzhiyun        OMAP3ISP_PREV_NF
192*4882a593Smuzhiyun        OMAP3ISP_PREV_GAMMA
193*4882a593Smuzhiyun
194*4882a593Smuzhiyun在启用某个功能的时候,相关的配置数据指针不可为 NULL。在禁用某个功能时,
195*4882a593Smuzhiyun配置数据指针会被忽略。
196*4882a593Smuzhiyun
197*4882a593Smuzhiyun
198*4882a593Smuzhiyun统计模块 IOCTL
199*4882a593Smuzhiyun=============
200*4882a593Smuzhiyun
201*4882a593Smuzhiyun统计子设备相较于其他子设备提供了更多动态配置选项。在图像处理流水线处于
202*4882a593Smuzhiyun工作状态时,它们可以被启用、禁用和重配。
203*4882a593Smuzhiyun
204*4882a593Smuzhiyun统计模块总是从 CCDC 中获取输入的图像数据(由于直方图内存读取未实现)。
205*4882a593Smuzhiyun统计数据可由用户通过统计子设备节点使用私有 IOCTL 获取。
206*4882a593Smuzhiyun
207*4882a593SmuzhiyunAEWB、AF 和 直方图子设备提供的私有 IOCTL 极大程度上反应了 ISP 硬件
208*4882a593Smuzhiyun提供的寄存器级接口。有些方面纯粹和驱动程序的实现相关,这些将在下面讨论。
209*4882a593Smuzhiyun
210*4882a593SmuzhiyunVIDIOC_OMAP3ISP_STAT_EN
211*4882a593Smuzhiyun-----------------------
212*4882a593Smuzhiyun
213*4882a593Smuzhiyun这个私有 IOCTL 启用/禁用 一个统计模块。如果这个申请在视频流启动前完成,
214*4882a593Smuzhiyun它将在视频流水线开始工作时生效。如果视频流水线已经处于工作状态了,它将在
215*4882a593SmuzhiyunCCDC 变为空闲时生效。
216*4882a593Smuzhiyun
217*4882a593SmuzhiyunVIDIOC_OMAP3ISP_AEWB_CFG, VIDIOC_OMAP3ISP_HIST_CFG and VIDIOC_OMAP3ISP_AF_CFG
218*4882a593Smuzhiyun-----------------------------------------------------------------------------
219*4882a593Smuzhiyun
220*4882a593Smuzhiyun这些 IOCTL 用于配置模块。它们要求用户应用程序对硬件有深入的认识。对
221*4882a593Smuzhiyun大多数域的解释可以在 OMAP 的 TRM 中找到。以下两个域对于以上所有的
222*4882a593Smuzhiyun私有 IOCTL 配置都很常见,由于他们没有在 TRM 中提及,故需要对其有
223*4882a593Smuzhiyun更好的认识。
224*4882a593Smuzhiyun
225*4882a593Smuzhiyunomap3isp_[h3a_af/h3a_aewb/hist]_config.buf_size:
226*4882a593Smuzhiyun
227*4882a593Smuzhiyun模块在内部处理自身缓冲。对模块数据输出所必需的缓存大小依赖于已申请的配置。
228*4882a593Smuzhiyun虽然驱动支持在视频流工作时重新配置,但对于所需缓存量大于模块启用时内部
229*4882a593Smuzhiyun所分配数量的情况,则不支持重新配置。在这种情况下将返回 -EBUSY。为了避免
230*4882a593Smuzhiyun此类状况,无论是禁用/重配/启用模块,还是第一次配置时申请必须的缓存大小,
231*4882a593Smuzhiyun都应在模块禁用的情况下进行。
232*4882a593Smuzhiyun
233*4882a593Smuzhiyun内部缓冲分配的大小需综合考虑所申请配置的最小缓存量以及 buf_size 域中
234*4882a593Smuzhiyun所设的值。如果 buf_size 域在[minimum(最小值), maximum(最大值)]
235*4882a593Smuzhiyun缓冲大小范围之外,则应该将其调整到其范围中。驱动则会选择最大值。正确的
236*4882a593Smuzhiyunbuf_size 值将回写到用户应用程序中。
237*4882a593Smuzhiyun
238*4882a593Smuzhiyunomap3isp_[h3a_af/h3a_aewb/hist]_config.config_counter:
239*4882a593Smuzhiyun
240*4882a593Smuzhiyun由于配置并未在申请之后同步生效,驱动必须提供一个跟踪这类信息的方法,
241*4882a593Smuzhiyun以提供更准确的数据。在一个配置被申请之后,返回到用户空间应用程序的
242*4882a593Smuzhiyunconfig_counter 是一个与其配置相关的唯一值。当用户应用程序接收到
243*4882a593Smuzhiyun一个缓冲可用或一个新的缓冲申请事件时,这个 config_counter 用于
244*4882a593Smuzhiyun一个缓冲数据和一个配置的匹配。
245*4882a593Smuzhiyun
246*4882a593SmuzhiyunVIDIOC_OMAP3ISP_STAT_REQ
247*4882a593Smuzhiyun------------------------
248*4882a593Smuzhiyun
249*4882a593Smuzhiyun将内部缓冲队列中最早的数据发送到用户空间,然后丢弃此缓冲区。
250*4882a593Smuzhiyunomap3isp_stat_data.frame_number 域与视频缓冲的 field_count
251*4882a593Smuzhiyun域相匹配。
252*4882a593Smuzhiyun
253*4882a593Smuzhiyun
254*4882a593Smuzhiyun技术参考手册 (TRMs) 和其他文档
255*4882a593Smuzhiyun==========================
256*4882a593Smuzhiyun
257*4882a593SmuzhiyunOMAP 3430 TRM:
258*4882a593Smuzhiyun<URL:http://focus.ti.com/pdfs/wtbu/OMAP34xx_ES3.1.x_PUBLIC_TRM_vZM.zip>
259*4882a593Smuzhiyun参考于 2011-03-05.
260*4882a593Smuzhiyun
261*4882a593SmuzhiyunOMAP 35xx TRM:
262*4882a593Smuzhiyun<URL:http://www.ti.com/litv/pdf/spruf98o> 参考于 2011-03-05.
263*4882a593Smuzhiyun
264*4882a593SmuzhiyunOMAP 3630 TRM:
265*4882a593Smuzhiyun<URL:http://focus.ti.com/pdfs/wtbu/OMAP36xx_ES1.x_PUBLIC_TRM_vQ.zip>
266*4882a593Smuzhiyun参考于 2011-03-05.
267*4882a593Smuzhiyun
268*4882a593SmuzhiyunDM 3730 TRM:
269*4882a593Smuzhiyun<URL:http://www.ti.com/litv/pdf/sprugn4h> 参考于 2011-03-06.
270*4882a593Smuzhiyun
271*4882a593Smuzhiyun
272*4882a593Smuzhiyun参考资料
273*4882a593Smuzhiyun=======
274*4882a593Smuzhiyun
275*4882a593Smuzhiyun[1] include/linux/omap3isp.h
276*4882a593Smuzhiyun
277*4882a593Smuzhiyun[2] http://git.ideasonboard.org/?p=media-ctl.git;a=summary
278