这篇文章来自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部分的代码,可以参考,然后调试自己的代码。


更多相关文章

  1. 原来这样就可以开发出一个百万量级的Android相机
  2. Android(安卓)11适配指南之系统相机拍照、打开相册
  3. Android(安卓)Camer2与Camera1 自定义相机拍照封装实例讲解
  4. android 选择图片(从手机照相机或手机图片)
  5. Android一键拍照功能
  6. android 权限库,拿来就能用
  7. android 选择图片(从手机照相机或手机图片)
  8. Android(安卓)照相机转到真确的方向
  9. Android(安卓)7.0使用相机功能

随机推荐

  1. android判断是否连接网络
  2. android之创建快捷方式
  3. android 通话记录次数
  4. android 解析xml字符串
  5. Android(安卓)时间滚轴
  6. Android(安卓)为线程增加Looper
  7. android之activity中onSaveInstanceState
  8. Android(安卓)sd卡log日志
  9. Hostapd Android
  10. android控制home键 代码