1. 程式人生 > >Android2.2平臺上支援多camera(四)

Android2.2平臺上支援多camera(四)

三、Camera HAL層支援多Camera

1CameraHardwareInterface.h檔案

Frameworks/base/include/camera/CameraHardwareInterface.hCamera HAL層對上的介面檔案。由於它的存在,上層可以不關心下層的實現,直接呼叫相應介面去做自己的事情。這對硬體的移植非常有利。

在這個檔案中,我添加了下面三個介面:

/**

* The functions need to be provided by the camera HAL.

*

* If getNumberOfCameras() returns N, the valid cameraId for getCameraInfo()

* and openCameraHardware() is 0 to N-1.

*/

extern "C" int HAL_getNumberOfCameras();

extern "C" void HAL_getCameraInfo(int cameraId, struct CameraInfo* cameraInfo);

extern "C" int HAL_setCameraId(int cameraId);

對這三個介面的實現,就是硬體平臺移植工作者需要做的事情了,這裡只做簡單的介紹。

2XXCameraHardwareInterface.cpp檔案

XXCameraHardwareInterface.cpp

是硬體移植工作者根據所用硬體平臺對CameraHardwareInterface.h的實現。就上述三個介面,我們可以做如下的實現。

首先定義CameraInfo型別的結構體陣列,用來儲存硬體平臺所支援的Camera的資訊。這裡只表示支援兩個Camera,前面後面各一個。其具體定義如下:

static CameraInfo sCameraInfo[] = {

{

CAMERA_FACING_BACK,

90,/* orientation */

},

{

CAMERA_FACING_FRONT,

90,/* orientation */

}

};

接下來實現那三個介面函式,具體實現如下:

extern "C" int HAL_getNumberOfCameras()

{

return sizeof(sCameraInfo) / sizeof(sCameraInfo[0]);

}

extern "C" void HAL_getCameraInfo(int cameraId, struct CameraInfo* cameraInfo)

{

memcpy(cameraInfo, &sCameraInfo[cameraId], sizeof(CameraInfo));

}

extern "C" int HAL_setCameraId(int cameraId)

{

//設定該Camera為當前所用Camera

return NO_ERROR;

}

四、總結

上述文字,就Android2.2下如何支援多Camera問題,從最上層application層到最下層Camera HAL,從流程上做了一個簡單的描述。希望對剛接觸Android平臺下Camera的朋友能有所幫助。如果有其他問題,可以聯絡我。

Revision History

修訂歷史記錄

Version

版本

Date

日期

Author

作者

Brief Description

變更簡要

0.0.1

2011-03-05

Wangxiaozhe

QQ1226062415

Init draft.