Camera HAL Service流程总结
目录
前言
一、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流程总结相关推荐
- Camera HAL 参数传递流程 ---- 以ANDROID_CONTROL_AE_EXPOSURE_COMPENSATION为例追踪
CameraApp里面用户操作的设置项分为两类: 一类由App自行处理,比如照片保存路径.绘制九宫格参照线.拍照声音等等 一类需要经由framework下发到hal,然后进一步流转到相应的算法库中去处 ...
- 【Mtk Camera Hal到驱动的流程(1)】
Mtk Camera Hal到驱动的流程(1) (1)架构介绍 (A)Camera 的框架分为 Kernel 部分和 Hal 部分 Kernel部分: image sensor driver -- 负 ...
- Android4.2之Camera系统HAL调用流程
一.重要结构体 1.模块 hardware/libhardware/include/hardware/camera_common.h [cpp] view plaincopy typedef stru ...
- Android Camera open运行流程
Android Camera 运行流程 一 首先既然Camera是利用binder通信,它肯定要将它的service注册到ServiceManager里面,以备后续Client引用,那么这一步是在哪里 ...
- android_驱动_qcom_【高通SDM660平台】(4) --- Camera Init 初始化流程
[高通SDM660平台]Camera Init 初始化流程 一.Camera 系统架构 二.Camera Init 初始化流程 2.1 CameraService 启动 2.2 CameraServi ...
- android8 Camera2 从 CameraService 到 HAL Service
上回讲到,在 CameraService::makeClient 中,实例化了一个 CameraDeviceClient.现在我们就从它的构造函数开始,继续探索打开相机的流程. 这一部分主要活动在 R ...
- Android Camera 五 Camera HAL v1
Android Camera 一 源码路径 Android Camera 二 JNI JAVA和C/CPP图像数据传输流程分析 Android Camera 三 CameraService 和 Cli ...
- Android Camera HAL3 - 框架流程预览
前面说了 HAL3 是一个总线型的设计结构,本文就先对 HAL3 的控制流进行一个提纲挈领式的概述,主要理解整个 HAL3 的主干框架,以便对后续深入各个细节. 主干流程 以下全部都是摘抄 Googl ...
- android mtk camera startpreview,android8.1 mtk camera hal各种操作流程
最近一年,一直在做android上的视频编解码和录相.以及camera hal和系统框架这一块.随着做的慢慢的深入,越发觉得mtk的camera hal这一块,有其独到之处.偏偏网上相关的资料却是极少 ...
最新文章
- 动态规划练习1 [导弹拦截]
- 大一萌新看过来,C语言学到什么程度,才能“毕业不失业”!
- Android配置模拟器参数,夜神模拟器支持命令行参数列表
- arm linux samba,嵌入式linux系统教你制作samba服务器
- 针对 Java 开发人员的 C# 编程语言
- usb3.0导入工具pe_BlackHat大会上,BlackBerry宣布开源逆向工具PE Tree
- Linux下Tomcat性能优化--文件句柄数增大
- kubenerte启动_老司机和你深聊Kubenertes 资源分配之 Request 和 Limit 解析
- ubuntu Nvidia dkms 驱动恢复
- Libre 6008 「网络流 24 题」餐巾计划 (网络流,最小费用最大流)
- GitHub上万星:超精细的漫画上色AI,老婆画风任你选择,登上了趋势榜
- linux 流量控制
- 【技巧分享】股票代码规则
- 右键计算机没有软件删减,右键菜单太长会导致电脑卡顿?轻松删除右键菜单无用项!...
- FL Studio2020中文版下载安装激活教程及优缺点介绍
- 不要因为不知,所以设计
- 从底层到应用,那些数据人的必备技能
- STK加载地图与高清影像图
- 网页中文翻译成英文简单方法
- Scratch 游戏项目学习法 —— 接苹果(完)改良你的游戏
热门文章
- CVPR 2021 论文解读I 动态区域感知卷积,进一步提升分类/检测/分割性能|Dynamic Region-Aware Convolution
- android 硬币翻转动画,使用Android标准动画显示正在翻转的硬币的两面
- 支付宝当面付扫码支付支付后不回调_码云上不错的几个支付相关的项目
- 世界是如何由计算机代码运行的(原文见http://www.bbc.co.uk/timelines/zxsrcdm)
- 关于sin的导数的证明
- 学生学籍管理系统包括成绩c语言,学籍管理系统设计C语言代码
- TypeScript是什么,为什么要使用它?
- HTML5权威指南读书笔记03(第7,8章)--icon,base,锚点,一些七七八八的元素
- 苏州将统一发放多功能“市民卡”
- 备战Noip2018模拟赛3(B组) T2 Dance 开场舞蹈