camera系列-Camera框架概述

Camera 框架分析

Camera子系统是Android系统中比较复杂的子系统之一。在系统集成方面,Camera子系统除了实现camera功能外其作为多媒体实现的基础模块,与声音控制系统(Audio),视频编解码系统(Video Codec),显示系统(Display),存储系统(Storage)以及输入输出系统(I/O)都有密切的联系。在Camera模块内部,Camera系统也不仅仅是实现视频数据获取及存储。为了达到良好的视频(照片)质量。Camera系统中往往包含大量的图像处理算法程序库,根据不同的需要这些算法库可以放在不同的处理层。

一、Camera子系统层次结构

Camera作为一个子系统,提供了取景器、视频录制和拍摄照片等功能,并且提供各种控制类借口,如Java层的接口和本地接口。其中Java框架中的camera类实行了Java层相机接口,为拍照和扫描等功能业务使用。本地接口可以给本地程序调用,如存储、编解码、视频通话、显示等。基本层次结构如下图:
在这里插入图片描述

二、Camera 子系统系统结构

Camera子系统从下往上包括了驱动层、框架层和APP层。系统结构如图所示:
在这里插入图片描述

  • 应用层LenovoCamera、其他美颜相机等,对相机做一些基本初始化,之后调用setPreviewwindow,然后调用到framework层的方法。
  • 框架层:由camera Java层接口、Java本地调用接口(JNI)、camera本地框架(client端)、camera本地服务及camera HAL组成。
  1. Camera Java层向应用层接口提供的类为android.hardware.Camera,对应的源代码文件为:camera.java,此类有些方法通过JNI调用本地框架中的代码实现。
  2. Java本地调用接口(JNI),代码路径:frameworks/base/core/jni/android_hardware_Camera.cpp,这一部分被编译成为libandroid_runtime.so,它不做任何处理相当于一个中间站,转去到下一层camera本地框架(client端)中实现
  3. camera本地框架(client端),代码路径:frameworks/av/camera/Camera.cpp,这一部分内容被编译成库libcamera_client.so,同样这一部分可以理解为一个中转站,通过binder机制调用与camera本地服务进行通讯。
  4. camera本地服务,代码路径:frameworks/av/services/camera/libcamearservice/CameraService.cpp,这一部分被编译成libcameraservice.so, 本部分配合底层相关的硬件驱动框架和编解码库实现一个具体的camera
  5. camera HAL,硬件抽象层,代码路径:frameworks/av/services/camera/libcamearservice/device1/CameraHardwareInterface.h,基于此接口完成的HAL来实现camera数据传输及功能控制。
  • 驱动层,基于Linuxvideo for Linux视频驱动框架即(V4L2),通过V4L2接口实现数据采集、格式转换、大小缩放、数据传输的功能。
发布了247 篇原创文章 · 获赞 93 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/qq_33487044/article/details/95770210
今日推荐