android Camera 之 ZSL

本文介绍了ZSL(零延时拍照)技术,它能减少拍照延时,让拍照与回显瞬间完成。阐述了Single Shot模式下的工作原理,还说明了ZSL的实现机制,包括所需组件及数据处理。同时对比了其在Android 4.4和5.0上的实现区别,并给出相关参考链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ZSL的概念

ZSL (zero shutter lag) 中文名称为零延时拍照,是为了减少拍照延时,让拍照&回显瞬间完成的一种技术。

Single Shot

当开始预览后,sensor 和 VFE 会产生 preview 和 snapshot帧, 而最新的snapshot 帧数据会被存储在buffer 中。当拍照被触发,系统计算实际的拍照时间,找出在buffer中的相应帧,然后返回帧到用户,这就是所谓的“ZERO”。

 

系统计算出shutter lag的时间,然后把某个帧认作是拍照实时的那帧数据。

ZSL的实现机制

因为ZSL实现需要实现一下几点:

1. 一个surfaceView用于预览

2. 一个队列缓存snapshot的数据

3. 拍照动作获取队列某桢数据作为拍照数据输出

4. 输出的照片需要YUV->JPEG数据的转码

 

首先说一下ZSL功能在android4.4和android5.0上实现的区别。

Android4.4的实现对于2)步和3)步都是在HAL层实现,HAL层在维护缓存队列,当接收倒take_picture 命令时直接取得某桢缓存数据,进行转码,然后以正常拍照的流程利用@link android.hardware.Camera.PictureCallback通知应用层拍照的数据。

Android5.0的实现对于2)步和3)步都是在应用层实现,应用层在启动预览时给HAL层传递2个surface给HAL层,HAL层利用其中一个surface用于预览数据填充,一个surface用于填充snapshot的数据填充。应用层不断读取surface中snapshot的数据去维护一个缓存队列,当用户执行take_picture,读取缓存队列的数据作为拍照数据。

 

Android5.0中的应用层已经有实现ZSL类:

src/com/android/camera/one/v2/OneCameraZslImpl.java

 

ref:

android 5.0 Camera 之 ZSL说明
https://blog.youkuaiyun.com/qq160816/article/details/50728349

ZSL(zero shutter lag) 简介
http://blog.chinaunix.net/uid-7213935-id-5753468.html

转载于:https://www.cnblogs.com/bluestorm/p/11051253.html

<think>好的,我现在要回答用户关于Android相机ZSL(Zero Shutter Lag)和Non-ZSL的区别及用法的问题。首先,我需要回顾ZSL和Non-ZSL的基本概念,确保自己理解正确。 用户的问题是关于Android相机中的ZSL和Non-ZSL的区别以及它们的用法。我需要先明确ZSL是什么,它的工作原理,以及Non-ZSL的不同之处。ZSL即零快门延迟,通常通过在拍照前预缓存图像帧来实现快速捕获,避免传统拍照中的延迟。而Non-ZSL则是传统的拍照方式,可能会有更明显的延迟。 接下来,我需要考虑两者的主要区别。可能包括延迟、实现机制、图像处理流程、适用场景等方面。例如,ZSL通过保持一个环形缓冲区来存储预览帧,当用户按下快门时,选择已经存在的帧进行处理,从而减少延迟。而Non-ZSL可能需要启动新的捕获流程,导致更长的等待时间。 关于用法,可能需要说明在Android中如何配置ZSL,比如通过Camera2 API的设置,或者在底层如何通过CamX架构中的配置来启用或禁用ZSL。例如,用户提到的引用[1]中提到禁用ZSL的方法,可能涉及修改某些配置或使用特定的用例设置。 还需要注意ZSL的优缺点。虽然ZSL减少了延迟,但可能会增加内存和功耗,因为需要持续缓存图像帧。而Non-ZSL可能在需要高质量图像时更合适,因为它可能允许更长的曝光时间或更复杂的处理。 另外,引用[2]中提到的生成网络和身体姿势估计可能与问题无关,但需要确认是否有其他相关信息可能被遗漏。不过根据上下文,引用[1]中的CamX架构和ZSL配置更为相关,应主要参考这部分内容。 需要确保回答结构清晰,分点说明区别和用法,并引用提供的参考资料。例如,在禁用ZSL时,引用[1]提到的方法是通过不选择ZSL用例来实现,这在CamX架构中可能涉及特定的硬件初始化和配置。 最后,生成相关问题,可能涉及ZSL的实现原理优化方法、适用场景等,确保问题与主题相关,并帮助用户进一步探索。</think>### Android相机ZSL与Non-ZSL的区别及用法 #### 1. **ZSL(Zero Shutter Lag)的核心机制** ZSL通过**预缓存图像帧**实现“零快门延迟”。其原理是: - 在预览阶段,系统持续将图像帧存入**环形缓冲区**(例如存储3-5帧) - 当用户按下快门时,选择**按下瞬间对应的历史帧**进行处理 - 处理流程包括降噪、自动对焦/AE锁定等后处理,最终输出成片 典型代码配置示例(基于CamX架构): ```c // 禁用ZSL的配置示例 <UsecaseSettings> <disableZSL>true</disableZSL> </UsecaseSettings> ``` #### 2. **Non-ZSL的传统流程** - 触发拍照时启动全新捕获会话 - 需等待传感器重新配置(如曝光时间、ISO调整) - 完整流程包括:3A收敛→图像捕获→ISP处理,导致约**300-800ms延迟** #### 3. **关键差异对比** | 特性 | ZSL | Non-ZSL | |---------------------|------------------------------|-----------------------------| | 延迟 | 50-200ms | 300-800ms | | 内存占用 | 高(需维持预览帧缓存) | 低 | | 图像质量 | 可能受预览分辨率限制 | 支持全分辨率RAW捕获 | | 适用场景 | 快速抓拍、连拍 | 专业模式、长曝光、HDR合成 | | 功耗 | 较高(持续帧处理) | 按需触发,相对较低 | #### 4. **开发实践建议** - **启用ZSL**适用于社交类相机应用: ```java CaptureRequest.Builder request = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_ZERO_SHUTTER_LAG); ``` - **禁用ZSL**的典型场景(引用[1]): - 需要精确控制曝光参数的科研/工业应用 - 使用外部ISP处理图像管线时 - 兼容旧设备时(部分低端SOC不支持ZSL硬件加速) #### 5. **性能优化技巧** - ZSL模式下建议限制缓存队列深度(通常3-5帧) - 非ZSL模式可结合`TEMPLATE_STILL_CAPTURE`提升画质 - 在CamX层可通过`camxchinode`调整3A统计策略[^1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值