Android2.2平臺上支援多camera(四)
三、Camera HAL層支援多Camera
1、CameraHardwareInterface.h檔案
Frameworks/base/include/camera/CameraHardwareInterface.h是Camera 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);
對這三個介面的實現,就是硬體平臺移植工作者需要做的事情了,這裡只做簡單的介紹。
2、XXCameraHardwareInterface.cpp檔案
XXCameraHardwareInterface.cpp
首先定義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 QQ:1226062415 |
Init draft. |