现在的位置: 首页 > 综合 > 正文

【转】 mtk平台camera流程原理(转+改)

2013年10月04日 ⁄ 综合 ⁄ 共 1297字 ⁄ 字号 评论关闭
转载自 zhaigangvvv
最终编辑 zhaigangvvv

以23C的平台为例子。

 

1. mmi_camera_entry_app_screen 进入MMI,CAMERA进行分配动态内存,供采集数据处理。

2. mmi_camera_entry_app_screen_internal,进入判断T卡等环境相关,---》CAMERA_ENTER_STATE(CAMERA_STATE_PREVIEW),进入预览状态,mmi_camera_entry_preview_state,获取用户的对CAMERA的设置参数,如大小,特效等参数。同时,注册进入CAMERA后的快捷键,为CAMERA的界面,画OSD层,画出左右软键到OSD LAYER的BUFFER中,通过该函数mmi_camera_preview_set_blt_layer合并OSD层和基层,通过函数gdi_layer_blt_previous实现把合并后的层数据刷到LCD上。

3. mmi_camera_preview_start,开始进入CAMERA预览状态,获得并初始化CAMERA驱动所要的设置参数(camera_setting_data),通过gdi_layer_push_and_set_active函数激活CAMERA的PREVIEW层,也就是预览时的BUFFER用来保存SENSOR输出的数据。

4. mdi_camera_preview_start, --》mdi_camera_preview_start_internal,设置好状态,准备打开SENSOR了,取得驱动需要的各种参数(cam_preview_data),

5. media_cam_preview,发送消息到下层,通知打开SENSOR,设置好CAMERA预览的事件,

6. cam_preview_req_hdlr,下层开始启动CAMERA预览事件。

 

接下来,预览的刷屏都是通过SENSOR的VSYC接到中断上来实现的,每来个VSYC中断,把PREVIEW LAYER的BUFFER,经过YUV-RGB的转换,通过DMA配置来刷到LCD上。

 

由于MTK把刷屏的那部分没有开放,所以跟到6就跟不下去了,在6那里有几个CAM_SET_EVENT(CAM_EVT_PREVIEW);由于对MTK的操作系统不是很熟悉,不知道这句话是什么意思,#define CAM_SET_EVENT(evt_) do{                                                          /
                              kal_set_eg_events(cam_context_p->cam_event, (evt_),KAL_OR);/
                              CAM_SET_EVT(evt_,__LINE__);                                /
                              } while(0)

预览过程中通过一个while循环不断发中断完成

抱歉!评论已关闭.