目录
Android9.0 – HAL1 – preview – RAW
Android9.0 – HAL1 - snapshot – RAW
Android9.0 – HAL1 - video – RAW
Android9.0 另一种方式抓 snapshot raw 图
Android9.0 – HAL1 – preview – YUV
Android9.0 – HAL1 - snapshot – YUV
Android9.0 – HAL1 – video – YUV
Android9.0 – HAL3 – Callback – YUV
前言
简述Qcom 平台,抓取raw图、YUV图的抓取方式,和相关的代码流程。
旨在camera sensor存在比较明显的效果问题的时候,判断问题出在哪个环节。
Note:
抓取 RAW或 YUV图之前需要先确认当前Android版本和Camera APP使用的是哪种HAL接口。
HAL1或HAL3,在HAL层中 camera的这部分差异较大,实现流程不同,需要注意。
参考文档 :
kba-161204073328_2_how_to_dump_camera_image_buffer.pdf
抓取raw图的文件路径和代码:
【HAL1】 代码位置:
- HAL1 接口位置
8953_APP_P\hardware\qcom\camera\QCamera2\HAL\QCamera2HWI.cpp
- HAL1 回调函数位置
8953_APP_P\hardware\qcom\camera\QCamera2\HAL\QCamera2HWICallbacks.cpp
- HAL1 dump 函数
void QCamera2HardwareInterface::dumpFrameToFile
- HAL1 dump 属性
- HAL1 dump JPEG 图
hardware/qcom/camera/QCamera2/HAL/QCamera2HWICallbacks.cpp:
2920: property_get("persist.vendor.camera.dumpimg", value, "0");
- HAL1 dump YUV 图
hardware/qcom/camera/QCamera2/HAL/QCamera2HWICallbacks.cpp:
3097: property_get("persist.vendor.camera.dumpimg", value, "0");
【HAL3】 代码位置:
- HAL3 接口位置
hardware\qcom\camera\QCamera2\HAL3\QCamera3HWI.cpp
- HAL3 回调函数位置
hardware\qcom\camera\QCamera2\HAL3\QCamera3Channel.cpp
- HAL3 dump 函数
void QCamera3Channel::dumpYUV(...)
- HAL3 dump 属性
property_get("persist.vendor.camera.dumpimg", prop, "0");
- HAL3 dump YUV 图
hardware/qcom/camera/QCamera2/HAL3/QCamera3Channel.cpp:
542: property_get("persist.vendor.camera.dumpimg", prop, "0");
抓取注意事项
HAL 架构问题
- 首先要注意抓取的 Camera APP 使用的HAL1 还是 HAL3 架构
- 因为不同 hal 架构,所需要的抓取命令不同
数据流的时效性问题:
要抓取的这路流什么时候存在,是打开相机就存在还是需要触发才出现,
- preview:预览数据流, 打开相机预览流就开始启动了。打开相机触发。[常开流]
- video:录像数据流, 只有开启录像,这路流才存在。开启录像触发。[触发流]
- metadata:元数据配置流, 每个 Capture 都会伴随一个 metadata 流。[待补充]
- snapshot:拍照数据流, 只有拍照动作才会存在这路流。拍照触发。[触发流]
- callback:Google Camera2 相机存在这路流,请用这个App进行测试。[待补充]
- 以上基线代码默认配置的流。其他新增的流,要和APP开发人员确认什么时候流存在。