zoukankan      html  css  js  c++  java
  • Android Camera

    Camera参数设置:

    一、应用程序

    1.Camera应用使用的参数对象
    frameworks/base/core/java/android/hardware/Camera.java

    2.使用
    Camera拍照预览:
    packages/apps/Camera/src/com/android/camera/CameraModule.java
    Camera录像预览:
    packages/apps/Camera/src/com/android/camera/VideoModule.java

    二、MediaRecorder

    1.CameraSource使用的参数对象
    frameworks/av/camera/CameraParameters.cpp

    2.使用
    frameworks/av/media/libstagefright/CameraSource.cpp

    三、CameraHAL

    1.CameraHAL使用的参数对象
    frameworks/av/camera/CameraParameters.cpp

    2.使用
    hardware/amlogic/camera/CameraHal.cpp

    参考链接:

    Camera.Parameters 参数:http://blog.csdn.net/aiqing0119/article/details/27680137

    Camera代码结构:

    Android下Camera子系统从上到下可以分为应用层、框架层、运行库层及内核层,其结构如下图所示。

    1516620025(1)

            从整体上看,它还是属于Android下典型的client/service的结构,运行在两个进程中,一个是client进程,主要包括JAVA 代码与一些Native c/c++代码;另一个是service 进程,属于服务端,是native c/c++代码,并且,camera service属于Android系统的一个native服务,用native c/c++代码实现,主要负责和Linux kernel中的Camera Driver交互,搜集Linux kernel中Camera Driver上传的数据,并交给显示系统(surface)显示。

            client进程与service进程通过Binder 机制通信,client端通过调用service端的接口实现各个具体的功能。但真正的preview 数据不会通过Binder IPC机制从service端复制到client端,而是通过回调函数与消息的机制将preview 数据buffer的地址传到client端,最终可在Java应用中操作处理这个preview数据。

    1、应用
    Camera2 纯应用源码

    2、framework层
    Camera.java路径frameworks/base/core/java/android/hardware/Camera.java
    它会调用相应的JNI类来访问native层的代码

    3、JNI层—android_hardware_Camera.cpp
    base/core/jni/android_hardware_Camera.cpp
    JNI代码调用native层代码获得底层camera硬件的访问入口,通过该入口,可以获取到framework层用于创建android.hardware.Camera对象的相关数据。

    4、Native framework—-Camera.cpp
    Native framework层的定义位于frameworks/av/camera/Camera.cpp
    这个类通过调用IPC binder代理来获取camera service的访问接口

    5、Binder IPC proxies
    IPC binder代理可以现实进程间通信。在frameworks/av/camera目录下有三个camera binder类的定义。ICameraService是cameraservice的接口,ICamera是被打开的camera设备的接口,ICameraClient是camera设备返回给application framework层的接口。

    6、Camera service
    Camera service层的定义位于frameworks/av/services/camera/libcameraservice/CameraService.cpp中。它是与camera HAL交互的实际代码。

    7、HAL层
    HAL层定义了必须实现的接口,相关头文件如下:
    (1)hardware/libhardware/include/hardware/camera.h
    camera.h头文件中声明了一个结构体camera_device,它包含了结构体camera_device_ops,该结构体中有指向实现camera HAL接口的函数的函数指针。
    (2)hardware/libhardware/include/hardware/camera_common.h
    camera_common.h定义了一个重要的结构体camera_module,这个结构体定义了一个标准结构,可以获取camera基本信息,比如ID和所有camera所共有的属性,比如是否是前置或者后置camera。
    (3)frameworks/av/include/camera/CameraParameters.h
    设置的camera参数的各中类型
    在camera HAL层,使用int (set_parameters)(struct camera_device , const char *parms)来设置这些参数。

    8、内核驱动

    以下是代码架构图:

    这里写图片描述

    参考链接:

    Android-Camera代码结构:http://blog.csdn.net/zsy_wal/article/details/68065674

    参考链接:

    http://blog.csdn.net/poorkick/article/category/6193967

    https://searchcode.com/codesearch/view/67665579/

  • 相关阅读:
    python学习之控制语句
    linux中的网络基础
    python学习之准备
    linux用户权限
    python学习之函数和函数参数
    python学习之输出与文件读写
    linux中的vim编辑器的使用
    从产品和用户角度,思考需求和用户体验
    好记性不如烂笔头
    TI DaVinci(达芬奇)入门
  • 原文地址:https://www.cnblogs.com/klcf0220/p/8330698.html
Copyright © 2011-2022 走看看