FSL Camer 调试
来源:互联网 发布:js进度条特效 编辑:程序博客网 时间:2024/06/05 14:55
目录(?)[+]
1 概述
FSL iMx53 Camera Android驱动调试完成,根据需要增加了Tw2836、Tw9912、NT99140模组的驱动代码。
2 CameraHal
2.1 CameraHal代码分析
Camera Hal层代码见下图1:
图1
其中CamerHal.cpp为camer硬件抽象层,主要是接口,完成CamerService到V4l2驱动之间的数据传递与控制,Camera_pmem.cpp为CameraHal中mem(内存)数据处理函数的调用,CaptureDeviceInterface.cpp完成接口的建立,JpegEncoderInterface.cpp是JPEG编码的接口建立,JpegEncodeSoftware.cpp是Jpeg软件编码的实现,PostProcessDeviceInterface.cpp为PostProcessDevice接口,PP_ipulib.cpp为PostProcessDevice的函数实现,V4l2CapDeviceBase.cpp是V4l2 capture的实现,V4l2CsiDevice.cpp是 V4l2CapDeviceBase的扩展实现。
2.2 Preview
CameraHal决定了camer数据到显示的数据流向,即通过overlay显示还是通过Surface来显示,此选择通过CameraHal.h中的
这个函数来决定,return true为使用overlay,相反,通过Surface上层来显示。默认为使用overlay方式。
2.2.1.1 Overlay方式
Overlay一般用于视频播放、Camera preview等高帧率的显示,或者一些有两层UI的显示情况,FSL自身完成的Camera是按Overlay的方式来做的。使用Overlay方式Preview,可以从CameraService.cpp (frameworks\base\services\
camera\libcameraservice)看起(见图2):
图2
其中mUseOverlay就是CameraHal中useOverlay()的返回值即true,调用setoverlay(见图3),
图3
这样,就建立了overlay图层来显示camera的图像,注意overlay目前仅支持以下格式见图4(如果V4l2获取的的格式和这些不同,将显示不正确,需通过软件转换或者通过设置制式,通过IPU来转换,具体见后面介绍)。
图4
再回到图2,startpreview(mHardware->startPreview();),此时转入CameraHal中去。
前面几个函数:PrepareCaptureDevices,PreparePostProssDevice,PreparePreviwBuf,PreparePreviwMisc都是Camra开始之前做准备工作,初始化参数,注册和申请buffer;CameraHALPreviewStart中,创建CaptureFrameThread,PreviewShowFrameThread,EncodeFrameThread三个线程,来处理Capture、Preveiw以及Encode的数据。至此,三个线程开始循环、来进行camera数据的捕获、显示、和编解码。
2.2.1.2 Surface方式
对于一般的应用来说,使用overlay已经满足了要求,而如果特殊需要,如其他应用占用overlay,硬件冲突,此时可通过修改CameraHal.h中的useoverlay函数返回false。与overlay调用的不同在于startPreviewMode中registerPreviewBuffers。需要完善的是,Surface本身显示的RGB565的图像,而Camera采集到的大多为YUV的图像,此时需要进行数据的转换,并把Buffer数据的格式,修改为RGB565的格式,修改后的代码如下:
注意:在capture时通过软件的方式进行转换YUV到RGB的话,会明显感觉到图像的移动偏慢,为了保证流畅性,可以通过FSL的IPU在底层进行转换,V4l2CsiDevice :: V4l2ConfigInput(struct capture_config_t *pCapcfg)里的input决定了数据流为csi-enc还是csi-prp-enc,这样做,可以保证预览的效果,但是由于视频的编码,仅支持YUV格式,底层转换后,要在EncodeFrameThread进行RGB到YUV的转换后再进行编码,对于视频编码的效果,也会有一定的影像,需根据需要折中处理。
2.3 拍照
调用流程和Preview一致,都是从CameraService到CameraHal。拍照是一组单独的流程,从新打开,根据获得的jpegencode参数来设置camera参数,并启动camera,获取一帧图像数据,送到jpegencode编码。
2.4 摄像
摄像的数据流程主要是在encodeframeThread中。
3 驱动调试
3.1 V4l2驱动
V4l2是camera HAL层与底层的接口,来完成数据的传递。
3.2 芯片驱动
目前调试过两种类型的摄像头,一种是ITU-R 656 YUV输出的Video Decode,另外一种是YUV输出的摄像头模组;从目前遇到的情况看,主要看以下几个关键参数的设置和i2c的调试。
Probe函数里面
cameradata.pix.width = video_fmts[video_idx].raw_width;
camera_data.pix.height = video_fmts[video_idx].raw_height;
camera_data.pix.pixelformat = V4L2_PIX_FMT_UYVY; /* YUV422 */
camera_data.pix.priv = 1; /* 1 is used to indicate TV in */
camera_data.on = true;
camera_data.csi = plat_data ->csi;
以及g_ifparm中的
p->u.bt656.clock_curr = camera_data.mclk;// 0 –CCIR656 1-Gated
p->if_type = V4L2_IF_TYPE_BT656;
p->u.bt656.mode=V4L2_IF_TYPE_BT656_MODE_NOBT_8BIT;
p->u.bt656.clock_min = CAMERA_XCLK_MIN;
p->u.bt656.clock_max = CAMERA _XCLK_MAX;
- FSL Camer 调试
- FSL Camer 调试
- FSL Camer 调试
- FSL
- fsl imx51 android真机调试
- fsl Camera 调试第一篇 CameraModule.cpp
- fsl Camera调试第二篇 CameraHal.cpp
- fsl Camera调试第三篇 V4l2CapDeviceBase.cpp
- fsl Camera调试第五篇 ov5640.c
- 调试FSL Android GPS学习select和epoll的用法
- 调试FSL Android GPS学习select和epoll的用法
- FSL安装
- FSL, K81
- 概念完整性非常重要-camer
- Camer 录像总结
- Android -Camer使用!
- Camer的用法:相册+相机
- camer驱动模块加载分析
- linux下用脚本实现:监控一个进程,不存在则将其启动。
- c标签和struts2标签一些用法上的区别
- 如何减小与“大牛”的差距
- 多进程和多线程
- 字符串与byte数组的转换
- FSL Camer 调试
- 怎样做好seo优化 以seo基础问题为基点
- cf 363D
- 关于ibatis in (1,2,3)的问题解决方案
- android camera学习 camera参数设置
- 随机梯度下降法
- 判断是否闰年
- DNN首页静态化
- http://www.itsoku.com 一个IT技术学习和分享的平台!