三、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是硬件移植工作者根据所用硬件平台对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 QQ:1226062415 |
Init draft. |
|
|
|
|
|
|
|
|
|
|
|
|