121、Camera HAL 层设计:从 APP 请求到 ISP 配置的完整控制通路
一、一个让我熬夜三天的bug
去年做某旗舰机项目,遇到一个诡异现象:第三方美颜APP调用后置主摄,预览画面偶尔出现“半边脸偏绿、半边脸偏红”的色差。查了三天,从APP层追到HAL层,最后发现是HAL在构造ISP配置时,把AWB(自动白平衡)的增益矩阵和CCM(色彩校正矩阵)的生效顺序搞反了——APP请求的预览流和拍照流共用同一套ISP pipeline,但HAL在切换流类型时没有重新计算ISP参数,导致AWB和CCM的时序错位。
这个bug让我意识到:HAL层不是简单的“传话筒”,它承担着从应用层语义到底层硬件配置的“翻译”和“仲裁”职责。今天就从这段血泪史出发,聊聊HAL层如何把APP的“我要拍照”变成ISP寄存器里的一串0101。
二、APP请求的“变形记”
APP调用CameraManager.openCamera()后,会通过CameraDevice.createCaptureRequest()构造一个CaptureRequest。这个Request里塞满了各种“愿望”:曝光补偿、对焦区域、输出格式、帧率……但底层ISP不认识这些高维概念,它只认寄存器值。
HAL层(通常是Camera3Device或CameraHAL)拿到Request后,