Camera API1 相机参数设置流程一 framework层

10 篇文章 2 订阅

Camera API1 相机参数设置流程一 framework层

Camera API1 相机参数设置流程二 hardware层

 

Android P Camera API1 是基于 API2 新框架做的兼容。

Camera 参数的传输:APK -> CameraServer -> camerahalserver -> kernel driver ->  cameraDevice

Package

APK发送相机参数

Camera.Parameters parameters = mCamera.getParameters();
parameters.set(…, …);

 

Framework

一 java

frameworks/base/core/java/android/hardware/Camera.java

Camera.java 是跨语言的核心文件。

Camera.Parameters.set 方法调用 Camera.Parameters.put 方法, 在 put 方法中调用 mMap 保存待发送的 camera 参数。

打印系统日志, 过滤出 camera parameter 的日志

MtkCam/ParamsManager: fb-enlarge-eye=0;fb-enlarge-eye-max=4;fb-enlarge-eye-min=-4;fb-extreme-beauty=false;fb-face-pos=-2000:-2000;fb-sharp=0;fb-sharp-max=12;fb-sharp-max-values=12;fb-sharp-min=-12;fb-sharp-min-values=-12;fb-skin-color=0;fb-skin-color-default=9;fb-skin-color-max=12;fb-skin-color-max-values=12;fb-skin-color-min=-12;fb-skin-color-min-values=-12;fb-slim-face=0;fb-slim-face-max=12;fb-slim-face-max-values=12;fb-slim-face-min=-12;fb-slim-face-min-values=-12;fb-smooth-level=0;fb-smooth-level-default=3;fb-smooth-level-max=12;fb-smooth-level-max-values=12;fb-smooth-level-min=-12;fb-smooth-level-min-values=-12;fb-touch-pos=-2000:-2000;first-preview-frame-black=0;flash-duty-max=1;flash-duty-min=0;flash-duty-value=-1;flash-mode=off;flash-mode-values=off;flash-step-max=0;

 

在  Camera.Parameters.flatten 中组装成上述日志的样式,在 Camera.setParameters 中下发参数到  native_setParameters  中处理。接下来进入熟悉 native  C/CPP 空间 。

 

二 native 层

frameworks/base/core/jni/android_hardware_Camera.cpp

JNI 接口方法 andriod_hardware_Camera_setParameters

frameworks/av/camera/Camera.cpp

调用  camera interface 发送相机参数

frameworks/av/camera/CameraBase.cpp

frameworks/av/services/camera/libcameraservice/CameraService.cpp

Camera 如何连接到 Cameraserver 建立 binder 通信,详见: 《 CameraService 和 Client 链接到 HAL

Camera API2 有所不同,整理好思路后,抽空写 Camera API2 <--> HAL3 的流程。

如下 CameraBase, 成员函数 connect 中的 asBinder 使用binder实现client <--> server 跨进程通信。 

frameworks/av/services/camera/libcameraservice/api1/Camera2Client.cpp

status_t Camera2Client::setParameters(const String8& params)

frameworks/av/services/camera/libcameraservice/api1/client2/Parameters.cpp

status_t Parameters::set(const String8& paramString)

frameworks/av/services/camera/libcameraservice/device1/CameraHardwareInterface.cpp

sp<hardware::camera::device::V1_0::ICameraDevice> mHidlDevice;

HIDL 全称是 Hardware Interface Definition Language。目的是使 Android 可以在不重新编译 HAL 的情况下对 Framework 进行 OTA 升级。详见:《Android HIDL 简介

如下代码是 Camera HAL3 中兼容 HAL1 接口。 详见: 《Treble 框架下的 Android Camera HAL3 一

至此进入 Camera HAL 层。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值