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

相关新闻

最新新闻

百度网盘下载很慢怎么解决?2026还有突破限速限制的办法吗?

百度网盘下载很慢怎么解决?2026还有突破限速限制的办法吗?

在日常日常使用云端存储进行文件传输时,不少人会发现下载速度未能达到预期。文件传输的效率实际上受到从源端服务器到本地设备整个链路中多个环节的共同影响。以下从技术原理与网络环境角度,分析影响下载表现的主要原因及相应的优化思路。 https://www.…

2026/7/24 22:38:29
LVS-NAT 负载均衡实验从环境搭建到规则持久化

LVS-NAT 负载均衡实验从环境搭建到规则持久化

NAT模式环境设定LVS-NAT是一种基于网络地址转换(NAT)的负载均衡技术,主要用于将客户端请求分发到后端多台真实服务器。其核心是通过修改数据包的源或目标IP地址和端口,实现请求转发和响应回传。请求转发过程 客户端请求到达负载均…

2026/7/24 22:38:29
3分钟掌握DeepL Chrome翻译插件:告别繁琐复制粘贴,让外文阅读像母语一样流畅

3分钟掌握DeepL Chrome翻译插件:告别繁琐复制粘贴,让外文阅读像母语一样流畅

3分钟掌握DeepL Chrome翻译插件:告别繁琐复制粘贴,让外文阅读像母语一样流畅 【免费下载链接】deepl-chrome-extension A DeepL Translator Chrome extension 项目地址: https://gitcode.com/gh_mirrors/de/deepl-chrome-extension 还在为阅读外文…

2026/7/24 22:38:29
实战指南:GitHub Actions定时运行daily_stock_analysis实现股票智能分析自动化

实战指南:GitHub Actions定时运行daily_stock_analysis实现股票智能分析自动化

实战指南:GitHub Actions定时运行daily_stock_analysis实现股票智能分析自动化 想要零成本实现专业的股票分析自动化吗?daily_stock_analysis正是你需要的解决方案。这个LLM驱动的A/H/美股智能分析系统,集成了多数据源行情、实时新闻、智能决…

2026/7/24 22:38:29
拯救者笔记本终极性能管家:3个技巧让你的游戏本脱胎换骨

拯救者笔记本终极性能管家:3个技巧让你的游戏本脱胎换骨

拯救者笔记本终极性能管家:3个技巧让你的游戏本脱胎换骨 【免费下载链接】LenovoLegionToolkit Lightweight Lenovo Vantage and Hotkeys replacement for Lenovo Legion laptops. 项目地址: https://gitcode.com/gh_mirrors/le/LenovoLegionToolkit 你是否曾…

2026/7/24 22:38:29
C++入门指南:从开发环境搭建到核心语法与调试实践

C++入门指南:从开发环境搭建到核心语法与调试实践

1. 从“Hello World”到理解C的骨架很多朋友第一次接触C&#xff0c;可能都是从一行简单的cout << "Hello World!";开始的。这行代码背后&#xff0c;其实已经包含了C程序最核心的几个要素&#xff1a;一个入口点、一个输出操作&#xff0c;以及一个编译运行的…

2026/7/24 22:33:28

月新闻