camera常用知识及流程分析_第1页
camera常用知识及流程分析_第2页
camera常用知识及流程分析_第3页
camera常用知识及流程分析_第4页
camera常用知识及流程分析_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、福州瑞芯微电子有限公司福州瑞芯微电子有限公司 时间时间 讲师讲师Camera常用知识及流程分析常用知识及流程分析-让凌鹏www.rock-内容提要内容提要四、四、camerahal代码分析代码分析三、三、kernel相关代码分析相关代码分析二、上电识别二、上电识别camera流程流程一、基本概念一、基本概念五、五、3288和和3188及以前的代码差异及以前的代码差异六、出错时六、出错时log打印打印www.rock-一、一、基本概念基本概念1.1 1.1 常用常用cameracamera分类分类SOC SensorSOC Sensor:自带:自带ISPISP,输出,输出yuvyuv数据,使用数

2、据,使用cifcif接口,接口,因为因为cifcif接口不带接口不带ispisp,不对,不对cameracamera效果做处理。效果做处理。RAW SensorRAW Sensor:不带:不带ispisp,输出,输出sensorsensor采集原始灰度数据。采集原始灰度数据。目前发布的目前发布的mid_sdkmid_sdk中仅中仅32883288支持这种支持这种sensorsensor,这种就需要,这种就需要我们调试效果我们调试效果, ,使用使用mipimipi接口。接口。1.3 1.3 MIPIMIPI接口接口DOVDDDOVDD,DVDDDVDD,AVDDAVDDPWDNPWDN,MIPI

3、_RSTMIPI_RSTMCLKMCLK:24MHz24MHzMIPI Data,CLKMIPI Data,CLK一、一、基本概念基本概念1.3 CIF1.3 CIF接口接口(soc sensor,yuv)XCLK(MCLK),PCLKVSYNC一、基本概念二、上电识别二、上电识别camera流程流程www.rock-2.1 2.1 mediaservicemediaservice启动启动 在在init.rcinit.rc文件中文件中 service media /system/bin/mediaserver class main user media group system audio c

4、amera inet net_bt net_bt_admin net_bw_acct drmrpc mediadrm ioprio rt 4 启动启动mediaservicemediaservice的时候,的时候,main_mediaserver.cppmain_mediaserver.cpp中中int main(int argc, char* argv) AudioFlinger:instantiate(); MediaPlayerService:instantiate(); CameraService:instantiate(); /cameraservice的启动 AudioPolicy

5、Service:instantiate();二、上电识别二、上电识别camera流程流程www.rock- registerExtensions(); ProcessState:self()-startThreadPool(); IPCThreadState:self()-joinThreadPool();启动cameraservice的时候非常重要的一步:camera_get_number_of_cameras这是获取camera个数及camera相关参数的。#define CAMERAS_SUPPORT_MAX 2rk_cam_info_t gCamInfosCAMERAS_SUPPORT

6、_MAX;static signed int gCamerasNumber其实这个时候是获取camera参数到gCamInfos中,从这里也最多看到最多支持2个camera。注意注意: :这里容易识别不到设备,后续摄像头打不开。这里容易识别不到设备,后续摄像头打不开。三、三、kernel相关代码分析相关代码分析www.rock-3 3. .1 1 v4l2_subdev v4l2_device下面一个层次是v4l2_subdev,它需要和它的子设备进行通信,如果说camera host是一个v4l2_device设备,那么就可以将camera模组称为一个v4l2_subdev设备,它们之间的通

7、信可以采取多种方式常见的是I2C。 camera的驱动文件比较简单,它和v4l2_device都是在kerneldriversmediavideo 下面,以各型号命名,如ov5640.c gc0308.c 里面代码较简单,是一些寄存器数组和简单寄存器逻辑判断组成(如af),数组包括初始化,预览分辨率,最大分辨率,还有如各种效果如曝光,白平衡等需要设置的寄存器组,以及设置他们的函数三、三、kernel相关代码分析相关代码分析www.rock-3 3. .2 2 v4l2_device 如上所说,camera host是一个v4l2_device设备,即我们的cif相关驱动,cif驱动较sub_d

8、ev复杂一点。 在上面说的目录下面有rk30_camera_oneframe.c rk30_camera_pingpong.c两个文件,目前默认的为前一种模式,即单帧模式,后一种为乒乓模式。那host驱动就涉及到裁剪,格式,制式,videobuf的初始化与设置。当全部设置好,会设置寄存器设置开始接收stream流,当buf接受满后会产生中断,进入rk_camera_irq函数,会将camera数据存入队列,并将vb-state = VIDEOBUF_DONE; 四、四、camerahal代码分析代码分析www.rock-4 4. .1 1 camerahal的初始化 当一打开摄像头的时候,从f

9、ramework下来第一次执行的反函数是CameraHal:CameraHal(int cameraId),里面会创建很多进程, displayThreadCommandQ(displayCmdQ), displayThreadAckQ(displayAckQ), previewThreadCommandQ(previewCmdQ), previewThreadAckQ(previewAckQ), commandThreadCommandQ(commandCmdQ), commandThreadAckQ(commandAckQ), snapshotThreadCommandQ(snapshot

10、CmdQ), snapshotThreadAckQ(snapshotAckQ),之后执行的两个比较重要的函数,int CameraHal:cameraCreate(int cameraId)四、四、camerahal代码分析代码分析www.rock-和initDefaultParameters前一个函数,通过获取底层支持的数据格式和上层匹配,设置格式,以及申请必要的内存(ion).后一个初始化camera各种参数,获取支持的预览和拍照分辨率,获取底层支持的各种效果的控件,以及当前效果的默认值。初始化完这些,调用函数 mDisplayThread-run(CameraDispThread,AND

11、ROID_PRIORITY_URGENT_DISPLAY); mPreviewThread-run(CameraPreviewThread,ANDROID_PRIORITY_DISPLAY); mCommandThread-run(CameraCmdThread, ANDROID_PRIORITY_URGENT_DISPLAY); mAutoFocusThread-run(CameraAutoFocusThread, ANDROID_PRIORITY_DISPLAY); mSnapshotThread-run(CameraSnapshotThread, ANDROID_PRIORITY_NOR

12、MAL);那么整个hal层的进程循环全部开始。四、四、camerahal代码分析代码分析www.rock-4.2 camerahal的显示流程那么说下显示进程void CameraHal:displayThread()先是在preview进程中通过ioctl命令抓取buf数据 if (ioctl(iCamFd, VIDIOC_DQBUF, &cfilledbuffer1) runmPictureThread-runcapturePictureerr = hw_jpeg_encode(&JpegInInfo, &JpegOutInfo);copyAndSendRawIma

13、gecopyAndSendCompressedImage先是command进程接收拍照命令,在case下启动拍照进程,先申请拍照的buf,然后打开数据流,抓一帧数据存放,经过硬件编码成jpeg格式,通过copyAndSendCompressedImage返回给上层,当然在编码之前可以发送copyAndSendRawImage函数,直接发送原始数据。五、五、3288和和3188及以前的代码差异及以前的代码差异www.rock-5.1 两者差别 两者差别最大的就在camera大部分驱动放在camerahal做的。 3288的驱动文件放在hardwarerk29cameraSiliconImagei

14、sidrv,这里面只是简单camera芯片数组集合,以及一些函数结构体的赋值,部分操作代码放在库里面。3288比其他芯片多了isp(Image Signal Processing),当然对图像的处理代码也放在相应的isp库里面。 camera定义的地方也有所不一样hardwarerk29cameraConfigcam_board.xml 具体的定义的说明可以看相关文档六、出错时六、出错时log打印打印www.rock-4.1 4.1 32883288问题分析方法问题分析方法1.getprop1.getprop确认下确认下cameracamera相关库版本号相关库版本号2.log2.log:可以输入:可以输入setprop sys_graphic.cam_trace 1 setprop sys_graphic

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论