日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android NVidia Tegra2平台Camera架构浅析

發(fā)布時(shí)間:2023/12/18 Android 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android NVidia Tegra2平台Camera架构浅析 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。