当前位置: 首页 > news >正文

Android CameraServer PreviewFrameSpacer梳理

PreviewFrameSpacer 设计与实现

文件位置:device3/PreviewFrameSpacer.h/PreviewFrameSpacer.cpp


1. 问题背景

理想情况下,预览帧应按传感器输出节奏呈现给用户。但实际中,CPU 负载、请求设置差异等因素导致帧处理延迟不均匀,造成预览帧间距忽大忽小,用户感知到卡顿。


2. 核心设计

PreviewFrameSpacer 继承Thread,运行在独立线程中:

Camera3OutputStream::returnBufferCheckedLocked() │ (HAL 返回 buffer) ▼ PreviewFrameSpacer::queuePreviewBuffer() │ 入队到 mPendingBuffers ▼ PreviewFrameSpacer::threadLoop() [独立线程] ├── 等待 buffer 到达 ├── 计算 readoutInterval = 当前帧 readoutTimestamp - 上一帧 readoutTimestamp ├── if readoutInterval >= 80ms: 直接入队(帧间距过大,不等待) ├── else: 按 readoutInterval 节奏等待后入队 └── queueBufferToClientLocked() → mConsumer->queueBuffer()

3. 关键常量

常量含义
kWaitDuration50ms无 buffer 时的等待超时
kFrameIntervalThreshold80ms帧间距阈值,超过则直接入队
kMaxFrameWaitTime10ms最大等待时间,避免过度延迟
kFrameAdjustThreshold2ms提前量,补偿代码执行时间

4. threadLoop() 核心逻辑

boolPreviewFrameSpacer::threadLoop(){// 1. 无 buffer 时等待 50msif(mPendingBuffers.empty()){mBufferCond.waitRelative(mLock,kWaitDuration);returntrue;}// 2. 计算与上一帧的 readout 间隔nsecs_t readoutInterval=buffer.readoutTimestamp-mLastCameraReadoutTime;// 3. 间隔 >= 80ms: 直接入队(非连续预览帧)if(readoutInterval>=kFrameIntervalThreshold){queueBufferToClientLocked(buffer,currentTime);returntrue;
http://www.jsqmd.com/news/1250116/

相关文章:

  • 零基础学pcie--setpci:直接读写配置空间(手术刀级工具)
  • 北京华恒智信助力国有温泉酒店破解人才选拔无标准难题
  • 【2020-01-18】《图解密码技术》读书笔记:信息威胁与处理
  • canvas在标签上设置宽高,与在style中设置宽高有什么区别?
  • 市场正规的仿生木皮制造厂名声
  • 亲身探访北京百达翡丽售后服务中心|网点地址与售后热线(2026年7月最新) - 百达翡丽服务中心
  • 成都龙泉驿区除甲醛哪家靠谱?深度对比多家机构,本地资深业主实测优选肃醛环保 - 专注室内空气检测治理
  • 浏览器的 TLS 指纹:深入 JA3/JA4 原理与 BoringSSL 网络栈定制
  • 【2019-12-25】【转】使用All in One WP Migration插件为WordPress快速搬家
  • TMS320F280x DSP时钟、看门狗与低功耗模式配置实战指南
  • 基于TMS320F28379D与SFRA的快速电流环性能实测与频域分析
  • 改进蚁群算法在MATLAB中的多无人载具路径规划实践
  • 【愚公系列】《Android应用案例开发大全》002-Android 开发环境的搭建
  • 基于TI C2000 FCL与SFRA的双轴PMSM伺服驱动实战指南
  • 本科毕业论文写作,有哪些实用工具与写作助手推荐?
  • 2026年智能单腔滚筒清洗机采购测评 - 资讯纵览
  • 中控六层PCB材料与工艺选型规范
  • Qt信创|鱼塘/虾塘/蟹塘分拣工智能台账管理系统
  • 基于BLE/WiFi/Ethernet/4G等技术接入云平台物联网络解决方案--自连网桥/网关应用选型指南
  • 北京IT企业豆包推广怎么做?AI获客联系哪家服务商 - 2027品牌AI展
  • 2026年7月最新江诗丹顿东莞虎门万达广场维修保养服务电话 - 江诗丹顿官方服务中心
  • 从写页面到造 Agent:前端程序员如何平滑切到全栈 AI Agent 开发(一份不灌鸡汤的实战路线图)
  • uni-app APP微信登录“invalid code”终极解决方案
  • linux的rename命令详解
  • 基于DSP的实时数字水印实现:从频域算法到嵌入式系统优化
  • 命令执行与代码执行
  • 中小企业Agent选型指南:核心能力与实施策略
  • TI KeyStone I DSP外设硬件设计实战:PCIe、AIF、DDR3接口配置与信号完整性避坑指南
  • 基于TMS320F28379D的双电机FOC快速电流环控制与SFRA分析实践
  • 2026年重庆潼南管道疏通避坑指南:快达师傅教你识别隐形收费 - 余生黄金回收