轉自:https://www.cnblogs.com/huangchaosong/p/7146020.html
第一章 Camera基礎
1,Image Sensor類型
a) YUV Sensor
YUV Sensor輸出的Data格式爲YUV,圖像的效果處理使用Sensor內部的ISP,BB端接收YUV格式的data後只進行格式的轉換,效果方面不進行處理,由於Sensor內部的ISP處理能力有限,且YUV Sensor的數據量比較大(YUV422的格式1個pixel2個byte),一般Size都比較小,常見的YUV sensor都是5M以下
b) Raw Sensor
Raw Sensor輸出的Data格式爲Raw,圖像的效果處理使用BB端的ISP,BB端接收Raw data後進行一系列的圖像處理(OB,Shading,AWB,Gamma,EE,ANR等),效果方面由BB端控制,需要針對不同的模組進行效果調試,Raw sensor是目前的主流,數據量比YUV Sensor小(RAW10 格式的sensor 1個pixel 10個bit)使用平臺ISP處理,能支持較大的size
2,硬件接口
簡單說來,Camera的接口分爲並行和串行兩種方式,而目前我們平臺主要支持的串行方式爲mipi接口,Parallel接口和mipi接口的介紹可以參考下圖
3,常見基本概念
a) 三路電壓
camera包含的三路電壓爲模擬電壓(VCAMA),數字電壓(VCAMD),IO口電壓(VCAMIO)
b) I2C信號
BB與Sensor端通過I2C來通信(讀寫寄存器),包括SCL(I2C Clock) SDA(I2C Data)信號
c) mipi幾條lane
mipi data是成對的差分信號,MIPI_RDN和MIPI_RDP,有幾對這樣的pin腳,則說明是幾條lane,同一顆sensor由於register setting不同,輸出的信號有可能是2 lane或者4lane等
d) parallel高低八位
Parallel接口一般Data有10根pin,分別叫做Data0~Data9,Parallel sensor輸出的data信號是8根pin時,這八根pin接到的是Data0~Data7還是Data2~Data9,需要配置正確,叫做接到高八位或者低八位,接錯了可能產生如下現象
e) Data Format
Sensor輸出的數據格式,對於YUV Sensor來說,Data Fomat一般有YUYV,YVYU,UYVY等,配置不對可能會導致顏色和亮度錯掉,例如下圖
對於Raw Sensor來說,Data Format就是First Pixel的顏色,分爲R,Gr,Gb,B,配置不對會導致顏色錯誤
f) MCLK
BB提供給Sensor的外部clock
g) PCLK
Parallel接口的Sensor輸出的clock,該clock變化一次,data更新一次
h) mipi 信號
mipi信號包括mipi clock和mipi data,該信號是高速信號,用來傳輸mipi數據包
第二章 Camera軟件架構
主要包含三個部分的介紹:
1)Android Camera 架構:Android系統原生架構簡要介紹.
2)Mediatek Android Camera架構: 簡要介紹Mediatek平臺在Android系統基礎上Camera 的架構.
3)Camera data path: 介紹在平臺端Camera的數據流.
1.下圖爲Android Camera 架構
Camera根據Android 架構從上至下可分爲
1)Applications: 最上層的應用,編譯後生成Camera APK;
2)Application Framework: 主要爲Applications提供API;
3)JNI: 使Application Framework和Libraries可交互;
4)Libraries: 包括Camera Framework和Camera Service(camera service和camera client);
5)HAL: 硬件抽象層, 用來鏈接driver和 Camera Service;
6)Kernel: image sensor driver的實作.
其中2)~4)的部分基本爲Android原生的架構和code,Mediatek會有一些拓展,而HAL和Kernel層爲Mediatek主要實作的部分,Camera APK是Mediatek基於Android 原生Camera APK修改的應用.
2.下圖爲MT6589/82/72/92/88平臺基於Android架構上, ,Camera從application到kernel層詳細的架構.
1)藍色部分主要由Java實現(偏向應用層)、黃色爲JNI實現(C++,銜接Java層和Native層), 綠色由C++實現(通常稱爲Native層),而棗紅色爲C實現(Kernel 層).
2) HAL libraries爲Mediatek在HAL層的實現,主要分Camera HAL和Camera Core兩大部分.Camera HAL銜接Camera Service並響應它的需求,實現各個feature的scenario; 而Camera Core提供平臺一些通用的數據流控制接口.
3.最後這部分爲Camera的數據流簡要介紹
說明:
1) TG(Timing Generate):從sensor獲取數據,並送給ISP處理.
2) Platform Data Processor: 包括平臺在後端對圖像數據進行resize、rotate、flip、format convert等處理.它可以同時有兩個buffer輸出.
當normal preview時,port1輸出給display,port2輸出給face detection或者app preview callback
當normal capture時,port1輸出大圖給jpeg encoder,port2輸出小圖給回顯和thumbnail encode.
當video record時,port1輸出給display,port2輸出給video encoder.