ImageVerifierCode 换一换
格式:DOC , 页数:38 ,大小:3.01MB ,
资源ID:4941697      下载积分:12 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/4941697.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(androidcamera基本知识.doc)为本站上传会员【天****】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

androidcamera基本知识.doc

1、 分类: 2012-07-07 00:09 5458人阅读 (1) 关键词:android  camera CMM 模组 camera参数 平台信息: 内核:linux 系统:android 平台:S5PV310(samsung exynos 4210)  下载: 新项目开案,代码他们还没给得到,三星那边办事流程就是多,烦人(嘿嘿只是说说,流程从另一方面说明了人家标准化的程度高)。看看代码,把前一段时间工作的内容整理下,发出来。一方面有相同问题的“同学”可以看下,说不定问题就解决了; 再一方面自己工作方面记录吧,整个流程整理出来,加深自己的印象,技术还得提高呀。这样利人

2、利己的事多做点好……“为人民服务!”(我不是**党,只是技术P民) 这篇比较基础,做为科普知识看一下。 一、摄像头模组(CCM)介绍: 1、camera特写     摄像头模组,全称CameraCompact Module,以下简写为CCM,是影像捕捉至关重要的电子器件。先来张特写,各种样子的都有,不过我前一段时间调试那个有点丑。 2、摄像头工作原理、camera的组成各组件的作用 想完全的去理解,还得去深入,如果是代码我们就逐步分析,模组的话我们就把它分解开来,看他到底是怎么工作的。看下它是有那些部分构成的,如下图所示: (1)、工作原理:物体通过镜头(

3、lens)聚集的光,通过CMOS或CCD集成电路,把光信号转换成电信号,再经过内部图像处理器(ISP)转换成数字图像信号输出到数字信号处理器(DSP)加工处理,转换成标准的GRB、YUV等格式图像信号。 (2)、CCM 包含四大件: 镜头(lens)、传感器(sensor)、软板(FPC)、图像处理芯片(DSP)。决定一个摄像头好坏的重要部件是:镜头(lens)、图像处理芯片 (DSP)、传感器(sensor)。CCM的关键技术为:光学设计技术、非球面镜制作技术、光学镀膜技术。 镜头(lens)是相机的灵魂,镜头(lens)对成像的效果有很重要的作用,是利用透镜的折射原理,景物光线通过镜头

4、在聚焦平面上形成清晰的影像,通过感光材料CMOS或CCD感光器记录景物的影像。镜头厂家主要集中在台湾、日本和韩国,镜头这种光学技术含量高的产业有比较高的门槛,业内比较知名的企业如富士精机、柯尼卡美能达、大立光、Enplas等 传感器(sensor)是CCM的核心模块,目前广泛使用的有两种:一种是广泛使用的CCD(电荷藕合)元件;另一种是CMOS(互补金属氧化物导体)器件。 电荷藕合器件图像传感器CCD(Charge Coupled Device),它使用一种高感光度的半导体材料制成,能把光线转变成电荷,通过模数转换器芯片转换成数字信号。CCD由许多感光单位组成,通常以百万像 素为单位。当

5、CCD表面受到光线照射时,每个感光单位会将电荷反映在组件上,所有的感光单位所产生的信号加在一起,就构成了一幅完整的画面。CCD传感器模块以日本厂商为主导,全球规模市场有90%以上被日本厂商垄断,以索尼、松下、夏普为龙头。 互补性氧化金属半导体CMOS(Complementary Metal-Oxide Semiconductor)主要是利用硅和锗这两种元素所做成的半导体,使其在CMOS上共存着带N(带–电)和 P(带+电)级的半导体,这两个互补效应所产生的电流即可被处理芯片纪录和解读成影像。CMOS 传感器主要美国、台湾和韩国为主导,主要生产厂家有美国 OmniVision、Agilent、

6、Micron,台湾的锐像、原相、泰视等,韩国的三星、现代。  图像处理芯片(DSP)是CCM的重要组成部分,它的作用是将感光芯片获得的数据及时快速地传递中央处理器并刷新感光芯片,因此DSP芯片的好坏,直接影响画面品质(比如色彩饱和度,清晰度等)。 FPC柔性电路板(柔性PCB): 简称"软板", 又称"柔性线路板",连接芯片和手机。起到电信号传输作用。 3、camera模组的装配方式 (1)、定焦模组装配图 CCM分为定焦模组和自动变焦模组,其中定焦模组主要由镜头、镜座、感光集成电路、软性线路板、补强和钢片装配而成,其装配图如下: (2)、自动变焦模组装配图 以前我不知道手机

7、上的光学变焦是怎么会事,以为那些都是忽悠人的,看这个图这下明白了,如果你也不知道,看下这个图,原来里面有个音圈马达,这个只有高像素的模组才有,这个我们不用管,知道怎么光学变焦就可以了。 自动变焦模组由镜头、音圈马达、底座支架、感光集成电路、驱动集成电路和连接器组成,其装配图如下: (3)、3D模组 传说中的3D是怎么会事,多几台摄像机拍摄。手机上也有了??有点强大 看人家手机上用的,感觉看着不太好看,高科技的东西开始就是做得丑了一点,我们了解有这个东西就行了: 4、摄像头的一些技术指标 (1)、图像解析度/分辨率(Resolution) QSIF/QQVGA 160

8、 x 120 19200   QCIF  176 x 144 25344   SIF/QVGA 320 x 240    76800   CIF 352 x 288   101376  10万像素 VGA   640 x 480 307200 30万像素(35万是指648X488) SVGA 800 x 600 480000 50万像素 XGA 1024 x 768 786438 80万像素 SXGA  1280 x 1024  1310720    130万像素 UXGA 1600 x 1200 1920000 

9、  200万像素 QXGA  2048 x 1536 3145728  300万像素(320W) QSXGA 2592 x 1944 5038848 500万像素   2816 x 2112 2947392 600万像素   3072 x 2304  7077888 700万像素   3200 x 2400 7680000 770万像素   3264 x 2448  7990272  800万像素   3876 x 2584 10015584 1000万像素 (2)、图像格式(imageFormat/Colorspac

10、e) RGB24,420是目前最常用的两种图像格式。 RGB24:表示R、G、B三种颜色各8bit,最多可表现256级浓淡,从而可以再现256*256*256种颜色。 I420:YUV格式之一。其它格式有:RGB565,RGB444,YUV4:2:2等。 (3)、自动白平衡调整(AWB) 定义:要求在不同色温环境下,照白色的物体,屏幕中的图像应也是白色的。色温表示光谱成份,光的颜色。色温低表示长波光成分多。当色温改变时,光源中三基色(红、绿、蓝)的比例会发生变化,需要调节三基色的比例来达到彩色的平衡,这就是白平衡调节的实际。 (4)、图像压缩方式 JPEG:(joint phot

11、o graphicexpert group)静态图像压缩方式。一种有损图像的压缩方式。压缩比越大,图像质量也就越差。当图像精度要求不高存储空间有限时,可以选择这种格式。目前大部分数码相机都使用JPEG格式。 (5)、彩色深度(色彩位数) 反映对色彩的识别能力和成像的色彩表现能力,实际就是A/D转换器的量化精度,是指将信号分成多少个等级。常用色彩位数(bit)表示。彩色深度越高,获得的影像色彩就越艳丽动人。现在市场上的摄像头均已达到24位,有的甚至是32位 (6)、图像噪音 指的是图像中的杂点干挠。表现为图像中有固定的彩色杂点。 (7)、视角 与人的眼睛成像是相成原理,简单说就是成像

12、范围。 (8)、输出/输入接口 串行接口(RS232/422):传输速率慢,为115kbit/s   并行接口(PP):速率可以达到1Mbit/s   红外接口(IrDA):速率也是115kbit/s,一般笔记本电脑有此接口   通用串行总线USB:即插即用的接口标准,支持热插拔。USB1.1速率可达12Mbit/s,USB2.0可达480Mbit/s   IEEE1394(火线)接口(亦称ilink):其传输速率可达100M~400Mbit/s  今天 有点晚了,后继续分析camera sensor接口、s5pv310 CAMIF接口、V4L2、FIMC、和我们最终的senso

13、r驱动。 分类: 2012-07-08 21:59 6499人阅读 (11) 关键词:android  camera CMM 模组 camera参数  CAMIF 平台信息: 内核:linux 系统:android 平台:S5PV310(samsung exynos 4210)  下载: 一、摄像头工作原理 上一篇我们讲了摄像头模组的组成,工作原理,做为一种了解。下面我们析摄像头从寄存器角度是怎么工作的。如何阅读摄像头规格书(针对驱动调节时用到关键参数,以GT2005为例)。 规格书,也就是一个器件所有的说明,精确到器件每一个细节,软件关心的寄存

14、器、硬件关心的电气特性、封装等等。单单驱动方面,我们只看对我们有用的方面就可以了,没必要全部看完。主要这样资料全都是鸟语(En),全部看完一方面时间上会用的比较多,找到关键的地方就行了。 1、camera的总体示意图如下:控制部分为摄像头上电、IIC控制接口,数据输出为摄像头拍摄的图传到主控芯片,所有要有data、行场同步和时钟号。GT2005/GT2015是CMOS接口的图像传感器芯片,可以感知外部的视觉信号并将其转换为数字信号并输出。        我们需要通过MCLK给摄像头提供时钟,RESET是复位线,PWDN在摄像头工作时应该始终为低。PCLK是像素时钟,HREF是行参考信号,V

15、SYNC是场同步信号。一旦给摄像头提供了时钟,并且复位摄像头,摄像头就开始工作了,通过HREF,VSYNC和PCLK同步传输数字图像信号。 数据是通过D0~D7这八根数据线并行送出的。 (1)、Pixel Array        GT2005阵列大小为 1268 列、1248 行,有效像素为 1616 列, 1216 行。也就是说摄像头为1600X1200的时候,像素点要多于这个,去除边缘一部分,保证图像质量吧。 (2)、IIC 这个不用说了,摄像头寄存器初始化的数据都从这里传输的,所有的IIC器件都一样的工作,来张图吧,后面做详细分析; 下面这一部分在调试驱动的过程中比较重

16、要了: (3)、MCLK 电子元件工作都得要个时钟吧,摄像头要工作,这个就是我们所要的时钟,在主控制芯片提供,这个时钟一定要有,要不然摄像头不会工作的。 (4)、上下电时序,这个要接规格书上来,注间PWDN、RESETB这两个脚,不同的摄像头不太一样,这个图是上电时序,上电时参考一下,知道在那里看就行; (5)PCLK \D1~D7 摄像头得到的数据要传出来吧,要有数据,当然数据出来要有时钟和同步信号了,看下它的时序,和LCD显示的时序一样,道理是一样的: (6)、主要的寄存器:分辨率、YUV顺序、X轴、Y轴镜相、翻转 以上工作完成后,也许还有一些问题,分辨率太小; YU

17、V顺序不对图像不对; XY图像方向。这些工作完成后,如果还有什么细节的问题,如果你想花时间,看规格书里面的寄存器可以解决的,如果不想看,找模组厂的FAE,他们专业的,很快会帮你搞定。 (7)、摄像头的硬件接口 二、S5pv310上Camera主控芯片上的硬件接口 1、CAMIF   Camera Interface 先看一下摄像头接口框图:(这个看着有点抽像,我们放这里,先了解一下,其实驱动中一般不会涉及到这里,不过我们这里分析了,就把这个带出来了) (1)、摄像头接口的主要属性: a、支持多种输入接口:(就是上面我们看到的四模式)     DMA (AXI 64-

18、bitinterface) 模式;     MIPI (CSI) 模式;     ITU-R BT 601/ 656/ 709模式;     Direct FIFO (PlayBack)模式; b、支持多种输出模式:     DMA (AXI 64-bitinterface) 模式;     Direct FIFO 模式; c、支持数码变焦Digital Zoom In (DZI) capability; d、支持多摄像头输入; e、 支持视频同步信号极性可编程控制; f、支持最大输入分辨率为8192X8192; g、支持图像翻转(X轴、Y轴镜相,90、180、270翻转

19、 h、支持多种图片格式;  i、支持捕获帧控制; j、支持的图像特效。 2、FIMC  Fully InteractiveMobile Camera     摄像头的采集的数据要CPU无法直接处理,主控芯片里面集成了Camera控制器,叫FIMC(FullyInteractive Mobile Camera)。摄像头需要先把图像数据传给控制器,经过控制器处理(裁剪拉升后直接预览或者编码)之后交给CPU处理。实际上摄像头工作需要的时钟(MCLK)也是FIMC给它提供的。     在s5pv310上的摄像头接口是一个FIMC(完全交互式移动相机接口),支持ITUR BT-601-6

20、05标准、AMX接口、MIPI接口 MIPI 、ITU、AMX (1)、ITU国际电信联盟无线电通信部门ITU-RRadiocommunication Sector of ITU 简称ITU-RITU-R BT.601 16位数据传输;Y、U、V信号同时传输,是并行数据,行场同步单独输出。 ITU-R BT.6568/10位数据传输;不需要同步信号;串行数据传输;传输速率是601的2倍;先传Y,后传UV。行场同步信号嵌入在数据流中。 (2)、MIPI(移动行业处理器接口)是MobileIndustry Processor Interface的缩写 MIPI 规范:Camera工作组:M

21、IPI Camera Serial Interface 1.0specification .Camera Serial Interface 2 v1.0 (CSI-2) (3)、AMX(Advanced eXtensible Interface)是一种总线协议,该协议是ARM公司提出的AMBA(Advanced Microcontroller BusArchitecture)3.0协议中最重要的部分,是一种面向高性能、高带宽、低延迟的片内总线。 3、接口信息 FIMC信号定义如下所示(YCbCr模式) Signal I/O Description    Type HREF I

22、 行同步信号   PCLK I 像素时钟 DATA[7:0] I 像素数据 FIELD O FIELD信号 MCLK O 系统时钟信号   通过CAM_MCLK给摄像头提供时钟,RST是复位线,PWDN在摄像头工作时应该始终为低。HREF是行参考信号,PCLK是像素时钟,VSYNC是场同步信号。一旦给摄像头提供了时钟,并且复位摄像头,摄像头就开始工作了,通过HREF,PCLK和VSYNC同步传输数字图像信号。数据是通过DATA0~DATA7这八根数据线并行送出的。 4、不同接口模式的工作时序 ITU-R BT 656输入时序图,这种方式下同步信号已经内嵌

23、到视频数据中了,因此不需要额外的行和帧同步信号。 ITU-R BT 601输入时序图,这种方式下行和帧同步信号独立于视频数据,因此需要同步信号。 (ITU-R BT 601: 16位数据传输;21芯;Y、U、V信号同时传输。   ITU-R BT 656: 9芯,不需要同步信号;8位数据传输;串行视频传输;传输速率是601的2倍;先传Y,后传UV。) 同步信号的时延参数 Ø        t1:表示VSYNC前、后插入周期 Ø        t2:表示HREF前插入周期 Ø        t3:表示 HREF宽度 Ø        t4:表示HREF后插入周期  

24、 5、camera的时钟域,三个时钟:系统时钟、PCLK、MCLK     每个摄像头接口包括三个时钟域,每一个时钟域是系统总线时钟,第二个是摄像头像素时钟PCLK,第三个时钟域为内部时钟MCLK。系统总线时钟必需高于PCLK, CAM_MCLK 必需固定频率分频,如PLL时钟。如果有外部时钟晶振,CAM_MCLK 空掉。不需要同步MMCLK,PCLK应该与schmitt-triggered电平移位器连接。 6、硬件接口电路 主控芯片上的接口: camera 接口 分类: 2012-07-08 23:13 5257人阅读 (4) 关键词:android  

25、camera CMM 模组 camera参数  CAMIF   V4L2   平台信息: 内核:linux 系统:android 平台:S5PV310(samsung exynos 4210)  下载:           前面两篇说的有点多了,不过多了解点东西也挺好的,遇到问题时可以有更多的思路,真正驱动是从这一块开始。一般BSP的camera都是完好的,我们只用关心驱动这些就可以了。 1. V4L2 1)简介         在Linux中,摄像头方面的标准化程度比较高,这个标准就是V4L2驱动程序,这也是业界比较公认的方式。         V4L全

26、称是Video for Linux,是Linux内核中标准的关于视频驱动程序,目前使用比较多的版本是Video for Linux 2,简称V4L2。它为Linux下的视频驱动提供了统一的接口,使得应用程序可以使用统一的API操作不同的视频设备。从内核空间到用户空间,主要的数据流和控制类均由V4L2驱动程序的框架来定义。 V4L2驱动程序一般只提供Video数据的获得,而如何实现视频预览,如何向上层发送数据,如何把纯视频流和取景器、视频录制等实际业务组织起来,都是camera的硬件抽象层需要负责的工作。 V4L2驱动核心实现为如下文件:drivers/media/video/v4l2-de

27、v.c。 V4l2-dev.h中定义的video_device是V4L2驱动程序的核心数据结构,它为具体的摄像头sensor驱动提供了接口调用。 V4l2的采集过程(应用程序): 1)     打开设备,获得文件描述符; 2)     设置图片格式; 3)     分配缓冲区; 4)     启动采集过程,读取数据; 5)     停止采集,关闭设备。   2)数据结构 V4L2的主要数据结构是video_device,定义在v4l2_dev.h中: [cpp] 1. struct video_device   2. {   3.     /* device 

28、ops */   4.     const struct v4l2_file_operations *fops;  /*接口函数指针*/   5.    6.     /* sysfs */   7.     struct device dev;      /* v4l 设备结构 */   8.     struct cdev *cdev;      /* 字符设备结构*/   9.    10.     /* Set either parent or v4l2_dev if your driver uses v4l2_device */   11.     struct de

29、vice *parent;      /* 设备父指针 */   12.     struct v4l2_device *v4l2_dev;   /* v4l2设备指针*/   13.    14.     /* device info */   15.     char name[32];  /*设备名称*/   16.     int vfl_type;   17.     /* 'minor' is set to -1 if the registration failed */   18.     int minor;    /*次设备号*/   19.     u16 

30、num;   20.     /* use bitops to set/clear/test flags */   21.     unsigned long flags;   22.     /* attribute to differentiate multiple indices on one physical device */   23.     int index;   24.    25.     /* V4L2 file handles */   26.     spinlock_t      fh_lock; /* Lock for all v4l2_fhs *

31、/   27.     struct list_head    fh_list; /* List of struct v4l2_fh */   28.    29.     int debug;          /* debug 级别*/   30.    31.     /* Video 标准变量 */   32.     v4l2_std_id tvnorms;        /* Supported tv norms */   33.     v4l2_std_id current_norm;   /* Current tvnorm */   34.    35.  

32、   /* 回调函数 */   36.     void (*release)(struct video_device *vdev);   37.    38.     /* ioctl 回调函数 */   39.     const struct v4l2_ioctl_ops *ioctl_ops;      40. };   struct video_device { /* device ops */ const struct v4l2_file_operations *fops; /*接口函数指针*/ /* sysfs */ struct device

33、 dev; /* v4l 设备结构 */ struct cdev *cdev; /* 字符设备结构*/ /* Set either parent or v4l2_dev if your driver uses v4l2_device */ struct device *parent; /* 设备父指针 */ struct v4l2_device *v4l2_dev; /* v4l2设备指针*/ /* device info */ char name[32]; /*设备名称*/ int vfl_type; /* 'minor' is set to

34、1 if the registration failed */ int minor; /*次设备号*/ u16 num; /* use bitops to set/clear/test flags */ unsigned long flags; /* attribute to differentiate multiple indices on one physical device */ int index; /* V4L2 file handles */ spinlock_t fh_lock; /* Lock for all v4l2_fhs *

35、/ struct list_head fh_list; /* List of struct v4l2_fh */ int debug; /* debug 级别*/ /* Video 标准变量 */ v4l2_std_id tvnorms; /* Supported tv norms */ v4l2_std_id current_norm; /* Current tvnorm */ /* 回调函数 */ void (*release)(struct video_device *vdev); /* ioctl 回调函数 */ const s

36、truct v4l2_ioctl_ops *ioctl_ops; }; 主要接口函数有: intvideo_register_device(struct video_device *vdev, int type, int nr); static intv4l2_ioctl(struct inode *inode, struct file *filp,       unsigned int cmd, unsigned long arg); 2.  FIMC                      1)简介 FIMC这个模块不仅仅是一个摄像头的控制接口,它还承担着V4L2的o

37、utput功能和overlay的功能。 FIMC的驱动在内核中的位置:drivers/media/video/samsung/fimc 它包含下边的文件:       fimc_regs.c         fimc_capture.c         fimc_dev.c         fimc_output.c         fimc_overlay.c         fimc_v4l2.c 它们的组织关系如下: 可以看到,FIMC的驱动实现了v4l2所有的接口,可以分为v4l2-input设备接口,v4l2-output设备接口以及v4l2-overlay设

38、备接口。这里我们主要关注v4l2-input设备接口,因为摄像头属于视频输入设备。 fimc_v4l2.c里面注册了很多的回调函数,都是用于实现v4l2的标准接口的,但是这些回调函数基本上都不是在fimc_v4l2.c里面实现的,而是有相应的.c分别去实现。比如: v4l2-input设备的操作实现:fimc_capture.c         v4l2-output设备的操作实现: fimc_output.c         v4l2-overlay设备的操作实现: fimc_overlay.c 这些代码其实都是和具体硬件操作无关的,这个驱动把所有操作硬件寄存器的代码都写到一个文件

39、里面了,就是fimc40_regs.c。这样把硬件相关的代码和硬件无关的代码分开来实现是非常好的方式,可以最大限度的实现代码复用。  2) 数据结构    FIMC的主要数据结构fimc_control,定义在fimc.h中: [cpp] 1. struct fimc_control {   2.     int             id;     /* 控制器 id */   3.     char                name[16];   4.     atomic_t            in_use;   5.     void __iomem  

40、          *regs;      /* 寄存器 i/o */   6.     struct clk          *clk;       /* interface clock */   7.     struct regulator    *regulator;     /* pd regulator */   8.     struct fimc_meminfo     mem;        /* for reserved mem */   9.    10.     /* kernel helpers */   11.     struct mutex    

41、        lock;       /* controller lock */   12.     struct mutex            alloc_lock;   13.     struct mutex            v4l2_lock;   14.     wait_queue_head_t       wq;   15.     struct device           *dev;   16.     int             irq;   17.    18.     /* v4l2 related */   19.     stru

42、ct video_device     *vd;   20.     struct v4l2_device      v4l2_dev;   21.    22.     /* fimc specific */   23.     struct fimc_limit       *limit;     /* H/W limitation */   24.     struct s3c_platform_camera  *cam;       /* activated camera */   25.     struct fimc_capinfo     *cap;       /*

43、 capture dev info */   26.     struct fimc_outinfo     *out;       /* output dev info */   27.     struct fimc_fbinfo      fb;     /* fimd info */   28.     struct fimc_scaler      sc;     /* scaler info */   29.     struct fimc_effect      fe;     /* fimc effect info */   30.    31.     enum 

44、fimc_status        status;   32.     enum fimc_log           log;   33.    34.     u32             ctx_busy[FIMC_MAX_CTXS];   35. };   struct fimc_control { int id; /* 控制器 id */ char name[16]; atomic_t in_use; void __iomem *regs; /* 寄存器 i/o */ struct clk *clk; /* interf

45、ace clock */ struct regulator *regulator; /* pd regulator */ struct fimc_meminfo mem; /* for reserved mem */ /* kernel helpers */ struct mutex lock; /* controller lock */ struct mutex alloc_lock; struct mutex v4l2_lock; wait_queue_head_t wq; struct device *dev; int

46、 irq; /* v4l2 related */ struct video_device *vd; struct v4l2_device v4l2_dev; /* fimc specific */ struct fimc_limit *limit; /* H/W limitation */ struct s3c_platform_camera *cam; /* activated camera */ struct fimc_capinfo *cap; /* capture dev info */ struct fimc_outinfo

47、out; /* output dev info */ struct fimc_fbinfo fb; /* fimd info */ struct fimc_scaler sc; /* scaler info */ struct fimc_effect fe; /* fimc effect info */ enum fimc_status status; enum fimc_log log; u32 ctx_busy[FIMC_MAX_CTXS]; }; 因为FIMC一共有三套一样的控制器(fimc0, fimc1, fimc2),

48、所以驱动里使用了一个数组来描述: [cpp] 1. struct video_device fimc_video_device[FIMC_DEVICES] = {   2.     [0] = {   3.         .fops = &fimc_fops,   4.         .ioctl_ops = &fimc_v4l2_ops,   5.         .release = fimc_vdev_release,   6.     },   7.     [1] = {   8.         .fops = &fimc_fops,   9.      

49、   .ioctl_ops = &fimc_v4l2_ops,   10.         .release = fimc_vdev_release,   11.     },   12.     [2] = {   13.         .fops = &fimc_fops,   14.         .ioctl_ops = &fimc_v4l2_ops,   15.         .release = fimc_vdev_release,   16.     },   17. };   struct video_device fimc_video_device[F

50、IMC_DEVICES] = { [0] = { .fops = &fimc_fops, .ioctl_ops = &fimc_v4l2_ops, .release = fimc_vdev_release, }, [1] = { .fops = &fimc_fops, .ioctl_ops = &fimc_v4l2_ops, .release = fimc_vdev_release, }, [2] = { .fops = &fimc_fops, .ioctl_ops = &fimc_v4l2_ops, .release

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服