Android2.2平台上支持多camera(四)

时间:2023-02-07 09:20:56

三、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

wxiaozhe@163.com

QQ1226062415

Init draft.