Android NVidia Tegra2平台Camera架构浅析
Android Camera相關(guān)code分布如下:
1、Camera上層app的架構(gòu)就不分析了,大家應(yīng)該都很清楚。
2、以下是Android多媒體常用c/s結(jié)構(gòu)中的client部分
frameworks/base/core/java/android/hardware/Camera.java, android.hardware.Camera
frameworks/base/core/jni/android_hardware_Camera.cpp, 生成庫libandroid_runtime.so
frameworks/base/libs/camera,生成庫libcamera_client.so;實(shí)現(xiàn)了Camera類,該類繼承了BnCameraClient,DeathRecipient。
以下是server部分:
frameworks/base/camera/libcameraservice,生成libcameraservice.so
實(shí)現(xiàn)了CameraService類,該類繼承了BnCameraService(ICameraService),并實(shí)現(xiàn)了instantiate(),其內(nèi)部包含一內(nèi)部類class Client : public BnCamera ,ICamera類的實(shí)現(xiàn)主要靠BnCamera. openCameraHardware()在該類中調(diào)用。
3、以下是Tegra2平臺(tái)特有的部分:
hardware/tegra/hal/libnvomxcamera,libcamera.so,實(shí)現(xiàn)CameraHardwareInterface接口,openCameraHardware()在該庫中實(shí)現(xiàn)。
hardware/tegra/core/drivers/openmax/ilclient,libnvomxilclient.so
該庫動(dòng)態(tài)加載libnvomx.so庫,并給包含9個(gè)OMX core 函數(shù)的結(jié)構(gòu)體NvxFramework賦值,通過這種方法繞過了PVMF。PMVF對(duì)于OMX來說其實(shí)也就是一個(gè)omx client.
hardware/tegra/core/drivers/openmax/il,libnvomx.so:OMX core 庫
libnvodm_imager.so:odm image 的hal庫,這部分默認(rèn)情況下NV只提供了binary,在full build時(shí)會(huì)將此庫copy到system目錄下,繼而集成到system.img中去。
libnvodm_query.so:odm 的查詢庫,對(duì)GPIO,供電,i2c等其他相關(guān)硬件配置在本庫完成。
對(duì)于一個(gè)手機(jī)支持兩個(gè)或多個(gè)camera的問題,個(gè)人看法是上層告訴底層使用哪一個(gè)camera,然后每次OMX會(huì)重新構(gòu)建OMX Graph,并在最后enable port的時(shí)候使用不同的camera硬件。上層處理基本保持一致。
在android tegra2中添加一個(gè)camera
Tegra芯片目前還沒有和android系統(tǒng)很好地整合,畢竟nvidia做作支持android的決定時(shí)間也不算太長,聽說已經(jīng)在做了,會(huì)在android3.0上整合好吧,這個(gè)會(huì)不會(huì)實(shí)現(xiàn)只是猜測。
在這種情況下,camera的驅(qū)動(dòng)當(dāng)然也就不會(huì)放在kernel下了,目前她被放在hardware/tegra/odm/product/***/下,要具體地添加一個(gè)camera及其驅(qū)動(dòng),主要步驟如下:
1)odm_kit/query/include/nvodm_query_discovery_imager.h
定義一個(gè)標(biāo)識(shí)序列,例如
#define QQ1234_GUID NV_ODM_GUID('s','_','Q','Q','1','2','3','4')
2)odm_kit/query/subboards/nvodm_query_discovery_e***_addresses.h
配置camera的硬件連接參數(shù)
#define QQ1234_PINS (NVODM_CAMERA_DEVICE_IS_DEFAULT)
static const NvOdmIoAddress s_ffaImagerQQ1234Addresses[] =
{
I2C配置;
Reset GPIO 配置;
powerdown GPIO 配置;
Camera VDD 配置;
VCSI 配置;
Video input 配置;
external Clock (CSUS)配置;
};
3)odm_kit/query/subboards/nvodm_query_discovery_e***_peripherals.h
camera設(shè)備入口地址同GUID關(guān)聯(lián)
// QQ1234
{
QQ1234_GUID,
s_ffaImagerQQ1234Addresses,
NV_ARRAY_SIZE(s_ffaImagerQQ1234Addresses),
NvOdmPeripheralClass_Imager
},
4)odm_kit/adaptations/imager/Android.mk
LOCAL_SRC_FILES += sensor_yuv_qq1234.c
5)odm_kit/adaptations/imager/imager_hal.c
添加Hal層會(huì)枚舉的camera類型
#include "sensor_yuv_qq1234.h"
DeviceHalTable g_SensorHalTable[] ={
....
{QQ1234_GUID, SensorYuvQQ1234_GetHal},
....
};
5)odm_kit/adaptations/imager/sensor_yuv_qq1234.c
odm_kit/adaptations/imager/sensor_yuv_qq1234.h
NvBool SensorYuvxQQ1234_GetHal(NvOdmImagerHandle hImager);
這是對(duì)camera設(shè)備的配置和功能的具體實(shí)現(xiàn)的文件。硬件校準(zhǔn)之類的工作主要就是修改sensor_yuv_qq1234.c
1: NvBool SensorYuvQQ1234_GetHal(NvOdmImagerHandle hImager) 2: ? 3: { 4: ? 5: if (!hImager || !hImager->pSensor) 6: ? 7: return NV_FALSE; 8: ? 9: hImager->pSensor->pfnOpen = SensorYuv_Open; 10: ? 11: hImager->pSensor->pfnClose = SensorYuv_Close; 12: ? 13: hImager->pSensor->pfnGetCapabilities = SensorYuv_GetCapabilities; 14: ? 15: hImager->pSensor->pfnListModes = SensorYuv_ListModes; 16: ? 17: hImager->pSensor->pfnSetMode = SensorYuv_SetMode; 18: ? 19: hImager->pSensor->pfnSetPowerLevel = SensorYuv_SetPowerLevel; 20: ? 21: hImager->pSensor->pfnGetPowerLevel = SensorYuv_GetPowerLevel; 22: ? 23: hImager->pSensor->pfnSetParameter = SensorYuv_SetParameter; 24: ? 25: hImager->pSensor->pfnGetParameter = SensorYuv_GetParameter; 26: ? 27: return NV_TRUE; 28: ? 29: } .csharpcode, .csharpcode pre {font-size: small;color: black;font-family: consolas, "Courier New", courier, monospace;background-color: #ffffff;/*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt {background-color: #f4f4f4;width: 100%;margin: 0em; } .csharpcode .lnum { color: #606060; }轉(zhuǎn)自:http://qiuzhenqing.blog.edu.cn/2010/581021.html
http://qiuzhenqing.blog.edu.cn/2010/591863.html
總結(jié)
以上是生活随笔為你收集整理的Android NVidia Tegra2平台Camera架构浅析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: glassfish linux,使用gl
- 下一篇: 常用的android脱壳工具,Andro