目录

前言

一、HIDL接口

1.CameraProvier

1.setCallback(ICameraProviderCallback callback)

2.getVendorTags

3.getCameraIdList

4.isSetTorchModeSupported

5.getCameraDeviceInterface_V3_x

2.CameraDevice

1.getResourceCost

2. getCameraCharacteristics

3.setTorchMode

4.open

5.dumpState

3.CameraDeviceSession

1.constructDefaultRequestSettings

2.configureStreams

3.processCaptureRequest

4.getCaptureRequestMetadataQueue

5.getCaptureResultMetadataQueue

6.flush

7.close

二、HAL实现



前言

本文主要介绍google原生HAL service

一、HIDL接口

代码路径:

http://androidxref.com/9.0.0_r3/xref/hardware/interfaces/camera/provider/2.4/

1.CameraProvier

1.setCallback(ICameraProviderCallback callback)

framework将回调函数设置给HAL,HAL可以通过这些回调函数将一些信息异步回给framework,包括两个回调函数:

cameraDeviceStatusChange(string cameraDeviceName, CameraDeviceStatus newStatus)
torchModeStatusChange(string cameraDeviceName, TorchModeStatus newStatus)

CameraDeviceStatus和TorchModeStatus定义

2.getVendorTags

3.getCameraIdList

4.isSetTorchModeSupported

5.getCameraDeviceInterface_V3_x

getCameraDeviceInterface_V3_x(string cameraDeviceName) generates (Status status,android.hardware.camera.device@3.2::ICameraDevice device);

通过该接口返回ICameraDevice

2.CameraDevice

1.getResourceCost

2. getCameraCharacteristics

3.setTorchMode

手电筒应用通过该接口控制Torch开关;当手电筒打开了,这时如果打开了相机手电筒会关闭,这个关闭不是手电筒通过该接口关闭的,而是camera HAL判断当前如果打开了torch就关闭了。

4.open

open(ICameraDeviceCallback callback) generates(Status status, ICameraDeviceSession session);

framework将CameraDeviceCallback回调函数下发下来,同时获取CameraDeviceSession接口

CameraDeviceCallback接口:

processCaptureResult(vec<CaptureResult> results);
notify(vec<NotifyMsg> msgs);

http://androidxref.com/9.0.0_r3/xref/hardware/libhardware/include/hardware/camera3.h

2354 * Applications will also receive these partial results immediately, so sending
2355 * partial results is a highly recommended performance optimization to avoid
2356 * the total pipeline latency before sending the results for what is known very
2357 * early on in the pipeline.
2358 *
2359 * A typical use case might be calculating the AF state halfway through the
2360 * pipeline; by sending the state back to the framework immediately, we get a
2361 * 50% performance increase and perceived responsiveness of the auto-focus

该函数可以被调用多次,包括多次metadata和buffer,partial metadata可以减少pipeline latency,pipeline latency的result delay的次数最大为底层的max buffer个数。

partial metadata的使用有很多约束,要按照规范使用

5.dumpState

3.CameraDeviceSession

1.constructDefaultRequestSettings

2.configureStreams

stream包括Camera3InputStream和Camera3OutputStream,Camera3OutputStream是HAL填充,Camera3InputStream是应用将流程中前面request获取到的YUV out再当做YUV input传下来让HAL来refine,结果输出到同一个request里配置的out里。可以参考CTS里的xref: /cts/tests/camera/src/android/hardware/camera2/cts/ReprocessCaptureTest.java里的流程,configure_stream的时候配置三路流,一路input yuv,一路output yuv,一路output jpg,然后是下request阶段,第一个请求先下一路output yuv,应用拿到output yuv,第二个请求下一路intput yuv和一路jpeg,尺寸可以不一样,HAL将这个yuv过一遍offline pipeline之后再jpeg编码,最后hal需要将input yuv和jpeg都要还回去,另外说明的一点是第一个请求不过offline pipeline直接送上去,第二个请求跳过online pipeline

如何在camera2 API中使用reprocessCaptureRequest - IT屋-程序员软件开发技术分享社区

Android Camera 原理之拍照流程zsl优化方案 - 简书

这里面用input stream实现zsl,这当然是从应用的角度实现zsl的一种方法

3.processCaptureRequest

4.getCaptureRequestMetadataQueue

5.getCaptureResultMetadataQueue

6.flush

7.close

二、HAL实现

google默认hal实现

google使用hal规范实现camera hal,HAL hidl化之后其实不再需要使用之前的hal规范,只要按照hidl接口实现即可

1.注册HAL Module

static int open_dev(const hw_module_t* module,
208                    const char* name,
209                    hw_device_t** device) {
210  return gCameraHAL.openDevice(module, name, device);
211}
212
213}  // namespace v4l2_camera_hal
214
215static hw_module_methods_t v4l2_module_methods = {
216    .open = v4l2_camera_hal::open_dev};
217
218camera_module_t HAL_MODULE_INFO_SYM __attribute__((visibility("default"))) = {
219    .common =
220        {
221            .tag = HARDWARE_MODULE_TAG,
222            .module_api_version = CAMERA_MODULE_API_VERSION_2_4,
223            .hal_api_version = HARDWARE_HAL_API_VERSION,
224            .id = CAMERA_HARDWARE_MODULE_ID,
225            .name = "V4L2 Camera HAL v3",
226            .author = "The Android Open Source Project",
227            .methods = &v4l2_module_methods,
228            .dso = nullptr,
229            .reserved = {0},
230        },
231    .get_number_of_cameras = v4l2_camera_hal::get_number_of_cameras,
232    .get_camera_info = v4l2_camera_hal::get_camera_info,
233    .set_callbacks = v4l2_camera_hal::set_callbacks,
234    .get_vendor_tag_ops = v4l2_camera_hal::get_vendor_tag_ops,
235    .open_legacy = v4l2_camera_hal::open_legacy,
236    .set_torch_mode = v4l2_camera_hal::set_torch_mode,
237    .init = nullptr,
238    .reserved = {nullptr, nullptr, nullptr, nullptr, nullptr}};

2.通过method里的open接口获取camera3_device

33typedef struct camera3_device {
3234    /**
3235     * common.version must equal CAMERA_DEVICE_API_VERSION_3_0 to identify this
3236     * device as implementing version 3.0 of the camera device HAL.
3237     *
3238     * Performance requirements:
3239     *
3240     * Camera open (common.module->common.methods->open) should return in 200ms, and must return
3241     * in 500ms.
3242     * Camera close (common.close) should return in 200ms, and must return in 500ms.
3243     *
3244     */
3245    hw_device_t common;
3246    camera3_device_ops_t *ops;
3247    void *priv;
3248} camera3_device_t;

Camera HAL Service流程总结相关推荐

  1. Camera HAL 参数传递流程 ---- 以ANDROID_CONTROL_AE_EXPOSURE_COMPENSATION为例追踪

    CameraApp里面用户操作的设置项分为两类: 一类由App自行处理,比如照片保存路径.绘制九宫格参照线.拍照声音等等 一类需要经由framework下发到hal,然后进一步流转到相应的算法库中去处 ...

  2. 【Mtk Camera Hal到驱动的流程(1)】

    Mtk Camera Hal到驱动的流程(1) (1)架构介绍 (A)Camera 的框架分为 Kernel 部分和 Hal 部分 Kernel部分: image sensor driver -- 负 ...

  3. Android4.2之Camera系统HAL调用流程

    一.重要结构体 1.模块 hardware/libhardware/include/hardware/camera_common.h [cpp] view plaincopy typedef stru ...

  4. Android Camera open运行流程

    Android Camera 运行流程 一 首先既然Camera是利用binder通信,它肯定要将它的service注册到ServiceManager里面,以备后续Client引用,那么这一步是在哪里 ...

  5. android_驱动_qcom_【高通SDM660平台】(4) --- Camera Init 初始化流程

    [高通SDM660平台]Camera Init 初始化流程 一.Camera 系统架构 二.Camera Init 初始化流程 2.1 CameraService 启动 2.2 CameraServi ...

  6. android8 Camera2 从 CameraService 到 HAL Service

    上回讲到,在 CameraService::makeClient 中,实例化了一个 CameraDeviceClient.现在我们就从它的构造函数开始,继续探索打开相机的流程. 这一部分主要活动在 R ...

  7. Android Camera 五 Camera HAL v1

    Android Camera 一 源码路径 Android Camera 二 JNI JAVA和C/CPP图像数据传输流程分析 Android Camera 三 CameraService 和 Cli ...

  8. Android Camera HAL3 - 框架流程预览

    前面说了 HAL3 是一个总线型的设计结构,本文就先对 HAL3 的控制流进行一个提纲挈领式的概述,主要理解整个 HAL3 的主干框架,以便对后续深入各个细节. 主干流程 以下全部都是摘抄 Googl ...

  9. android mtk camera startpreview,android8.1 mtk camera hal各种操作流程

    最近一年,一直在做android上的视频编解码和录相.以及camera hal和系统框架这一块.随着做的慢慢的深入,越发觉得mtk的camera hal这一块,有其独到之处.偏偏网上相关的资料却是极少 ...

最新文章

  1. 动态规划练习1 [导弹拦截]
  2. 大一萌新看过来,C语言学到什么程度,才能“毕业不失业”!
  3. Android配置模拟器参数,夜神模拟器支持命令行参数列表
  4. arm linux samba,嵌入式linux系统教你制作samba服务器
  5. 针对 Java 开发人员的 C# 编程语言
  6. usb3.0导入工具pe_BlackHat大会上,BlackBerry宣布开源逆向工具PE Tree
  7. Linux下Tomcat性能优化--文件句柄数增大
  8. kubenerte启动_老司机和你深聊Kubenertes 资源分配之 Request 和 Limit 解析
  9. ubuntu Nvidia dkms 驱动恢复
  10. Libre 6008 「网络流 24 题」餐巾计划 (网络流,最小费用最大流)
  11. GitHub上万星:超精细的漫画上色AI,老婆画风任你选择,登上了趋势榜
  12. linux 流量控制
  13. 【技巧分享】股票代码规则
  14. 右键计算机没有软件删减,右键菜单太长会导致电脑卡顿?轻松删除右键菜单无用项!...
  15. FL Studio2020中文版下载安装激活教程及优缺点介绍
  16. 不要因为不知,所以设计
  17. 从底层到应用,那些数据人的必备技能
  18. STK加载地图与高清影像图
  19. 网页中文翻译成英文简单方法
  20. Scratch 游戏项目学习法 —— 接苹果(完)改良你的游戏

热门文章

  1. CVPR 2021 论文解读I 动态区域感知卷积,进一步提升分类/检测/分割性能|Dynamic Region-Aware Convolution
  2. android 硬币翻转动画,使用Android标准动画显示正在翻转的硬币的两面
  3. 支付宝当面付扫码支付支付后不回调_码云上不错的几个支付相关的项目
  4. 世界是如何由计算机代码运行的(原文见http://www.bbc.co.uk/timelines/zxsrcdm)
  5. 关于sin的导数的证明
  6. 学生学籍管理系统包括成绩c语言,学籍管理系统设计C语言代码
  7. TypeScript是什么,为什么要使用它?
  8. HTML5权威指南读书笔记03(第7,8章)--icon,base,锚点,一些七七八八的元素
  9. 苏州将统一发放多功能“市民卡”
  10. 备战Noip2018模拟赛3(B组) T2 Dance 开场舞蹈