这篇文章来自kandroid,在android源码中Development/pdk/下也能找到,最近在做android camera 模块实现,正好看到这篇,虽然写的比较简洁,大部分还是挺有用,所以记在这里交流参考。
Android 相机
简要:
- 编译libcamera.so库
- 时序框图
- 接口
下图说明了相机子系统的结构:
说明:在多媒体框架部分,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部分的代码,可以参考,然后调试自己的代码。