Android CameraServer Camera3Device/AidlCamera3Device梳理
Camera3Device / AidlCamera3Device 设计与实现文件位置:common/CameraDeviceBase.h— 纯虚接口基类device3/Camera3Device.h/Camera3Device.cpp— 核心共享逻辑 (~6000行)device3/aidl/AidlCamera3Device.h/AidlCamera3Device.cpp— AIDL HAL 子类device3/hidl/HidlCamera3Device.h/HidlCamera3Device.cpp— HIDL HAL 子类1. 类层次结构FrameProducer (虚基类) - CameraDeviceBase (纯虚接口, common/CameraDeviceBase.h) - Camera3Device (核心共享逻辑, device3/Camera3Device.h) - AidlCamera3Device (AIDL HAL 子类, device3/aidl/) - HidlCamera3Device (HIDL HAL 子类, device3/hidl/)Camera3Device 实现的 mixin 接口:camera3::SetErrorInterface— 错误状态转换camera3::InflightRequestUpdateInterface— 在途请求簿记camera3::RequestBufferInterface— HAL buffer 请求序列化camera3::FlushBufferInterface— buffer flush 操作AttributionAndPermissionUtilsEncapsulator— 权限/身份工具AIDL vs HIDL 回调差异:HidlCamera3Device直接继承ICameraDeviceCallback(自身就是 HIDL binder 对象)AidlCamera3Device使用独立内部类AidlCameraDeviceCallbacks(std::shared_ptr管理),因为 NDK AIDL 后端不支持sp2. 核心成员变量2.1 Camera3Device变量类型说明mInterfaceLockMutex序列化公共 API(输入/配置端),必须在 mLock 之前获取mLockMutex内部状态主锁mIdconst std::string相机设备 IDmStatusenum Status设备状态机值mStatusChangedCondition状态变更条件变量mRecentStatusUpdatesVectorStatusInfo最近状态变更历史,用于 waitUntilStateThenRelockmErrorCausestd::stringSTATUS_ERROR 时的错误信息mOutputStreamscamera3::StreamSet所有活跃输出流集合mInputStreamspCamera3Stream单个输入流(如有)mInterfacespHalInterface抽象 HAL 接口指针(多态:AidlHalInterface 或 HidlHalInterface)mDeviceInfoCameraMetadata静态相机特性 metadatamPhysicalDeviceInfoMapunordered_mapstring, CameraMetadata逻辑多相机的每个物理相机特性mRequestThreadspRequestThread请求下发线程mStatusTrackerspStatusTracker空闲检测跟踪器mBufferManagerspCamera3BufferManagerGraphicBuffer 管理器mPreparerThreadspPreparerThreadbuffer 预分配后台线程mInFlightMapInFlightRequestMap在途请求跟踪映射(受 mInFlightLock 保护)mResultQueuestd::listCaptureResult已完成捕获结果队列mListenerwpNotificationListener上游通知监听器(CameraDeviceClient)mUseHalBufManagerboolHAL 是否使用自身 buffer 管理mRequestBufferSMRequestBufferStateMachine控制 HAL 何时可请求 buffer 的状态机mDistortionMappersunordered_mapstring, DistortionMapper每相机畸变矫正映射器mZoomRatioMappersunordered_mapstring, ZoomRatioMapper每相机变焦比映射器mRotateAndCropMappersunordered_mapstring, RotateAndCropMapper每相机旋转裁剪映射器mInjectionMethodsspCamera3DeviceInjectionMethods注入相机支持mCameraServiceWatchdogspCameraServiceWatchdog检测 HAL 挂起的看门狗线程2.2 AidlCamera3Device 额外成员变量类型说明mResultMetadataQueueunique_ptrAidlResultMetadataQueue接收 HAL 捕获结果 metadata 的 FMQmCallbacksshared_ptrAidlCameraDeviceCallbacks注册到 HAL 的 AIDL 回调 binder 对象mBatchSizeLimitEnabledbool高速配置的 batch_size_max 是否生效mSensorReadoutTimestampSupportedboolHAL 是否支持传感器读出时间戳3. 核心内部类3.1 HalInterface — HAL 通信策略接口位置:Camera3Device.h:486-646抽象内部类,定义 HAL 通信契约。继承Camera3StreamBufferFreedListener和BufferRecordsInterface。关键纯虚方法:方法说明getTransportType()返回 AIDL 或 HIDLconfigureStreams()配置 HAL 流processBatchCaptureRequests()批量下发捕获请求到 HALflush()/close()生命周期管理constructDefaultRequestSettings()获取默认请求模板signalPipelineDrain()通知 HAL 排空管线isReconfigurationRequired()检查会话参数是否需要重新配置具体子类:子类位置说明AidlHalInterfaceAidlCamera3Device.h:80-164封装 ICameraDeviceSession + AidlRequestMetadataQueueHidlHalInterfaceHidlCamera3Device.h:99-177封装版本化 HIDL session 对象 (3.2-3.7)3.2 RequestThread — 请求下发线程位置:Camera3Device.h:1007-1360继承Thread,从队列取出请求批量下发到 HAL。关键成员:成员类型说明mParentwpCamera3Device拥有设备的弱引用mInterfacespHalInterfaceHAL 接口mRequestQueueRequestList一次性请求队列mRepeatingRequestsRequestListrepeating 请求队列mNextRequestsVectorNextRequest当前正在准备/提交的批次mFrameNumberuint32_t单调递增帧计数器mTriggerMapTriggerMap排队的触发器(AF、AE 预捕获)mLatestSessionParamsCameraMetadata跟踪会话参数用于重配置检测mStatusIdintStatusTracker 注册的组件 ID关键方法:方法说明threadLoop()主循环:waitForNextRequestBatch → prepareHalRequests → sendRequestsBatchsetRepeatingRequests()设置 repeating 请求queueRequestList()一次性请求入队flush()flush 所有待处理请求queueTrigger()排队触发器注入下一个请求setPaused()暂停/恢复线程(重配置期间)

相关新闻

终极键盘连击克星:免费开源软件KeyboardChatterBlocker完整使用指南

终极键盘连击克星:免费开源软件KeyboardChatterBlocker完整使用指南

终极键盘连击克星:免费开源软件KeyboardChatterBlocker完整使用指南 【免费下载链接】KeyboardChatterBlocker A handy quick tool for blocking mechanical keyboard chatter. 项目地址: https://gitcode.com/gh_mirrors/ke/KeyboardChatterBlocker 键盘连击…

2026/7/24 22:07:47 阅读更多 →
ComfyUI-BrushNet完整指南:三步掌握AI图像精准修复与编辑技术

ComfyUI-BrushNet完整指南:三步掌握AI图像精准修复与编辑技术

ComfyUI-BrushNet完整指南:三步掌握AI图像精准修复与编辑技术 【免费下载链接】ComfyUI-BrushNet ComfyUI BrushNet nodes 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-BrushNet ComfyUI-BrushNet 是一个基于ComfyUI的图像修复与编辑插件&#xff…

2026/7/24 22:07:47 阅读更多 →
Android CameraServer Mapper相关梳理

Android CameraServer Mapper相关梳理

坐标 Mapper 类设计与实现 文件位置: device3/CoordinateMapper.h/.cpp, ZoomRatioMapper.h/.cpp, DistortionMapper.h/.cpp, RotateAndCropMapper.h/.cpp, UHRCropAndMeteringRegionMapper.h/.cpp 1. 功能概述 坐标 Mapper 子系统解决的核心问题:Camera HAL 和 App 处于不同…

2026/7/24 22:07:47 阅读更多 →

最新新闻

LLCOM串口工具使用记录

LLCOM串口工具使用记录

--循环发送快捷发送区数据---例子一 --发送数据中间间隔时间(单位ms) local sendDelay 1000--待发送数据的顺序 local sendList {1,2,4,1,6,8} --你也可以用下面的代码批量生成 --从2号发到15号数据 --[[ for i2,15 dotable.insert(sendList, i) end ]…

2026/7/24 22:16:51 阅读更多 →
我们在 Workbuddy 做了个 Skill,10 分钟摸透一个行业!

我们在 Workbuddy 做了个 Skill,10 分钟摸透一个行业!

Workbuddy 的技能市场(SkillHub)已经上架了上万个 Skill,从写文档到做 PPT 到分析数据,覆盖了不少场景。但我们在里面翻了一遍之后,发现一个很实际的问题:大多数 Skill 都是通用型的,装上能用&a…

2026/7/24 22:16:51 阅读更多 →
终极办公效率神器:QuickLook OfficeViewer Native 快速预览插件完整指南

终极办公效率神器:QuickLook OfficeViewer Native 快速预览插件完整指南

终极办公效率神器:QuickLook OfficeViewer Native 快速预览插件完整指南 【免费下载链接】QuickLook.Plugin.OfficeViewer-Native View Word, Excel, and PowerPoint files with MS Office and WPS Office components. 项目地址: https://gitcode.com/gh_mirrors/…

2026/7/24 22:16:51 阅读更多 →
QMK Toolbox终极指南:3分钟解锁键盘固件刷写新纪元

QMK Toolbox终极指南:3分钟解锁键盘固件刷写新纪元

QMK Toolbox终极指南:3分钟解锁键盘固件刷写新纪元 【免费下载链接】qmk_toolbox A Toolbox companion for QMK Firmware 项目地址: https://gitcode.com/gh_mirrors/qm/qmk_toolbox 在机械键盘个性化定制的世界里,QMK Toolbox正悄然重构着固件刷…

2026/7/24 22:16:51 阅读更多 →
AI生成的表格如何导出 AI导出鸭3秒搞定你

AI生成的表格如何导出 AI导出鸭3秒搞定你

结构化数据突围:AI生成表格的四种导出方案工程测评 一、痛点:当AI生成表格遭遇“格式黑洞” 在AI辅助内容生产成为常态的今天,一个长期被低估的技术难题正在浮出水面:表格导出后的结构崩塌。 实测中,直接复制Claude、G…

2026/7/24 22:16:51 阅读更多 →
WarcraftHelper:让魔兽争霸3在现代硬件上焕发新生的终极优化方案

WarcraftHelper:让魔兽争霸3在现代硬件上焕发新生的终极优化方案

WarcraftHelper:让魔兽争霸3在现代硬件上焕发新生的终极优化方案 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 你是否还在为魔兽争霸3那…

2026/7/24 22:15:51 阅读更多 →

日新闻

用Highcharts 创建可拖拽三维散点立方体3D图表

用Highcharts 创建可拖拽三维散点立方体3D图表

该案例基于Highcharts scatter3d 三维散点图实现空间立方体散点可视化,核心特色:三维 X/Y/Z 三轴空间,所有散点分布在 0~10 立方体空间内;散点使用径向渐变实现立体 3D 圆球质感;支持鼠标 / 触屏拖拽画布,…

2026/7/24 0:00:29 阅读更多 →
AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口 AppCertDlls 位于 HKLM\System\CurrentControlSet\Control\Session Manager\AppCertDlls。本文的程序功能是只读列出这个键在 64 位和 32 位注册表视图中的全部值,并显示每条值的来源、名称、类型和可安全显示的数…

2026/7/24 0:00:29 阅读更多 →
我的编程之路:第一篇博客

我的编程之路:第一篇博客

大家好,我是一名编程初学者,同时这也是我编程学习之路上的第一篇博客。在这里,我想要向大家介绍我的一些想法和规划。a.自我介绍我是一个刚刚接触编程的新手,目前在学习c语言,我对编程世界充满了强烈的好奇。当然&…

2026/7/24 0:00:29 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/24 3:59:20 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/24 1:23:39 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/24 18:52:18 阅读更多 →

月新闻