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