天天看點

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

轉載自 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循環不斷發中斷完成

繼續閱讀