Android NVidia Tegra 2プラットフォームCameraアーキテクチャ浅分析


Android Camera関連code分布は以下の通りである。
1、Camera上部アプリの構造は分析しないので、みんなはよく知っているはずです。
2、以下はAndroidマルチメディアのC/s構造の中のclient部分です。
framwaorks/base/core/java/android/hardware/Camera.java,android.hard ware.ramera
frame eworks/base/core/jni/android_ハードワールCamera.cpp,クリンバイド_を生成します。runtime.so
frame eworks/base/libs/cameraを生成します。client.so;Cameraクラスを実現し、BnCamera Client、DeathRecipintを継承しました。
以下はセーバー部分です。
frame eworks/base/camera/libcameraaservice,libcameraaservice.soを生成します。
Camera Service類を実現し、BnCamera Serviceを継承し、instantiate()を実現しました。内部には一部クラスのclass Cient:public BnCamera、ICamera類の実現は主にBnCamera.openCamera Hardware(このクラスで呼び出されます。)。
3、以下はTegra 2プラットフォーム特有の部分です。
hardware/tegra/hal/libnvomxcamera、libcamera.so、CameraaHardwareInterfaceインターフェースを実現し、OneCameraa Hardware()はこのライブラリで実現します。
hard ware/tegra/core/drivers/openmax/ilclient、libnvomxilclient.so
このライブラリはlibnvomx.soライブラリを動的にロードし、9つのOMX core関数を含む構造体NvxFrame ebookに値を付けて、この方法でPVMFをバイパスした。PMVFはOMXにとって、つまり一つのomx clientです。
hard ware/tegra/core/drivers/openmax/il、libnvomx.so:OMX coreライブラリ
libnvodm_imager.so:odm imageのhalライブラリは、このデフォルトではNVはbinaryのみを提供しています。full buildではこのライブラリのcopyをsystemディレクトリの下に統合します。
libnvodm_query.so:odmのクエリーライブラリは、GPIO、電力供給、i 2 cなどの他の関連ハードウェアの配置が本ライブラリで完了します。
一つの携帯電話が二つ以上のcameraをサポートする問題について、個人的には、上の階はどのcameraを使うかを教えてくれます。そしてOMXは毎回OMX Graphを再構築し、最後のenable portでは異なるcameraハードウェアを使います。上層処理はほぼ一貫している。
android tegra 2にcameraを追加します。
Tegraチップはまだandroidシステムとうまく統合されていません。結局、nvidiaはAndroidをサポートする決定時間があまり長くないです。もうやっていると聞いていますが、android 3.0に統合されると思います。これは実現するかどうかは推測だけです。
このような状況では、もちろんcameraの駆動はkersnelに置かれません。hardware/tegra/odm/product/***/の下に置かれています。具体的にcameraとその駆動を追加します。主なステップは以下の通りです。
1)odm_kit/query/include/nvodm_query_discoveryイマージュ.h
識別シーケンスを指定します。たとえば
ヽoo。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。GUID NV_ODMGUID('s','''Q','Q','1','2','3','4')
2)odm_kit/query/subboards/nvodm_query_discoverye****_address.h
cameraのハードウェア接続パラメータを設定します。
ヽoo。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。PINS(NVODMcMeRA DEVICE uIS_DEFAULT)
static const NvOdm IoAddres s s_ffaImagerQQ 1234 Addreses[]=
{
I 2 C構成
Reset GPIO設定;
パワーダウンGPIO配置;
Camera VDD配置;
VCCSIプロファイル;
Video input配置;
external Clock(CSUS)構成;

3)odm_kit/query/subboards/nvodm_query_discoverye****_periphers.h
camera設備の入り口の住所はGUIDと関連しています。
//QQ 234
{
QQ 1234_GUID、
suffaImagerQQ 1234 Addreses、
NVUARYUSIZE(suffaImagerQQ 17234 Addreses)
NvOdm PeripheralClass uImager
}
4)odm_kit/adatations/image/Android.mk
LOCAL_SRC_FILES+=sensor_yuv_q 1234.
5)odm_kit/adapptations/imger/imger_hal.cn
Hal層を追加して列挙するcameraタイプ
𞉀include「sensorvuq 1234.h」
DeviceHalTable g_SensorHalTable[]={

{QQ 234_GUID、SensorYuvQQ 17234_GetHal}


5)odm_kit/adatations/イメージガー/sensor_yuv_q 1234.
odm_kit/adatations/イメージガー/sensor_yuv_q 1234.h
NvBool SensorYuvxQ 234_GetHal(NvOdmImager Handle hImager)
これはcamera設備の配置と機能の具体的な実現のファイルです。ハードウェア校正などの仕事は主にsensor_を修正することです。yuv_q 1234.
   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:  }
回転:http://qiuzhenqing.blog.edu.cn/2010/581021.html
http://qiuzhenqing.blog.edu.cn/2010/591863.html