Android Camera porting(HAL层移植)

这篇文章来自kandroid,在android源码中Development/pdk/下也能找到,最近在做android camera 模块实现,正好看到这篇,虽然写的比较简洁,大部分还是挺有用,所以记在这里交流参考。

Android 相机

简要:

  • 编译libcamera.so库
  • 时序框图
  • 接口
Android 相机子系统将“顶层camera应用程序”与应用程序框架层及用户空间各类库(media 库 camera库)联系起来,联系相机硬件抽象层进而操作物理相机。

下图说明了相机子系统的结构:

说明:在多媒体框架部分,android 2.3系统stagefright取代了opencore。

编译一个libcamera.so库

为了实现一个相机驱动,需要实现定义在 CameraHardwareInterface.h的接口并编译成动态链接库。必须命名这个动态链接库为libcamera.so,这样在anroid运行时(runtime)才能从/system/lib中被加载。建议将camera源码和Android.mk放在这个目录下

vendor/acme/chipset_or_board/libcamera/

下面Android.mk存根文件,确保libcamera 编译时能链接到相应的库:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_MODULE := libcamera


LOCAL_SHARED_LIBRARIES := \
    libutils \
    librpc \
    liblog

LOCAL_SRC_FILES += MyCameraHardware.cpp


LOCAL_CFLAGS +=


LOCAL_C_INCLUDES +=


LOCAL_STATIC_LIBRARIES += \
    libcamera-common \
    libclock-rpc \
    libcommondefs-rpc

include $(BUILD_SHARED_LIBRARY)


时序框图

一个预览时序图和拍照时序图。

预览

下面框图说明了相机预览时必要的函数调用和动作时序图:

照相

下面框图说明了相机照相时必要的函数调用和动作时序图:

接口

相机操作的函数接口基本上定义参考CameraHardwareInteface.h,这里面的接口需要自己实现。可参考例子。


补充一下:

android源代码:在device/目录下有不少设备HAL部分的代码,如在samsung/crepo/libcamera/路径下就有camera的实现,这个是Nexus S

前后摄像头的HAL部分的代码,可以参考,然后调试自己的代码。


你可能感兴趣的:(Android Camera porting(HAL层移植))