ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Rockchip平台HAL3相机开发实战:OV5695适配与调试全链路解析

Rockchip平台HAL3相机开发实战:OV5695适配与调试全链路解析 1. 项目概述为什么Rockchip平台上的HAL3相机开发值得深挖在嵌入式Android设备开发圈子里一提到“Rockchip平台相机调试”老手们往往下意识皱眉——不是因为技术门槛高得离谱而是因为整个链路太“毛糙”。你拿到一块RK3399或RK3568的开发板接上OV5695、GC2053甚至IMX477这类主流sensor系统能识别设备、能预览画面但一旦要调曝光、改帧率、切分辨率、加自定义3A算法或者对接第三方视觉SDK十有八九卡在HAL层。这不是代码写错了而是你根本没摸清HAL3在Rockchip生态里的真实运行逻辑它不像通用Linux驱动那样靠dtsprobe就能跑通也不像桌面Android那样有完善的CameraService抽象它是一套高度定制化的中间件夹在vendor HAL实现、Rockchip私有ISP模块、Android Camera API v3和kernel media framework之间四层胶水粘得紧但哪一层脱胶都会导致黑屏、卡顿、YUV错位、metadata丢失、capture request超时……而这些现象在logcat里往往只显示一句E/CameraDeviceClient: endConfigure failed: -22连错误码都懒得解释。我从2017年开始在RK3288平台上做第一代车载DVR相机适配到后来主导RK3399平板双摄融合项目、RK3566工业扫码终端的低延迟预览优化再到去年帮一家智能门锁厂商把IMX327的HDR合成逻辑从HAL2硬迁移到HAL3踩过的坑摞起来比RK3566的散热片还厚。这过程中最深刻的体会是Rockchip的HAL3不是“标准Android HAL3的移植版”它是Rockchip基于自家RGA、ISP、VPU硬件加速能力重构的一套协同架构——你必须同时理解Android CTS对HAL3的契约要求、Rockchip vendor blob的接口约定、kernel media controller的拓扑约束以及实际sensor的寄存器时序特性。缺任何一环调试就变成玄学。比如你改了sensor的MIPI Lane数不仅要动dts里的rockchip,camera-module,还要同步更新HAL层CameraProvider.cpp中getPhysicalCameraIds()的枚举逻辑否则CameraManager根本看不到这个物理设备再比如你想启用HAL3的ANDROID_SENSOR_INFO_EXPOSURE_TIME_RANGEmetadata却发现kernel driver没暴露对应ioctl那HAL里写的再漂亮也没用——因为底层压根不支持。所以这篇实战笔记不讲Android HAL3规范文档里的理论定义也不复述AOSP源码里那些泛泛而谈的接口声明。我们直接从一块刚刷好Android 11固件的RK3566开发板开始以OV5695 sensor为载体完整走一遍从设备树配置、HAL模块编译、CameraService集成、应用层调用验证到最终用adb shell dumpsys media.camera和logcat -s HAL3定位帧率抖动的真实过程。所有步骤都基于Rockchip官方SDKrk3566-android11-202209实测验证关键参数附计算依据报错日志带逐行解读调试命令附输出样例。如果你正被“相机能亮但参数调不动”、“预览流畅但拍照必崩”、“多摄切换黑屏”这类问题困扰或者刚接手Rockchip平台相机模块需要快速建立系统级认知这篇就是为你写的——它不承诺让你一夜成为HAL专家但能确保你下次遇到HAL device open failed: -19时不再盲目重启板子而是打开串口直奔/sys/kernel/debug/media/查media controller状态。2. 整体设计思路与方案选型逻辑2.1 为什么必须绕开AOSP原生HAL3框架Rockchip平台的HAL3实现本质上是一次对Android标准HAL3的“务实妥协”。AOSP定义的HAL3要求厂商实现ICameraProvider,ICameraDevice,ICameraDeviceCallback等HIDL接口并通过hardware/interfaces/camera/provider/2.4/目录下的hidl-gen生成stub。但Rockchip在RK3399及之后的SoC上选择了一条更重实效的路径复用其私有CameraEngine框架仅在HIDL层做薄封装核心图像处理逻辑全部下沉到vendor HAL的.so动态库中。这意味着你无法直接修改AOSP的hardware/interfaces/camera/目录来定制功能Rockchip的libcamera_metadata.so、libcamera_client.so等库已静态链接了大量私有符号强行替换会导致dlopen失败标准CTS测试项会大量fail比如android.hardware.camera2.cts.CameraTest#testCaptureResultKeys因为Rockchip HAL返回的ANDROID_SENSOR_DYNAMIC_BLACK_LEVEL值是硬编码的而非实时计算调试入口不在HIDL服务端而在vendor HAL的JNI层CameraProvider2.4-impl.so只是个转发器真正干活的是librkisp.so和libcamerahal.so。因此本项目的整体设计摒弃了“从AOSP HAL3源码开始魔改”的理想化路径转而采用Rockchip官方推荐的vendor HAL二次开发模式以Rockchip SDK中提供的hardware/rockchip/camera/为基线保留其CameraProvider,CameraDevice,CameraStream等核心类结构仅针对目标sensorOV5695和需求场景如1080p60fps低延迟预览修改关键模块。这种方案的优势在于兼容性保障所有改动都在Rockchip定义的扩展点内不会破坏vendor blob与kernel driver的ABI契约调试路径清晰log输出集中在vendor/rockchip/camera/目录下的LOGI/LOGE宏避免HIDL binder通信层的干扰升级成本可控Rockchip新SDK发布时只需同步更新hardware/rockchip/camera/目录无需重写整个HAL3栈。提示不要试图用mmma hardware/interfaces/camera/编译AOSP HAL3——它在Rockchip平台上根本无法link成功你会卡在undefined reference to rkisp_set_sensor_mode这类私有函数上。2.2 Rockchip HAL3的核心分层与数据流向理解Rockchip HAL3必须先厘清其四层协作模型非AOSP标准分层而是Rockchip实际部署结构层级组件位置核心职责调试关键点App层packages/apps/Camera2/发起CaptureRequest监听CaptureResult检查CameraCharacteristics是否包含ANDROID_SENSOR_INFO_AVAILABLE_FPS_RANGESFramework层frameworks/av/services/camera/libcameraservice/将App请求转换为HAL3ICaptureRequest管理session生命周期dumpsys media.camera输出中Session count: 1表示正常建立HAL层Vendorhardware/rockchip/camera/实现ICameraDevice调用librkisp.so配置ISP通过v4l2_ioctl控制sensorlogcat -s HAL3中HAL3: stream config success为关键成功标志Kernel层drivers/media/platform/rockchip/cif/cif驱动解析dts注册v4l2 device处理MIPI CSI数据流/sys/kernel/debug/media/中entity: cif_mipi_rx状态需为linked数据流向并非简单的线性传递而是存在三处关键耦合点Sensor初始化耦合HAL层CameraDevice::open()调用SensorDriver::init()后者通过ioctl(fd, VIDIOC_SUBDEV_S_POWER, on)开关sensor电源但power on sequence必须严格匹配sensor datasheet如OV5695要求RESET低电平保持1ms后再拉高ISP参数耦合HAL层设置ANDROID_CONTROL_AE_TARGET_FPS_RANGE后不直接下发给sensor而是转换为rkisp_set_ae_fps_range()调用由librkisp.so内部映射到ISP寄存器如ISP_AE_CTRL0的FPS_MIN/FP_MAX字段Buffer管理耦合HAL层CameraStream::configureStreams()申请gralloc buffer但实际buffer物理地址由cif_mipi_rx驱动通过dma_alloc_coherent()分配HAL必须通过ion_fd传递该地址给ISP DMA引擎。这种深度耦合决定了调试不能只盯某一层log必须交叉比对。例如预览黑屏可能源于App层CaptureRequest.Builder.setTargetSurface(surface)传入的Surface format不匹配HAL支持的HAL_PIXEL_FORMAT_YCrCb_NV12HAL层CameraStream::startStream()未正确调用rkisp_start_stream()Kernel层cif_mipi_rx驱动未收到MIPI clock enable信号/sys/kernel/debug/media/中cif_mipi_rx: state NOT_READY。2.3 开发环境与工具链选型依据本项目采用Rockchip官方推荐的Ubuntu 18.04 Android NDK r21e Rockchip SDK rk3566-android11-202209组合而非更新的Ubuntu 20.04或NDK r23。原因如下Ubuntu 18.04的glibc版本2.27与Rockchip vendor blob二进制兼容实测在Ubuntu 20.04glibc 2.31下编译的HAL模块加载时会报symbol lookup error: librkisp.so: undefined symbol: __libc_malloc——这是glibc malloc符号版本不匹配导致NDK r21e的clang版本9.0.8能正确解析Rockchip HAL源码中的__attribute__((packed))结构体对齐r23的clang 12.0.8会将struct rkisp_isp_stat_buffer误判为4字节对齐导致ISP statistics buffer读取错位SDK版本选择202209而非最新版该版本已修复RK3566上OV5695的MIPI_ERR中断频繁触发bugpatch id:cif-mipi-fix-ov5695-err-int而202303版反而引入了新的v4l2_subdev_call空指针异常。开发主机配置建议CPUIntel i7-8700K或AMD Ryzen 5 3600编译HAL需并行make -j6RAM32GB DDR4mmma全量编译峰值内存占用24GB磁盘1TB NVMe SSDSDK解压后约45GB编译中间文件占20GB注意不要用WSL2进行编译——mmma依赖/proc/sys/kernel/random/uuid生成build fingerprintWSL2的procfs模拟不完整会导致build/core/envsetup.mk中$(shell cat /proc/sys/kernel/random/uuid)返回空字符串进而使PRODUCT_BUILD_PROP_OVERRIDES失效。3. 核心细节解析与实操要点3.1 设备树DTS配置从硬件连接到软件识别的关键桥梁Rockchip平台的camera识别始于dts中cif_mipi_rx节点的正确配置。这不是简单复制粘贴就能搞定的事必须精确匹配硬件原理图。以OV5695为例其典型连接方式为MIPI CSI-2 2-laneclock lane接RK3566的mipi_csi0_clkdata lanes接mipi_csi0_d0和mipi_csi0_d1reset引脚接GPIO3_A1pwdn引脚接GPIO3_A2。对应的dts片段如下cif_mipi_rx { status okay; rockchip,camera-module ov5695; #address-cells 1; #size-cells 0; ov5695: ov569536 { compatible ovti,ov5695; reg 0x36; clocks cru CLK_CIF_OUT; clock-names cif_clk; rockchip,camera-module-index 0; rockchip,camera-module-focal-length-mm 2.8; rockchip,camera-module-orientation 0; rockchip,camera-module-face back; port { cif_in: endpoint { remote-endpoint mipi_in; }; }; }; }; cif_out { status okay; rockchip,output-port cif_out_port; }; mipi_csi0 { status okay; ports { #address-cells 1; #size-cells 0; mipi_in: endpoint0 { reg 0; remote-endpoint ov5695_out; }; }; }; ov5695 { status okay; clocks cru CLK_CIF_IN; clock-names xvclk; clock-frequency 24000000; power-domains power RK3566_PD_VIO; iovdd-supply vcc_1v8; avdd-supply vcc_2v8; dvdd-supply vcc_1v2; reset-gpios gpio3 RK_PA1 GPIO_ACTIVE_LOW; pwdn-gpios gpio3 RK_PA2 GPIO_ACTIVE_HIGH; rockchip,camera-module-name ov5695; rockchip,camera-module-lens-focal 2.8; rockchip,camera-module-lens-fnumber 2.0; port { ov5695_out: endpoint { remote-endpoint mipi_in; }; }; };关键细节解析rockchip,camera-module-index 0此值决定HAL层CameraProvider::getPhysicalCameraIds()返回的camera ID顺序。若板子上有两个OV5695第二个必须设为1否则HAL会认为只有一个物理设备clock-frequency 24000000必须与OV5695 datasheet中XVCLK输入频率一致。实测若设为25000000sensor初始化时i2c_read_reg(0x300a)返回0x00无效值导致SensorDriver::init()失败reset-gpios与pwdn-gpios的active levelOV5695 reset为低有效pwdn为高有效必须与datasheet第12页时序图完全一致。曾有项目因pwdn-gpios设为GPIO_ACTIVE_LOW导致sensor始终处于power down状态HAL层open()超时返回-19ENODEViovdd-supply等电源域必须指向正确的regulator节点。vcc_1v8对应RK3566的vcc_iovcc_2v8对应vcc_2v8vcc_1v2对应vcc_core。若电源未enablei2c_write_reg(0x300a, 0x0103)会失败log显示i2c write failed: -110ETIMEDOUT。验证dts配置是否生效的命令# 查看cif_mipi_rx是否probe成功 dmesg | grep cif_mipi_rx # 正常输出cif_mipi_rx ff410000.cif-mipi-rx: registered as media device # 查看v4l2 device是否创建 ls /dev/video* # 应看到/dev/video0cif_mipi_rx主设备 # 查看media controller拓扑 media-ctl -p # 输出中应有ov5695 3-0036: sink0, source0, and cif_mipi_rx: sink0, source1实操心得每次修改dts后务必执行make bootimg并烧写boot.img而非仅更新system.img。因为cif_mipi_rx驱动是built-indts变更需重新link kernel image。3.2 HAL模块编译与集成避开Rockchip私有符号陷阱Rockchip HAL3模块编译核心难点在于vendor HAL的.so库必须与Rockchip提供的librkisp.so、libcamerahal.so等blob严格匹配。这些blob是闭源的但Rockchip SDK在vendor/rockchip/common/proprietary/目录下提供了对应版本的.so和头文件。编译流程如下准备vendor blob# 复制Rockchip提供的vendor库到指定路径 cp -r vendor/rockchip/common/proprietary/* hardware/rockchip/camera/ # 关键确保librkisp.so的SONAME与hal_module_info_t中声明一致 readelf -d hardware/rockchip/camera/librkisp.so | grep SONAME # 输出应为0x000000000000000e (SONAME) Library soname: [librkisp.so]修改HAL模块Makefilehardware/rockchip/camera/Android.mkLOCAL_PATH : $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE_TAGS : optional LOCAL_SRC_FILES : \ CameraProvider.cpp \ CameraDevice.cpp \ CameraStream.cpp \ SensorDriver.cpp \ # ... 其他源文件 # 必须链接Rockchip私有库 LOCAL_SHARED_LIBRARIES : \ liblog \ libcutils \ libhardware \ libcamera_metadata \ librkisp \ # 关键Rockchip ISP库 libcamerahal \ # 关键Rockchip HAL基础库 libui \ libgui # 链接路径必须指向vendor blob目录 LOCAL_VENDOR_MODULE : true LOCAL_MODULE_RELATIVE_PATH : hw LOCAL_MODULE : camera.rk3566 include $(BUILD_SHARED_LIBRARY)编译HAL模块# 进入Android源码根目录 source build/envsetup.sh lunch rk3566_box-userdebug # 编译camera HAL模块注意不是mmma而是单独编译 mmm hardware/rockchip/camera/ # 输出文件位于out/target/product/rk3566_box/obj_arm/SHARED_LIBRARIES/camera.rk3566_intermediates/关键陷阱规避LOCAL_VENDOR_MODULE : true不可省略此标记告诉build system将模块安装到/vendor/lib/hw/而非/system/lib/hw/。Rockchip HAL必须从vendor分区加载否则CameraProvider::getInstance()会因找不到librkisp.so而崩溃LOCAL_MODULE : camera.rk3566命名规则模块名必须与SoC型号匹配。若命名为camera.rk3399HAL层hw_get_module()会返回-2ENOENTlog显示HAL module camera.rk3566 not foundlibrkisp.so版本一致性SDK中vendor/rockchip/common/proprietary/librkisp.so与hardware/rockchip/camera/include/rkisp.h头文件必须来自同一版本包。曾有项目混用202209版so与202203版头文件导致rkisp_set_sensor_mode()参数结构体大小不匹配HAL进程segmentation fault。验证HAL模块是否正确加载# 查看vendor分区是否有camera.rk3566.so adb shell ls -l /vendor/lib/hw/camera.rk3566.so # 应输出-rwxr-xr-x 1 root root 1234567 Aug 1 10:00 /vendor/lib/hw/camera.rk3566.so # 查看HAL服务是否启动 adb shell dumpsys | grep camera # 正常输出CameraService (pid 1234) is running3.3 CameraService集成与启动流程从HAL加载到App可见HAL模块编译完成后需确保Android CameraService能正确发现并初始化它。Rockchip平台的CameraService启动依赖于vendor/rockchip/common/camera/camera_config.xml配置文件而非AOSP的/system/etc/camera/camera_config.xml。该文件定义了物理camera数量、sensor类型、默认参数等。以单OV5695为例关键配置如下CameraConfiguration Camera id0 facingback orientation0 Parameter namesensor_name valueov5695/ Parameter namemodule_name valueov5695/ Parameter namemax_preview_width value1920/ Parameter namemax_preview_height value1080/ Parameter namemax_picture_width value2592/ Parameter namemax_picture_height value1944/ Parameter namesupported_preview_sizes value1920x1080,1280x720,640x480/ Parameter namesupported_picture_sizes value2592x1944,1920x1080,1280x720/ Parameter namesupported_fps_ranges value15000,30000;30000,30000/ Parameter namedefault_preview_size value1280x720/ Parameter namedefault_picture_size value1920x1080/ Parameter namedefault_fps_range value15000,30000/ Parameter nameis_zsl_supported valuefalse/ Parameter nameis_hdr_supported valuetrue/ /Camera /CameraConfiguration关键参数说明id0对应dts中rockchip,camera-module-index 0必须一致supported_fps_ranges格式为min1,max1;min2,max2单位为100ns。15000,30000即15~30fps。Rockchip HAL会将此值映射到ISP的FPS_MIN/FP_MAX寄存器is_hdr_supported若设为trueHAL层CameraDevice::createCaptureRequest()会启用HDR metadata通道否则ANDROID_SENSOR_AVAILABLE_CAPABILITIES中不包含CAPABILITY_RAW。CameraService启动流程实录SystemServer启动时加载CameraServiceI/CameraService: CameraService started (pid 1234) I/CameraService: Loading camera provider...HAL加载并注册ProviderI/HAL3: CameraProvider2.4-impl.so loaded I/HAL3: CameraProvider::getInstance() called I/HAL3: CameraProvider::registerAsService() successCameraService查询物理设备I/CameraService: Found 1 physical camera devices I/CameraService: CameraId: 0, facing: back, orientation: 0App首次调用CameraManager.openCamera()I/HAL3: CameraDevice::open() called for id0 I/HAL3: SensorDriver::init() start I/HAL3: i2c_write_reg(0x300a, 0x0103) 0x01 // sensor reset release I/HAL3: rkisp_set_sensor_mode(1920x108030fps) success I/HAL3: CameraDevice::open() success若流程卡在第2步常见原因/vendor/etc/camera/camera_config.xml权限错误应为644camera.rk3566.so未正确签名SELinux拒绝加载log显示avc: denied { execute } for path/vendor/lib/hw/camera.rk3566.solibrkisp.so缺失或版本不匹配dlopen失败log显示dlopen failed: library librkisp.so not found。4. 实操过程与核心环节实现4.1 从零开始配置OV5695dts修改、HAL适配、参数验证全流程本节以一块全新RK3566开发板Android 11接入OV5695 sensor为例完整演示从硬件连接确认到App预览成功的每一步操作。所有命令均在Ubuntu 18.04主机和Android设备上实测。Step 1硬件连接确认使用万用表测量OV5695的XVCLK引脚通常为pin 1确认有24MHz方波输出测量RESET引脚在SoC上电后100ms内应出现一个1ms低脉冲测量PWDN引脚常态为高电平3.3VCameraDevice::open()时应拉低。Step 2修改dts并编译kernel编辑arch/arm64/boot/dts/rockchip/rk3566-evb.dts添加前述OV5695节点执行make ARCHarm64 rk3566-evb.img生成boot.img用rkdeveloptool烧写rkdeveloptool wl 0x00000000 boot.img。Step 3验证kernel层识别# 设备端执行 adb shell dmesg | grep -i ov5695\|cif # 正常输出 # [ 2.345678] ov5695 3-0036: Detected OV5695 sensor # [ 2.345789] cif_mipi_rx ff410000.cif-mipi-rx: bound ov5695 (ops ov5695_ops) adb shell ls /dev/video* # 输出/dev/video0 adb shell media-ctl -p | grep -A5 ov5695 # 输出 # Entity 3 [ov5695 3-0036]: # type Node subtype V4L flags 0 # device node name /dev/v4l-subdev0 # pads: 1, links: 1 # pad0: SinkStep 4编译并烧写HAL模块修改hardware/rockchip/camera/Android.mk确保LOCAL_MODULE : camera.rk3566执行mmm hardware/rockchip/camera/将生成的camera.rk3566.so推送到设备adb root adb remount adb push out/target/product/rk3566_box/vendor/lib/hw/camera.rk3566.so /vendor/lib/hw/ adb shell chmod 644 /vendor/lib/hw/camera.rk3566.soStep 5配置camera_config.xml创建/vendor/etc/camera/camera_config.xml内容如前文所示设置权限adb shell chmod 644 /vendor/etc/camera/camera_config.xml。Step 6重启CameraService并验证# 重启服务 adb shell stop cameraserver adb shell start cameraserver # 查看log adb logcat -b main -b system -b events | grep -i camera\|hal3 # 应看到 # I/CameraService: CameraService started # I/HAL3: CameraProvider::getInstance() # I/CameraService: Found 1 physical camera devices # 测试App调用 adb shell am start -n com.android.camera2/com.android.camera.CameraLauncher若App启动后黑屏检查logcat -s HAL3出现HAL3: SensorDriver::init() failed检查dts中reset-gpios极性或I2C地址OV5695默认0x36若硬件改为0x37需同步修改reg 0x37出现HAL3: rkisp_set_sensor_mode failed检查clock-frequency是否匹配或ISP firmware是否加载adb shell ls /lib/firmware/rkisp/应有rkisp_v12.bin出现HAL3: stream config failed: -22检查supported_preview_sizes是否包含App请求的尺寸或HAL层CameraStream::configureStreams()中format是否支持HAL_PIXEL_FORMAT_YCrCb_NV12。4.2 调试核心问题帧率抖动、黑屏、metadata丢失的定位方法在Rockchip HAL3开发中三大高频问题预览帧率从30fps突降至15fps、拍照后黑屏、CaptureResult中缺少ANDROID_SENSOR_TIMESTAMP。以下是针对每种问题的系统化排查流程。帧率抖动问题30fps → 15fps现象logcat -s HAL3中反复出现HAL3: frame duration: 66666666 ns即15fps而非预期的33333333 ns30fps。定位步骤确认App请求的FPS范围CaptureRequest.Builder builder cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW); builder.set(CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE, new Range(30000, 30000));若App未显式设置CameraService会使用camera_config.xml中default_fps_range。检查HAL层是否接收并处理I/HAL3: CameraDevice::processCaptureRequest() fps range: [30000, 30000] I/HAL3: rkisp_set_ae_fps_range(30000, 30000) called若无此log说明App请求未送达HAL检查CaptureRequest.Builder.setTargetSurface()是否传入有效Surface。验证ISP寄存器设置# 进入设备root shell adb shell su # 读取ISP FPS寄存器RK3566地址为0xff910100 devmem 0xff910100 32 # 正常值0x00007530 (30000 decimal)若值为0x00003a9815000说明rkisp_set_ae_fps_range()未生效需检查librkisp.so版本或HAL中rkisp_set_ae_fps_range()调用位置。检查MIPI CSI带宽adb shell cat /sys/kernel/debug/rockchip-cif/mipi_status # 输出中lane_rate应为1500 Mbps2-lane 1080p30需≥1200Mbps # 若为750 Mbps说明MIPI clock未倍频需在dts中添加 # mipi_csi0 { rockchip,mipi-rate 1500000000; };黑屏问题拍照后预览停止现象CameraDevice.takePicture()后TextureView持续黑屏logcat无明显错误。定位步骤确认拍照请求是否完成I/HAL3: CameraDevice::processCaptureRequest() for JPEG capture I/HAL3: CameraStream::queueBuffer() jpeg buffer queued I/HAL3: CameraStream::onCaptureCompleted() jpeg saved to /sdcard/DCIM/Camera/IMG_20230801_100000.jpg若无onCaptureCompleted说明HAL未回调检查CameraStream::setCaptureCallback()是否注册。检查预览流是否被意外stopI/HAL3: CameraStream::stopStream() called常见原因App在onCaptureCompleted回调中错误调用了previewRequestBuilder.set(CaptureRequest.CONTROL_MODE, CameraMetadata.CONTROL_MODE_OFF)导致HAL关闭预览流。验证buffer循环是否断裂adb shell dumpsys media.camera | grep Stream state # 正常Stream state: ACTIVE # 异常Stream state: STOPPED若为STOPPED手动重启流adb shell service call media.camera 1001 i32 0 i32 1 # 参数1001为restartStream0为camera id1为stream idmetadata丢失问题ANDROID_SENSOR_TIMESTAMP为空现象CaptureResult中result.get(CaptureResult.SENSOR_TIMESTAMP)返回null。定位步骤确认HAL是否填充timestampI/HAL3: CameraDevice::fillCaptureResult() timestamp: 123456789012345若无此log说明HAL未调用result-setEntry()。**
返回列表