Android CameraServer CameraDeviceClient梳理 CameraDeviceClient 设计与实现文件位置:api2/CameraDeviceClient.h/.cpp,common/Camera2ClientBase.h/.cpp,common/CameraDeviceBase.h1. 功能概述CameraDeviceClient 是ICameraDeviceUserAIDL 接口的服务端 Binder 实现,是 Android 应用 (Camera2 API) 与底层 Camera HAL 设备 (Camera3Device) 之间的核心桥梁。三大职责:请求路径:App → validate → map surfaces → mDevice-captureList/setStreamingRequestList结果路径:HAL → Camera3Device → FrameProcessorBase → onResultAvailable → FMQ → mRemoteCallback-onResultReceived通知路径:HAL → Camera3Device → notifyError/notifyShutter/notifyIdle → mRemoteCallback2. 类层次结构RefBase +-- CameraService::BasicClient [CameraService.h:356] | 权限/AppOps/UID/PID/AudioRestriction 管理 | +-- CameraDeviceClientBase [CameraDeviceClient.h:52] | | 继承 BasicClient + BnCameraDeviceUser (AIDL stub) | | typedef ICameraDeviceCallbacks as TCamCallbacks | | 持有 mRemoteCallback | | | +-- Camera2ClientBaseCameraDeviceClientBase [Camera2ClientBase.h:35] | | 模板类,同时继承 NotificationListener | | 持有 mDevice, mBinderSerializationLock | | | +-- CameraDeviceClient [CameraDeviceClient.h:80] | 同时继承 FrameProcessorBase::FilteredListener | 具体 API2 客户端实现AIDL 接口链:ICameraDeviceUser←BnCameraDeviceUser←CameraDeviceClientBase←CameraDeviceClient实现的接口:ICameraDeviceUser(AIDL) — App 调用的 Binder 接口NotificationListener— HAL 回调接口 (notifyError/notifyShutter/notifyIdle 等)FrameProcessorBase::FilteredListener— 帧结果监听 (onResultAvailable)3. CameraDeviceClient 成员变量3.1 核心成员成员类型含义mFrameProcessorspFrameProcessorBase后台线程,从 Camera3Device dequeue 结果并分发mDevicespCameraDeviceBaseHAL 设备抽象 (HidlCamera3Device/AidlCamera3Device/AidlCamera3SharedDevice)mRemoteCallbackspICameraDeviceCallbacksApp 端 Binder 回调mResultMetadataQueueunique_ptrMetadataQueueFMQ 零拷贝结果 metadata 队列mProviderManagerspCameraProviderManagerHAL provider 管理器引用3.2 流管理成员类型含义mStreamMapKeyedVectorSurfaceKey, StreamSurfaceIdIGBP binder / surface unique ID → (streamId, surfaceId)mConfiguredOutputsKeyedVectorint32_t, OutputConfigurationstream ID → OutputConfigurationmStreamInfoMapunordered_mapint32_t, OutputStreamInfostream ID → 输出流信息mDeferredStreamsVectorint32_t延迟 surface 的 stream ID 列表mInputStreamInputStreamConfiguration输入流状态: {configured, width, height, format, id}mHighResolutionCameraIdToStreamIdSetunordered_mapstring, unordered_setint高分辨率相机 → stream ID 集合mHighResolutionSensorsunordered_setstring支持超高分辨率的相机 ID 集合3.3 请求管理成员类型含义mStreamingRequestIdint32_t当前 repeating request ID (REQUEST_ID_NONE=-1 表示无)mStreamingRequestIdLockMutex保护 mStreamingRequestId 和 mSharedStreamingRequestmRequestIdCounterint32_t单调递增 request ID 计数器mStreamingRequestLastFrameNumberint64_tshared 模式取消 streaming 时的最后帧号3.4 Shared 模式成员类型含义mSharedStreamingRequestpairint32_t, int32_t(device-side reqId, client-side reqId)mSharedRequestMapmapint32_t, int32_tdevice-side capture reqId → client-side reqIdmSharedStreamingRequestLastFrameNumberint64_t最后帧号3.5 Composite Stream成员类型含义mCompositeLockMutex保护 composite stream mapsmCompositeStreamMap

相关新闻

最新新闻

SerenityOS 命令行选项解析指南:getopt 与 getopt_long 用法、返回值与底层实现

SerenityOS 命令行选项解析指南:getopt 与 getopt_long 用法、返回值与底层实现

SerenityOS 命令行选项解析指南:getopt 与 getopt_long 用法、返回值与底层实现 【免费下载链接】serenity The Serenity Operating System 🐞 项目地址: https://gitcode.com/GitHub_Trending/se/serenity 导读 本文以 getopt(3) 手册 为核心&a…

2026/10/1 19:32:24
轻量服务器还是ECS?大促云服务器选购与避坑实战指南

轻量服务器还是ECS?大促云服务器选购与避坑实战指南

每年大促节点,群里永远有人在问同一个问题:“38元的轻量服务器到底怎么抢?为什么我每次点进去都是已售罄?68元直购和99元的ECS我到底选哪个?”作为一个常年帮团队和自己采购云服务器的老用户,我太清楚这种纠…

2026/9/30 21:32:07
为 AI 代理的 Review 动作编写 Cedar 审批门控策略:review-agent-governance 策略编写实战指南

为 AI 代理的 Review 动作编写 Cedar 审批门控策略:review-agent-governance 策略编写实战指南

为 AI 代理的 Review 动作编写 Cedar 审批门控策略:review-agent-governance 策略编写实战指南 【免费下载链接】agents Multi-harness agentic plugin marketplace for Claude Code, Codex, Cursor, OpenCode, GitHub Copilot, and Google Antigravity 项目地址:…

2026/10/2 15:29:32
PaddleOCR 手写数学公式识别算法 CAN 实战指南:Counting-Aware Network 训练、评估与推理部署

PaddleOCR 手写数学公式识别算法 CAN 实战指南:Counting-Aware Network 训练、评估与推理部署

PaddleOCR 手写数学公式识别算法 CAN 实战指南:Counting-Aware Network 训练、评估与推理部署 【免费下载链接】PaddleOCR Turn any PDF or image document into structured data for your AI. A powerful, lightweight OCR toolkit that bridges the gap between i…

2026/10/1 19:32:23
Spring源码解析:构造器注入的类型转换与候选匹配机制

Spring源码解析:构造器注入的类型转换与候选匹配机制

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 19:32:35
openai-agents-python 多模型接入指南:深入解析 AnyLLMModel 适配层与 any-llm 路由

openai-agents-python 多模型接入指南:深入解析 AnyLLMModel 适配层与 any-llm 路由

openai-agents-python 多模型接入指南:深入解析 AnyLLMModel 适配层与 any-llm 路由 【免费下载链接】openai-agents-python A lightweight, powerful framework for multi-agent workflows 项目地址: https://gitcode.com/GitHub_Trending/op/openai-agents-pyth…

2026/9/30 21:32:11

日新闻

周新闻

月新闻