0001 Chinese translated version of Documentation/admin-guide/media/omap3isp.rst
0002
0003 If you have any comment or update to the content, please contact the
0004 original document maintainer directly. However, if you have a problem
0005 communicating in English you can also ask the Chinese maintainer for
0006 help. Contact the Chinese maintainer if this translation is outdated
0007 or if there is a problem with the translation.
0008
0009 Maintainer: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
0010 Sakari Ailus <sakari.ailus@iki.fi>
0011 David Cohen <dacohen@gmail.com>
0012 Chinese maintainer: Fu Wei <tekkamanninja@gmail.com>
0013 ---------------------------------------------------------------------
0014 Documentation/admin-guide/media/omap3isp.rst 的中文翻译
0015
0016 如果想评论或更新本文的内容,请直接联系原文档的维护者。如果你使用英文
0017 交流有困难的话,也可以向中文版维护者求助。如果本翻译更新不及时或者翻
0018 译存在问题,请联系中文版维护者。
0019 英文版维护者: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
0020 Sakari Ailus <sakari.ailus@iki.fi>
0021 David Cohen <dacohen@gmail.com>
0022 中文版维护者: 傅炜 Fu Wei <tekkamanninja@gmail.com>
0023 中文版翻译者: 傅炜 Fu Wei <tekkamanninja@gmail.com>
0024 中文版校译者: 傅炜 Fu Wei <tekkamanninja@gmail.com>
0025
0026
0027 以下为正文
0028 ---------------------------------------------------------------------
0029 OMAP 3 图像信号处理器 (ISP) 驱动
0030
0031 Copyright (C) 2010 Nokia Corporation
0032 Copyright (C) 2009 Texas Instruments, Inc.
0033
0034 联系人: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
0035 Sakari Ailus <sakari.ailus@iki.fi>
0036 David Cohen <dacohen@gmail.com>
0037
0038
0039 介绍
0040 ===
0041
0042 本文档介绍了由 drivers/media/video/omap3isp 加载的德州仪器
0043 (TI)OMAP 3 图像信号处理器 (ISP) 驱动。原始驱动由德州仪器(TI)
0044 编写,但此后由诺基亚重写了两次。
0045
0046 驱动已在以下 OMAP 3 系列的芯片中成功使用:
0047
0048 3430
0049 3530
0050 3630
0051
0052 驱动实现了 V4L2、媒体控制器和 v4l2_subdev 接口。支持内核中使用
0053 v4l2_subdev 接口的传感器、镜头和闪光灯驱动。
0054
0055
0056 拆分为子设备
0057 ==========
0058
0059 OMAP 3 ISP 被拆分为 V4L2 子设备,ISP中的每个模块都由一个子设备
0060 来表示。每个子设备向用户空间提供一个 V4L2 子设备接口。
0061
0062 OMAP3 ISP CCP2
0063 OMAP3 ISP CSI2a
0064 OMAP3 ISP CCDC
0065 OMAP3 ISP preview
0066 OMAP3 ISP resizer
0067 OMAP3 ISP AEWB
0068 OMAP3 ISP AF
0069 OMAP3 ISP histogram
0070
0071 ISP 中每个可能的连接都通过一个链接嵌入到媒体控制器接口中。详见例程 [2]。
0072
0073
0074 控制 OMAP 3 ISP
0075 ==============
0076
0077 通常,对 OMAP 3 ISP 的配置会在下一帧起始时生效。在传感器垂直消隐期间,
0078 模块变为空闲时完成配置。在内存到内存的操作中,视频管道一次处理一帧。
0079 应用配置应在帧间完成。
0080
0081 ISP 中的所有模块,除 CSI-2 和 (可能存在的)CCP2 接收器外,都必须
0082 接收完整的帧数据。因此,传感器必须保证从不发送部分帧数据给ISP。
0083
0084 Autoidle(自动空闲)功能至少在 3430 的 ISP 模块中确实存在一些问题。
0085 当 omap3isp 模块参数 autoidle 非零时,autoidle(自动空闲)功能
0086 仅在 3630 中启用了。
0087
0088
0089 事件机制
0090 ======
0091
0092 OMAP 3 ISP 驱动在 CCDC 和统计(AEWB、AF 和 直方图)子设备中支持
0093 V4L2 事件机制接口。
0094
0095 CCDC 子设备通过 HS_VS 中断,处理 V4L2_EVENT_FRAME_SYNC 类型
0096 事件,用于告知帧起始。早期版本的驱动则使用 V4L2_EVENT_OMAP3ISP_HS_VS。
0097 当在 CCDC 模块中接收到起始帧的第一行时,会准确地触发事件。这个事件
0098 可以在 CCDC 子设备中“订阅”。
0099
0100 (当使用并行接口时,必须注意正确地配置 VS 信号极性。而当使用串行接收时
0101 这个会自动校正。)
0102
0103 每个统计子设备都可以产生事件。每当一个统计缓冲区可由用户空间应用程序
0104 通过 VIDIOC_OMAP3ISP_STAT_REQ IOCTL 操作获取时,就会产生一个
0105 事件。当前存在以下事件:
0106
0107 V4L2_EVENT_OMAP3ISP_AEWB
0108 V4L2_EVENT_OMAP3ISP_AF
0109 V4L2_EVENT_OMAP3ISP_HIST
0110
0111 这些 ioctl 的事件数据类型为 struct omap3isp_stat_event_status
0112 结构体。如果出现计算错误的统计,也同样会产生一个事件,但没有相关的统计
0113 数据缓冲区。这种情况下 omap3isp_stat_event_status.buf_err 会被
0114 设置为非零值。
0115
0116
0117 私有 IOCTL
0118 ==========
0119
0120 OMAP 3 ISP 驱动支持标准的 V4L2 IOCTL 以及可能存在且实用的控制。但
0121 ISP 提供的许多功能都不在标准 IOCTL 之列,例如 gamma(伽马)表和统计
0122 数据采集配置等。
0123
0124 通常,会有一个私有 ioctl 用于配置每个包含硬件依赖功能的模块。
0125
0126 支持以下私有 IOCTL:
0127
0128 VIDIOC_OMAP3ISP_CCDC_CFG
0129 VIDIOC_OMAP3ISP_PRV_CFG
0130 VIDIOC_OMAP3ISP_AEWB_CFG
0131 VIDIOC_OMAP3ISP_HIST_CFG
0132 VIDIOC_OMAP3ISP_AF_CFG
0133 VIDIOC_OMAP3ISP_STAT_REQ
0134 VIDIOC_OMAP3ISP_STAT_EN
0135
0136 在 include/linux/omap3isp.h 中描述了这些 ioctl 使用的参数结构体。
0137 与特定 ISP 模块相关的 ISP 自身的详细功能在技术参考手册 (TRMs)中有
0138 描述,详见文档结尾。
0139
0140 虽然在不使用任何私有 IOCTL 的情况下使用 ISP 驱动是可能的,但这样无法
0141 获得最佳的图像质量。AEWB、AF 和 直方图(译者注:一般用于自动曝光和增益
0142 控制,以及图像均衡等)模块无法在未使用适当的私有 IOCTL 配置的情况下使用。
0143
0144
0145 CCDC 和 preview(预览)模块 IOCTL
0146 ===============================
0147
0148 VIDIOC_OMAP3ISP_CCDC_CFG 和 VIDIOC_OMAP3ISP_PRV_CFG IOCTL
0149 被分别用于配置、启用和禁用 CCDC 和 preview(预览)模块的功能。在它们
0150 所控制的模块中,两个 IOCTL 控制多种功能。VIDIOC_OMAP3ISP_CCDC_CFG IOCTL
0151 接受一个指向 omap3isp_ccdc_update_config 结构体的指针作为它的参数。
0152 同样的,VIDIOC_OMAP3ISP_PRV_CFG 接受一个指向 omap3isp_prev_update_config
0153 结构体的指针。以上两个结构体定义位于 [1]。
0154
0155 这些结构体中的 update 域标识是否针对指定的功能更新配置,而 flag 域
0156 则标识是启用还是禁用此功能。
0157
0158 update 和 flag 位接受以下掩码值。CCDC 和 preview(预览)模块的
0159 每个单独功能都与一个 flag 关联(禁用或启用;在结构体中 flag 域的
0160 一部分)和一个指向功能配置数据的指针。
0161
0162 对于 VIDIOC_OMAP3ISP_CCDC_CFG,下面列出了 update 和 flag 域
0163 中的有效值。 这些值可能会在同一个 IOCTL 调用中配置多个功能。
0164
0165 OMAP3ISP_CCDC_ALAW
0166 OMAP3ISP_CCDC_LPF
0167 OMAP3ISP_CCDC_BLCLAMP
0168 OMAP3ISP_CCDC_BCOMP
0169 OMAP3ISP_CCDC_FPC
0170 OMAP3ISP_CCDC_CULL
0171 OMAP3ISP_CCDC_CONFIG_LSC
0172 OMAP3ISP_CCDC_TBL_LSC
0173
0174 针对 VIDIOC_OMAP3ISP_PRV_CFG 的相应值如下:
0175
0176 OMAP3ISP_PREV_LUMAENH
0177 OMAP3ISP_PREV_INVALAW
0178 OMAP3ISP_PREV_HRZ_MED
0179 OMAP3ISP_PREV_CFA
0180 OMAP3ISP_PREV_CHROMA_SUPP
0181 OMAP3ISP_PREV_WB
0182 OMAP3ISP_PREV_BLKADJ
0183 OMAP3ISP_PREV_RGB2RGB
0184 OMAP3ISP_PREV_COLOR_CONV
0185 OMAP3ISP_PREV_YC_LIMIT
0186 OMAP3ISP_PREV_DEFECT_COR
0187 OMAP3ISP_PREV_GAMMABYPASS
0188 OMAP3ISP_PREV_DRK_FRM_CAPTURE
0189 OMAP3ISP_PREV_DRK_FRM_SUBTRACT
0190 OMAP3ISP_PREV_LENS_SHADING
0191 OMAP3ISP_PREV_NF
0192 OMAP3ISP_PREV_GAMMA
0193
0194 在启用某个功能的时候,相关的配置数据指针不可为 NULL。在禁用某个功能时,
0195 配置数据指针会被忽略。
0196
0197
0198 统计模块 IOCTL
0199 =============
0200
0201 统计子设备相较于其他子设备提供了更多动态配置选项。在图像处理流水线处于
0202 工作状态时,它们可以被启用、禁用和重配。
0203
0204 统计模块总是从 CCDC 中获取输入的图像数据(由于直方图内存读取未实现)。
0205 统计数据可由用户通过统计子设备节点使用私有 IOCTL 获取。
0206
0207 AEWB、AF 和 直方图子设备提供的私有 IOCTL 极大程度上反应了 ISP 硬件
0208 提供的寄存器级接口。有些方面纯粹和驱动程序的实现相关,这些将在下面讨论。
0209
0210 VIDIOC_OMAP3ISP_STAT_EN
0211 -----------------------
0212
0213 这个私有 IOCTL 启用/禁用 一个统计模块。如果这个申请在视频流启动前完成,
0214 它将在视频流水线开始工作时生效。如果视频流水线已经处于工作状态了,它将在
0215 CCDC 变为空闲时生效。
0216
0217 VIDIOC_OMAP3ISP_AEWB_CFG, VIDIOC_OMAP3ISP_HIST_CFG and VIDIOC_OMAP3ISP_AF_CFG
0218 -----------------------------------------------------------------------------
0219
0220 这些 IOCTL 用于配置模块。它们要求用户应用程序对硬件有深入的认识。对
0221 大多数域的解释可以在 OMAP 的 TRM 中找到。以下两个域对于以上所有的
0222 私有 IOCTL 配置都很常见,由于他们没有在 TRM 中提及,故需要对其有
0223 更好的认识。
0224
0225 omap3isp_[h3a_af/h3a_aewb/hist]_config.buf_size:
0226
0227 模块在内部处理自身缓冲。对模块数据输出所必需的缓存大小依赖于已申请的配置。
0228 虽然驱动支持在视频流工作时重新配置,但对于所需缓存量大于模块启用时内部
0229 所分配数量的情况,则不支持重新配置。在这种情况下将返回 -EBUSY。为了避免
0230 此类状况,无论是禁用/重配/启用模块,还是第一次配置时申请必须的缓存大小,
0231 都应在模块禁用的情况下进行。
0232
0233 内部缓冲分配的大小需综合考虑所申请配置的最小缓存量以及 buf_size 域中
0234 所设的值。如果 buf_size 域在[minimum(最小值), maximum(最大值)]
0235 缓冲大小范围之外,则应该将其调整到其范围中。驱动则会选择最大值。正确的
0236 buf_size 值将回写到用户应用程序中。
0237
0238 omap3isp_[h3a_af/h3a_aewb/hist]_config.config_counter:
0239
0240 由于配置并未在申请之后同步生效,驱动必须提供一个跟踪这类信息的方法,
0241 以提供更准确的数据。在一个配置被申请之后,返回到用户空间应用程序的
0242 config_counter 是一个与其配置相关的唯一值。当用户应用程序接收到
0243 一个缓冲可用或一个新的缓冲申请事件时,这个 config_counter 用于
0244 一个缓冲数据和一个配置的匹配。
0245
0246 VIDIOC_OMAP3ISP_STAT_REQ
0247 ------------------------
0248
0249 将内部缓冲队列中最早的数据发送到用户空间,然后丢弃此缓冲区。
0250 omap3isp_stat_data.frame_number 域与视频缓冲的 field_count
0251 域相匹配。
0252
0253
0254 技术参考手册 (TRMs) 和其他文档
0255 ==========================
0256
0257 OMAP 3430 TRM:
0258 <URL:http://focus.ti.com/pdfs/wtbu/OMAP34xx_ES3.1.x_PUBLIC_TRM_vZM.zip>
0259 参考于 2011-03-05.
0260
0261 OMAP 35xx TRM:
0262 <URL:http://www.ti.com/litv/pdf/spruf98o> 参考于 2011-03-05.
0263
0264 OMAP 3630 TRM:
0265 <URL:http://focus.ti.com/pdfs/wtbu/OMAP36xx_ES1.x_PUBLIC_TRM_vQ.zip>
0266 参考于 2011-03-05.
0267
0268 DM 3730 TRM:
0269 <URL:http://www.ti.com/litv/pdf/sprugn4h> 参考于 2011-03-06.
0270
0271
0272 参考资料
0273 =======
0274
0275 [1] include/linux/omap3isp.h
0276
0277 [2] http://git.ideasonboard.org/?p=media-ctl.git;a=summary