1. 程式人生 > >mtk 拍照流程分析

mtk 拍照流程分析

以下是16中intent:
typedef enum {
     eIntent_CameraPreviewStart = ECmd_CameraPreviewStart,
     eIntent_CameraPreviewEnd = ECmd_CameraPreviewEnd,
     eIntent_CamcorderPreviewStart = ECmd_CamcorderPreviewStart,
     eIntent_CamcorderPreviewEnd = ECmd_CamcorderPreviewEn
     eIntent_PrecaptureStart = ECmd_PrecaptureStart,
     eIntent_PrecaptureEnd = ECmd_PrecaptureEnd,
     eIntent_CaptureStart = ECmd_CaptureStart,
     eIntent_CaptureEnd = ECmd_CaptureEnd,
     eIntent_RecordingStart = ECmd_RecordingStart,
     eIntent_RecordingEnd = ECmd_RecordingEnd,
     eIntent_VsyncUpdate = ECmd_Update,
     eIntent_AFUpdate = ECmd_AFUpdate,
     eIntent_AFStart = ECmd_AFStart,
     eIntent_AFEnd = ECmd_AFEnd,
     eIntent_Init = ECmd_Init,
     eIntent_Uninit = ECmd_Uninit
} EIntent_T;

以下是9中狀態:

typedef enum
{
    eState_Invalid=-1,
    eState_Uninit,
    eState_Init,
    eState_CameraPreview,
    eState_CamcorderPreview,
    eState_Precapture,
    eState_Capture,
    eState_Recording,
    eState_AF
} EState_T;
camera各種動作就是5種大的eState ,每個eState配置相應的intent。檢視aaa_state.h可以看到組合方式。

aaa_state.cpp:

sendIntent(intent2type<eIntent_CameraPreviewStart>)   ---->          transitState(eState_Init, eState_CameraPreview);
sendIntent(intent2type<eIntent_CamcorderPreviewStart>)--->         transitState(eState_Init, eState_CamcorderPreview);

aaa_state_af.cpp :

sendIntent(intent2type<eIntent_AFStart>)    ----->  return  S_3A_OK;

sendIntent(intent2type<eIntent_AFEnd>)  ------> 根據g_nextState設定:transitState(eState_AF, g_nextState) or   transitState(eState_AF, g_ePrevState);

sendIntent(intent2type<eIntent_CameraPreviewStart>)  ----->設定 g_nextState = eState_Invalid;

sendIntent(intent2type<eIntent_RecordingEnd>)   ------->return  S_3A_OK;

sendIntent(intent2type<eIntent_CamcorderPreviewStart>)  ----> 設定   g_nextState = eState_Invalid;

sendIntent(intent2type<eIntent_CameraPreviewEnd>) ---->    g_nextState = eState_Invalid;

sendIntent(intent2type<eIntent_CamcorderPreviewEnd>)  ---->    g_nextState = eState_Invalid;

sendIntent(intent2type<eIntent_VsyncUpdate>)  ------>

sendIntent(intent2type<eIntent_PrecaptureStart>) ---->  g_nextState = eState_Precapture;

sendAFIntent(intent2type<eIntent_VsyncUpdate>, state2type<eAFState_PreAF>)    ----> transitAFState(eAFState_AF);

aaa_state_camera_preview.cpp

sendIntent(intent2type<eIntent_CameraPreviewStart>)   ------>

sendIntent(intent2type<eIntent_CameraPreviewEnd>)  ---------> transitState(eState_CameraPreview, eState_Init);

sendIntent(intent2type<eIntent_VsyncUpdate>)

sendIntent(intent2type<eIntent_AFUpdate>)

sendIntent(intent2type<eIntent_PrecaptureStart>)  -----> transitState(eState_CameraPreview, eState_Precapture);

sendIntent(intent2type<eIntent_CaptureStart>) ---->  transitState(eState_CameraPreview, eState_Capture);

sendIntent(intent2type<eIntent_AFStart>) ---->     transitState(eState_CameraPreview, eState_AF);

sendIntent(intent2type<eIntent_AFEnd>) --->

sendIntent(intent2type<eIntent_RecordingStart>) ---->

sendIntent(intent2type<eIntent_RecordingEnd>)------>

aaa_state_precapture.cpp   類繼承:struct StatePrecapture : public IState

sendIntent(intent2type<eIntent_PrecaptureStart>)---->

sendIntent(intent2type<eIntent_PrecaptureEnd>) ---->

sendIntent(intent2type<eIntent_VsyncUpdate>)---->  transitState(eState_Precapture, eState_AF);

sendIntent(intent2type<eIntent_AFUpdate>) ---->

sendIntent(intent2type<eIntent_CaptureStart>)  -----> transitState(eState_Precapture, eState_Capture);

sendIntent(intent2type<eIntent_CameraPreviewEnd>)  ---->

sendIntent(intent2type<eIntent_CamcorderPreviewEnd>) ---->

sendIntent(intent2type<eIntent_AFEnd>)------>

IState是以上所有類的基類,如果沒有例項化對應類而直接調到基類函式,會列印E_3A_UNSUPPORT_COMMAND的資訊。

相關推薦

mtk 拍照流程分析

以下是16中intent:typedef enum { eIntent_CameraPreviewStart = ECmd_CameraPreviewStart, eIntent_CameraPreviewEnd = ECmd_CameraPreview

newlib 中的 crt0 流程分析

gets eno -s style and 條件判斷 obj als example 最近對 newlib 中的啟動代碼 crt0 產生了興趣,於是就分析了下其代碼。crt0 的源碼位於 libgloss/arm/crt0.S,為了兼容各種 ARM 架構,crt0.S 中有

PowerManagerService流程分析

other nes func 靜下心來 沒有 light 事情 統一管理 mon 一、PowerManagerService簡介   PowerManagerService主要服務Android系統電源管理工作,這樣講比較籠統,就具體細節上大致可以認為PowerManage

翻翻git之---自己定義郵件發送buttonSendButton(流程分析,實現思路能夠學習下)

現象 date() 加速 lag restart xtend fas trace str 轉載請註明出處:王亟亟的大牛之路 距離過春節還有1天。繼續這一系列的git翻料之旅。 昨天的工具類真的非常棒,這裏再推崇一下 傳送門:http://blog.c

Android5 Zygote 與 SystemServer 啟動流程分析

進一步 null 正常的 rtb 這樣的 ket constant vml resp Android5 Zygote 與 SystemServer 啟動流程分析 Android5 Zygote 與 SystemServer 啟動流程分析 前言 zy

深入了解View(一)—— measure測量流程分析

sans asc res markdown pla 轉換成 高亮 trac 體驗 歡迎使用Markdown編輯器寫博客 本Markdown編輯器使用StackEdit改動而來,用它寫博客。將會帶來全新的體驗哦: Markdown和擴展Markdow

開機啟動流程分析

boot 啟動流程 本節索引 在對系統啟動流程進行分析的時候,我想你一定是對系統有了一定的了解。系統的啟動目前來講大都為串行接力的方式來啟動。而所謂的並行方式的啟動方式也是某一個階段的並行。所以我按照系統啟動的順序來把文章連綴起來。 * BIOS階段 * BootLoader階段

kexec 內核快速啟動流程分析

-- 令行 並且 內存 tab 執行過程 family use -a 一、命令行 1. kexec -l $kpwd --append="$arg" 其中$kpwd =目標內核的路徑   $arg =傳給內核的參數,與/proc/cmdline一致時表示重啟現有內核

SpringMVC的流程分析(一)—— 整體流程概括

classes amp 不同 方法 restfu equals 類圖 strong .get SpringMVC的整體概括 之前也寫過springmvc的流程分析,只是當時理解的還不透徹所以那篇文章就放棄了,現在比之前好了些,想著寫下來分享下,也能增強記憶,也希望可以幫助到

深入淺出Mybatis系列(十)---SQL執行流程分析(源碼篇)(轉)

factor demo 讀取配置 gist wrapper load 任性 wrap 深入淺出 轉載自:http://www.cnblogs.com/dongying/p/4142476.html 1. SqlSessionFactory 與 SqlSession.   通

Spring Core Container 源碼分析三:Spring Beans 初始化流程分析

turn raw time -c rri add 步驟 引用 lin 前言 本文是筆者所著的 Spring Core Container 源碼分析系列之一; 本篇文章主要試圖梳理出 Spring Beans 的初始化主流程和相關核心代碼邏輯; 本文轉載自本人的私人博客,傷神

視圖解析流程分析

ron 圖解 tro ont 順序 分享圖片 實現類 成功 常用 1.SpringMVC如何解析視圖    2.具體說明    3.視圖    4.常用的視圖    5.視圖解析器    6.常用的視圖解析器實現類      程序員可以選擇一種視圖解析器

從0移植uboot (二) _啟動流程分析

title tco ret 沒有 返回 ips css location config 來源:Linux社區 作者:xiaojiang1025 : http://www.linuxidc.com/Linux/2017-02/141019.htm 經過

業務流程分析

業務部 bubuko body 業務 width wid 分析 com src 面向對象的現狀分析,圖書館業務部分用例圖。業務流程分析

數據綁定流程分析

attribute direct ive type 創建 com [] factor request 一:介紹 1.介紹   Spring MVC框架將ServletRequest對象及目標方法的入參實例傳遞給WebDataBinderFactory實例,以創建DataBi

流程分析方法與流程分級

流程分析 流程分析方法 流程分級 現實的企業流程是客觀存在的,流程分析是基於企業現實展開;流程分析是流程優化和流程管理的基礎和前提。任何企業的流程都是企業戰略和企業目標持續作用的結果,也就是說企業戰略與目標決定企業的組織架構,組織架構引導企業崗位的設置,每個崗位之間工作銜接的方式就產生了企業的現有

六、uboot 代碼流程分析---start.S

保護 rom 開始 sdram AS n) right can SM 6.1 _start 入口函數 6.1.1 vectors.S (arch\arm\lib)   從上一節可以知道,uboot 的入口函數為 _start 。此 函數定義在 vectors.S (arc

Android Camera fw學習(四)-recording流程分析

應用開發 facet internal server 中一 sca med erase 流程分析 Android Camera fw學習(四)-recording流程分析 備註:備註:本文是Android5.1學習筆記。博文按照軟件啟動流程分析。   且行且惜,一步一個腳印

u-boot.2012.10——mini2440(二、啟動流程分析)

我們 分享 默認 從數據 中斷 改變 處理 mini2440 https 參考資料:https://blog.csdn.net/suiyuan19840208/article/details/7239949 1、第一階段功能   * 硬件設備初始化   * 加載u-boot

新聞網站流程分析(寫得不錯)

判斷 獲取參數 點擊 存在 redis key 接受 mage post 一 : 生成圖片驗證碼:   1. 獲取參數, 前端生成的圖片驗證碼uuid(圖片名稱)   2. 檢驗參數是否存在(name圖片名稱,text驗證碼,image圖片)   3.調用擴展包生成驗證碼,