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

    技术2022-05-19  22

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

     

     

     

     

     

     

     

     

     

     

     

     

     

     


    最新回复(0)