Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Documentation: Chinese translation of Documentation/video4linux/omap3isp.txt

This is a Chinese translated version of Documentation/video4linux/omap3isp.txt

Signed-off-by: Fu Wei <tekkamanninja@gmail.com>
Acked-by: Harry Wei <harryxiyou@gmail.com>
Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

authored by

Tekkaman Ninja and committed by
Greg Kroah-Hartman
2f055430 666f355f

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