美文网首页
Media Module之Camera(一) 相关介绍

Media Module之Camera(一) 相关介绍

作者: Lemon_Home | 来源:发表于2017-05-31 17:27 被阅读500次

    基于Android6.0原生代码的Camera应用进行深入分析,对常用流程进行总结包括从上层app、framework到底层jni、native、hal,并且介绍Camera的疑难问题的解决思路。

    1. Camera相关介绍

    1.1 主要界面和主要类

    普通拍照模式 录像模式 全景模式 特效模式

    1.2 Camera主要结构

    1.2.1 Application framework

    在此层,利用了android.hardware.Camera的API去调用camera的硬件。在内部,是通过JNI来与native的代码进行交互。
    代码路径:frameworks/base/core/java/android/hardware/Camera.java

    1.2.2 JNI

    JNI的代码是与android.hardware.Camera进行联系的,此代码是调用更底层的native代码去获得物理camera设备的入口,并且给framework返回数据。
    代码路径:frameworks/base/core/jni/android_hardware_Camera.cpp.

    1.2.3 Native framework

    native framework提供了android.hardware.Camera在native层的等价类。作用是调用IPCbinder去获得camera service的入口。
    代码路径:frameworks/av/camera/Camera.cpp

    1.2.4 Binder IPC proxies

    IPC binder的代理方便地实现了跨进程的通信,其中有三个camera binder :ICameraService是cameraservice的接口;ICamera是特定的已打开的camera设备的接口;ICameraClient 是给framework层的回调接口。
    代码路径:frameworks/av/camera

    1.2.5 Camera service

    是与HAL进行交互的具体实现
    代码路径:frameworks/av/services/camera/libcameraservice/CameraService.cpp,

    1.2.6 HAL

    位于camera驱动和更高层次的android
    framework之间,它定义了你必须实现的接口,该接口方便app能够正确地操作camera硬件。CameraHAL层的接口被定义在头文件:hardware/libhardware/include/hardware/camera.h:
    包含的code基本上与android.hardware.Camera一致。这个头文件中声明了一个结构体camera_device,它包含了结构体camera_device_ops,该结构体中有指向实现camera HAL接口的函数的函数指针。关于开发者可以设置的camera参数的各中类型。
    hardware/libhardware/include/hardware/camera_common.h:
    定义了一个重要的结构体camera_module,这个结构体定义了一个标准结构,可以获取camera基本信息,比如ID和所有camera所共有的属性,比如是否是前置或者后置camera。

    1.2.7 Kernel driver

    与实际的camera硬件进行交互,并且通过HAL上实现。Camera硬件和驱动必须能够提供YV12和NV21格式的图像数据,以支持camera图像数据在显示屏上的预览和视频录制。

    1.3 类继承关系

    图1 图2 图3 图4

    1.4 主要流程

    主要流程

    相关文章

      网友评论

          本文标题:Media Module之Camera(一) 相关介绍

          本文链接:https://www.haomeiwen.com/subject/sgsjfxtx.html