Chinese translated version of Documentation/video4linux/omap3isp.txt If you have any comment or update to the content, please contact the original document maintainer directly. However, if you have a problem communicating in English you can also ask the Chinese maintainer for help. Contact the Chinese maintainer if this translation is outdated or if there is a problem with the translation. Maintainer: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Sakari Ailus <sakari.ailus@iki.fi> David Cohen <dacohen@gmail.com> Chinese maintainer: Fu Wei <tekkamanninja@gmail.com> --------------------------------------------------------------------- Documentation/video4linux/omap3isp.txt çš„ä¸æ–‡ç¿»è¯‘ 如果想评论或更新本文的内容,请直接è”ç³»åŽŸæ–‡æ¡£çš„ç»´æŠ¤è€…ã€‚å¦‚æžœä½ ä½¿ç”¨è‹±æ–‡ äº¤æµæœ‰å›°éš¾çš„è¯ï¼Œä¹Ÿå¯ä»¥å‘䏿–‡ç‰ˆç»´æŠ¤è€…求助。如果本翻译更新ä¸åŠæ—¶æˆ–者翻 译å˜åœ¨é—®é¢˜ï¼Œè¯·è”ç³»ä¸æ–‡ç‰ˆç»´æŠ¤è€…。 英文版维护者: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Sakari Ailus <sakari.ailus@iki.fi> David Cohen <dacohen@gmail.com> 䏿–‡ç‰ˆç»´æŠ¤è€…: 傅炜 Fu Wei <tekkamanninja@gmail.com> 䏿–‡ç‰ˆç¿»è¯‘者: 傅炜 Fu Wei <tekkamanninja@gmail.com> 䏿–‡ç‰ˆæ ¡è¯‘者: 傅炜 Fu Wei <tekkamanninja@gmail.com> ä»¥ä¸‹ä¸ºæ£æ–‡ --------------------------------------------------------------------- OMAP 3 图åƒä¿¡å·å¤„ç†å™¨ (ISP) 驱动 Copyright (C) 2010 Nokia Corporation Copyright (C) 2009 Texas Instruments, Inc. è”系人: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Sakari Ailus <sakari.ailus@iki.fi> David Cohen <dacohen@gmail.com> ä»‹ç» === 本文档介ç»äº†ç”± drivers/media/video/omap3isp åŠ è½½çš„å¾·å·žä»ªå™¨ (TI)OMAP 3 图åƒä¿¡å·å¤„ç†å™¨ (ISP) 驱动。原始驱动由德州仪器(TI) 编写,但æ¤åŽç”±è¯ºåŸºäºšé‡å†™äº†ä¸¤æ¬¡ã€‚ 驱动已在以下 OMAP 3 ç³»åˆ—çš„èŠ¯ç‰‡ä¸æˆåŠŸä½¿ç”¨ï¼š 3430 3530 3630 驱动实现了 V4L2ã€åª’体控制器和 v4l2_subdev 接å£ã€‚支æŒå†…æ ¸ä¸ä½¿ç”¨ v4l2_subdev 接å£çš„ä¼ æ„Ÿå™¨ã€é•œå¤´å’Œé—ªå…‰ç¯é©±åŠ¨ã€‚ 拆分为å设备 ========== OMAP 3 ISP 被拆分为 V4L2 å设备,ISPä¸çš„æ¯ä¸ªæ¨¡å—都由一个å设备 æ¥è¡¨ç¤ºã€‚æ¯ä¸ªå设备å‘用户空间æä¾›ä¸€ä¸ª V4L2 å设备接å£ã€‚ OMAP3 ISP CCP2 OMAP3 ISP CSI2a OMAP3 ISP CCDC OMAP3 ISP preview OMAP3 ISP resizer OMAP3 ISP AEWB OMAP3 ISP AF OMAP3 ISP histogram ISP 䏿¯ä¸ªå¯èƒ½çš„连接都通过一个链接嵌入到媒体控制器接å£ä¸ã€‚详è§ä¾‹ç¨‹ [2]。 控制 OMAP 3 ISP ============== 通常,对 OMAP 3 ISP çš„é…ç½®ä¼šåœ¨ä¸‹ä¸€å¸§èµ·å§‹æ—¶ç”Ÿæ•ˆã€‚åœ¨ä¼ æ„Ÿå™¨åž‚ç›´æ¶ˆéšæœŸé—´ï¼Œ 模å—å˜ä¸ºç©ºé—²æ—¶å®Œæˆé…置。在内å˜åˆ°å†…å˜çš„æ“ä½œä¸ï¼Œè§†é¢‘管é“一次处ç†ä¸€å¸§ã€‚ 应用é…置应在帧间完æˆã€‚ ISP ä¸çš„æ‰€æœ‰æ¨¡å—,除 CSI-2 å’Œ (å¯èƒ½å˜åœ¨çš„)CCP2 接收器外,都必须 接收完整的帧数æ®ã€‚å› æ¤ï¼Œä¼ 感器必须ä¿è¯ä»Žä¸å‘é€éƒ¨åˆ†å¸§æ•°æ®ç»™ISP。 Autoidle(自动空闲)功能至少在 3430 çš„ ISP 模å—ä¸ç¡®å®žå˜åœ¨ä¸€äº›é—®é¢˜ã€‚ 当 omap3isp 模å—傿•° autoidle éžé›¶æ—¶ï¼Œautoidle(自动空闲)功能 仅在 3630 ä¸å¯ç”¨äº†ã€‚ 事件机制 ====== OMAP 3 ISP 驱动在 CCDC 和统计(AEWBã€AF å’Œ 直方图)åè®¾å¤‡ä¸æ”¯æŒ V4L2 事件机制接å£ã€‚ CCDC å设备通过 HS_VS 䏿–ï¼Œå¤„ç† V4L2_EVENT_FRAME_SYNC 类型 事件,用于告知帧起始。早期版本的驱动则使用 V4L2_EVENT_OMAP3ISP_HS_VS。 当在 CCDC 模å—ä¸æŽ¥æ”¶åˆ°èµ·å§‹å¸§çš„ç¬¬ä¸€è¡Œæ—¶ï¼Œä¼šå‡†ç¡®åœ°è§¦å‘事件。这个事件 å¯ä»¥åœ¨ CCDC å设备ä¸â€œè®¢é˜…â€ã€‚ ï¼ˆå½“ä½¿ç”¨å¹¶è¡ŒæŽ¥å£æ—¶ï¼Œå¿…é¡»æ³¨æ„æ£ç¡®åœ°é…ç½® VS ä¿¡å·æžæ€§ã€‚而当使用串行接收时 è¿™ä¸ªä¼šè‡ªåŠ¨æ ¡æ£ã€‚) æ¯ä¸ªç»Ÿè®¡å设备都å¯ä»¥äº§ç”Ÿäº‹ä»¶ã€‚æ¯å½“一个统计缓冲区å¯ç”±ç”¨æˆ·ç©ºé—´åº”ç”¨ç¨‹åº é€šè¿‡ VIDIOC_OMAP3ISP_STAT_REQ IOCTL æ“ä½œèŽ·å–æ—¶ï¼Œå°±ä¼šäº§ç”Ÿä¸€ä¸ª 事件。当å‰å˜åœ¨ä»¥ä¸‹äº‹ä»¶ï¼š V4L2_EVENT_OMAP3ISP_AEWB V4L2_EVENT_OMAP3ISP_AF V4L2_EVENT_OMAP3ISP_HIST 这些 ioctl 的事件数æ®ç±»åž‹ä¸º struct omap3isp_stat_event_status ç»“æž„ä½“ã€‚å¦‚æžœå‡ºçŽ°è®¡ç®—é”™è¯¯çš„ç»Ÿè®¡ï¼Œä¹ŸåŒæ ·ä¼šäº§ç”Ÿä¸€ä¸ªäº‹ä»¶ï¼Œä½†æ²¡æœ‰ç›¸å…³çš„统计 æ•°æ®ç¼“å†²åŒºã€‚è¿™ç§æƒ…况下 omap3isp_stat_event_status.buf_err 会被 设置为éžé›¶å€¼ã€‚ ç§æœ‰ IOCTL ========== OMAP 3 ISP é©±åŠ¨æ”¯æŒæ ‡å‡†çš„ V4L2 IOCTL 以åŠå¯èƒ½å˜åœ¨ä¸”实用的控制。但 ISP æä¾›çš„许多功能都ä¸åœ¨æ ‡å‡† IOCTL 之列,例如 gamma(伽马)表和统计 æ•°æ®é‡‡é›†é…ç½®ç‰ã€‚ é€šå¸¸ï¼Œä¼šæœ‰ä¸€ä¸ªç§æœ‰ ioctl 用于é…ç½®æ¯ä¸ªåŒ…å«ç¡¬ä»¶ä¾èµ–功能的模å—。 支æŒä»¥ä¸‹ç§æœ‰ IOCTL: VIDIOC_OMAP3ISP_CCDC_CFG VIDIOC_OMAP3ISP_PRV_CFG VIDIOC_OMAP3ISP_AEWB_CFG VIDIOC_OMAP3ISP_HIST_CFG VIDIOC_OMAP3ISP_AF_CFG VIDIOC_OMAP3ISP_STAT_REQ VIDIOC_OMAP3ISP_STAT_EN 在 include/linux/omap3isp.h ä¸æè¿°äº†è¿™äº› ioctl ä½¿ç”¨çš„å‚æ•°ç»“构体。 与特定 ISP 模å—相关的 ISP 自身的详细功能在技术å‚考手册 (TRMs)䏿œ‰ æè¿°ï¼Œè¯¦è§æ–‡æ¡£ç»“尾。 虽然在ä¸ä½¿ç”¨ä»»ä½•ç§æœ‰ IOCTL 的情况下使用 ISP 驱动是å¯èƒ½çš„ï¼Œä½†è¿™æ ·æ— æ³• 获得最佳的图åƒè´¨é‡ã€‚AEWBã€AF å’Œ 直方图(译者注:一般用于自动æ›å…‰å’Œå¢žç›Š 控制,以åŠå›¾åƒå‡è¡¡ç‰ï¼‰æ¨¡å—æ— æ³•åœ¨æœªä½¿ç”¨é€‚å½“çš„ç§æœ‰ IOCTL é…置的情况下使用。 CCDC å’Œ previewï¼ˆé¢„è§ˆï¼‰æ¨¡å— IOCTL =============================== VIDIOC_OMAP3ISP_CCDC_CFG å’Œ VIDIOC_OMAP3ISP_PRV_CFG IOCTL 被分别用于é…ç½®ã€å¯ç”¨å’Œç¦ç”¨ CCDC å’Œ preview(预览)模å—的功能。在它们 所控制的模å—ä¸ï¼Œä¸¤ä¸ª IOCTL 控制多ç§åŠŸèƒ½ã€‚VIDIOC_OMAP3ISP_CCDC_CFG IOCTL 接å—ä¸€ä¸ªæŒ‡å‘ omap3isp_ccdc_update_config ç»“æž„ä½“çš„æŒ‡é’ˆä½œä¸ºå®ƒçš„å‚æ•°ã€‚ åŒæ ·çš„,VIDIOC_OMAP3ISP_PRV_CFG 接å—ä¸€ä¸ªæŒ‡å‘ omap3isp_prev_update_config 结构体的指针。以上两个结构体定义ä½äºŽ [1]。 这些结构体ä¸çš„ update åŸŸæ ‡è¯†æ˜¯å¦é’ˆå¯¹æŒ‡å®šçš„功能更新é…置,而 flag 域 åˆ™æ ‡è¯†æ˜¯å¯ç”¨è¿˜æ˜¯ç¦ç”¨æ¤åŠŸèƒ½ã€‚ update å’Œ flag 使ޥå—以下掩ç 值。CCDC å’Œ preview(预览)模å—çš„ æ¯ä¸ªå•独功能都与一个 flag å…³è”(ç¦ç”¨æˆ–å¯ç”¨ï¼›åœ¨ç»“æž„ä½“ä¸ flag 域的 一部分)和一个指å‘功能é…置数æ®çš„æŒ‡é’ˆã€‚ 对于 VIDIOC_OMAP3ISP_CCDC_CFG,下é¢åˆ—出了 update å’Œ flag 域 ä¸çš„æœ‰æ•ˆå€¼ã€‚ 这些值å¯èƒ½ä¼šåœ¨åŒä¸€ä¸ª IOCTL 调用ä¸é…置多个功能。 OMAP3ISP_CCDC_ALAW OMAP3ISP_CCDC_LPF OMAP3ISP_CCDC_BLCLAMP OMAP3ISP_CCDC_BCOMP OMAP3ISP_CCDC_FPC OMAP3ISP_CCDC_CULL OMAP3ISP_CCDC_CONFIG_LSC OMAP3ISP_CCDC_TBL_LSC 针对 VIDIOC_OMAP3ISP_PRV_CFG 的相应值如下: OMAP3ISP_PREV_LUMAENH OMAP3ISP_PREV_INVALAW OMAP3ISP_PREV_HRZ_MED OMAP3ISP_PREV_CFA OMAP3ISP_PREV_CHROMA_SUPP OMAP3ISP_PREV_WB OMAP3ISP_PREV_BLKADJ OMAP3ISP_PREV_RGB2RGB OMAP3ISP_PREV_COLOR_CONV OMAP3ISP_PREV_YC_LIMIT OMAP3ISP_PREV_DEFECT_COR OMAP3ISP_PREV_GAMMABYPASS OMAP3ISP_PREV_DRK_FRM_CAPTURE OMAP3ISP_PREV_DRK_FRM_SUBTRACT OMAP3ISP_PREV_LENS_SHADING OMAP3ISP_PREV_NF OMAP3ISP_PREV_GAMMA 在å¯ç”¨æŸä¸ªåŠŸèƒ½çš„æ—¶å€™ï¼Œç›¸å…³çš„é…ç½®æ•°æ®æŒ‡é’ˆä¸å¯ä¸º NULL。在ç¦ç”¨æŸä¸ªåŠŸèƒ½æ—¶ï¼Œ é…ç½®æ•°æ®æŒ‡é’ˆä¼šè¢«å¿½ç•¥ã€‚ ç»Ÿè®¡æ¨¡å— IOCTL ============= 统计å设备相较于其他å设备æä¾›äº†æ›´å¤šåЍæ€é…置选项。在图åƒå¤„ç†æµæ°´çº¿å¤„于 å·¥ä½œçŠ¶æ€æ—¶ï¼Œå®ƒä»¬å¯ä»¥è¢«å¯ç”¨ã€ç¦ç”¨å’Œé‡é…。 ç»Ÿè®¡æ¨¡å—æ€»æ˜¯ä»Ž CCDC ä¸èŽ·å–è¾“å…¥çš„å›¾åƒæ•°æ®ï¼ˆç”±äºŽç›´æ–¹å›¾å†…å˜è¯»å–未实现)。 统计数æ®å¯ç”±ç”¨æˆ·é€šè¿‡ç»Ÿè®¡åè®¾å¤‡èŠ‚ç‚¹ä½¿ç”¨ç§æœ‰ IOCTL 获å–。 AEWBã€AF å’Œ 直方图å设备æä¾›çš„ç§æœ‰ IOCTL æžå¤§ç¨‹åº¦ä¸Šå应了 ISP 硬件 æä¾›çš„寄å˜å™¨çº§æŽ¥å£ã€‚有些方é¢çº¯ç²¹å’Œé©±åŠ¨ç¨‹åºçš„实现相关,这些将在下é¢è®¨è®ºã€‚ VIDIOC_OMAP3ISP_STAT_EN ----------------------- è¿™ä¸ªç§æœ‰ IOCTL å¯ç”¨/ç¦ç”¨ 一个统计模å—。如果这个申请在视频æµå¯åЍå‰å®Œæˆï¼Œ å®ƒå°†åœ¨è§†é¢‘æµæ°´çº¿å¼€å§‹å·¥ä½œæ—¶ç”Ÿæ•ˆã€‚å¦‚æžœè§†é¢‘æµæ°´çº¿å·²ç»å¤„于工作状æ€äº†ï¼Œå®ƒå°†åœ¨ CCDC å˜ä¸ºç©ºé—²æ—¶ç”Ÿæ•ˆã€‚ VIDIOC_OMAP3ISP_AEWB_CFG, VIDIOC_OMAP3ISP_HIST_CFG and VIDIOC_OMAP3ISP_AF_CFG ----------------------------------------------------------------------------- 这些 IOCTL 用于é…置模å—ã€‚å®ƒä»¬è¦æ±‚用户应用程åºå¯¹ç¡¬ä»¶æœ‰æ·±å…¥çš„认识。对 大多数域的解释å¯ä»¥åœ¨ OMAP çš„ TRM 䏿‰¾åˆ°ã€‚以下两个域对于以上所有的 ç§æœ‰ IOCTL é…置都很常è§ï¼Œç”±äºŽä»–们没有在 TRM 䏿åŠï¼Œæ•…需è¦å¯¹å…¶æœ‰ 更好的认识。 omap3isp_[h3a_af/h3a_aewb/hist]_config.buf_size: 模å—在内部处ç†è‡ªèº«ç¼“å†²ã€‚å¯¹æ¨¡å—æ•°æ®è¾“出所必需的缓å˜å¤§å°ä¾èµ–于已申请的é…置。 虽然驱动支æŒåœ¨è§†é¢‘æµå·¥ä½œæ—¶é‡æ–°é…置,但对于所需缓å˜é‡å¤§äºŽæ¨¡å—å¯ç”¨æ—¶å†…部 æ‰€åˆ†é…æ•°é‡çš„æƒ…å†µï¼Œåˆ™ä¸æ”¯æŒé‡æ–°é…ç½®ã€‚åœ¨è¿™ç§æƒ…况下将返回 -EBUSY。为了é¿å… æ¤ç±»çŠ¶å†µï¼Œæ— è®ºæ˜¯ç¦ç”¨/é‡é…/å¯ç”¨æ¨¡å—,还是第一次é…置时申请必须的缓å˜å¤§å°ï¼Œ 都应在模å—ç¦ç”¨çš„æƒ…况下进行。 内部缓冲分é…的大å°éœ€ç»¼åˆè€ƒè™‘所申请é…置的最å°ç¼“å˜é‡ä»¥åŠ buf_size åŸŸä¸ æ‰€è®¾çš„å€¼ã€‚å¦‚æžœ buf_size 域在[minimum(最å°å€¼ï¼‰, maximum(最大值)] 缓冲大å°èŒƒå›´ä¹‹å¤–,则应该将其调整到其范围ä¸ã€‚驱动则会选择最大值。æ£ç¡®çš„ buf_size 值将回写到用户应用程åºä¸ã€‚ omap3isp_[h3a_af/h3a_aewb/hist]_config.config_counter: 由于é…置并未在申请之åŽåŒæ¥ç”Ÿæ•ˆï¼Œé©±åŠ¨å¿…é¡»æä¾›ä¸€ä¸ªè·Ÿè¸ªè¿™ç±»ä¿¡æ¯çš„æ–¹æ³•, 以æä¾›æ›´å‡†ç¡®çš„æ•°æ®ã€‚在一个é…置被申请之åŽï¼Œè¿”回到用户空间应用程åºçš„ config_counter 是一个与其é…ç½®ç›¸å…³çš„å”¯ä¸€å€¼ã€‚å½“ç”¨æˆ·åº”ç”¨ç¨‹åºæŽ¥æ”¶åˆ° 一个缓冲å¯ç”¨æˆ–一个新的缓冲申请事件时,这个 config_counter 用于 一个缓冲数æ®å’Œä¸€ä¸ªé…置的匹é…。 VIDIOC_OMAP3ISP_STAT_REQ ------------------------ å°†å†…éƒ¨ç¼“å†²é˜Ÿåˆ—ä¸æœ€æ—©çš„æ•°æ®å‘é€åˆ°ç”¨æˆ·ç©ºé—´ï¼Œç„¶åŽä¸¢å¼ƒæ¤ç¼“冲区。 omap3isp_stat_data.frame_number 域与视频缓冲的 field_count 域相匹é…。 技术å‚考手册 (TRMs) 和其他文档 ========================== OMAP 3430 TRM: <URL:http://focus.ti.com/pdfs/wtbu/OMAP34xx_ES3.1.x_PUBLIC_TRM_vZM.zip> å‚考于 2011-03-05. OMAP 35xx TRM: <URL:http://www.ti.com/litv/pdf/spruf98o> å‚考于 2011-03-05. OMAP 3630 TRM: <URL:http://focus.ti.com/pdfs/wtbu/OMAP36xx_ES1.x_PUBLIC_TRM_vQ.zip> å‚考于 2011-03-05. DM 3730 TRM: <URL:http://www.ti.com/litv/pdf/sprugn4h> å‚考于 2011-03-06. å‚考资料 ======= [1] include/linux/omap3isp.h [2] http://git.ideasonboard.org/?p=media-ctl.git;a=summary