Android CameraServer架构理解

发布时间:2026/7/23 21:03:36
Android CameraServer架构理解 0. 全链路架构总览+=====================================================================+ | App 层 (Java/Native) | | android.hardware.camera2 (Camera2 API) | | android.hardware.Camera (Camera1 API, 兼容垫片) | +=====================================================================+ | Binder IPC: AIDL (ICameraDeviceUser / ICamera) v +=====================================================================+ | Framework 层 (Camera Framework) | | CameraManager - CameraDevice - CameraCaptureSession | | CameraDeviceCallbacks (结果/事件回调) | | CaptureRequest / OutputConfiguration | +=====================================================================+ | Binder IPC: AIDL (ICameraService) v +=====================================================================+ | Camera Service 进程 (cameraserver) | | [本文重点分析的 libcameraservice] | | CameraService - CameraDeviceClient - Camera3Device | | CameraProviderManager - ProviderInfo - DeviceInfo3 | +=====================================================================+ | Binder IPC: AIDL (ICameraProvider/ICameraDeviceSession) [当前标准] | HIDL (旧版本兼容) v +=====================================================================+ | Camera Provider 进程 (vendor 分区) | | AIDL 接口实现 (当前标准) - HAL3 接口调用 | | HIDL 接口 (旧版本兼容) | | 通过 dlopen 加载 HAL3 SO 库 | +=====================================================================+ | HAL3 接口 (camera_module_t / camera3_device_t) v +=====================================================================+ | Camera HAL (厂商实现) | | 通过 dlopen 加载 HAL3 SO 库 | | 处理图像处理流水线、流配置、请求处理 | +=====================================================================+ | v +=====================================================================+ | Camera Driver (内核层) | | V4L2 框架 | | v4l2_subdev 子设备 | +=====================================================================+ | I2C / MIPI CSI v +=====================================================================+ | Camera Hardware (硬件层) | | Sensor / ISP (IPE/BPS) / Lens Actuator / OIS / Flash / EEPROM | +=====================================================================+核心设计理念:Treble 项目: 将平台厂商实现 (vendor) 与系统框架 (system) 隔离,Camera HAL Module 从 Camera Service 解耦到独立进程 Camera Provider双重跨进程: App-Service 通过 AIDL,Service-Provider 通过 AIDL(当前标准,旧平台兼容 HIDL)接口与实现分离: AIDL 接口定义暴露给厂商实现,HAL3 接口由厂商填充具体逻辑各层职责:层级进程核心职责AppApp 进程用户交互,创建 CaptureRequest,配置 StreamFrameworkApp 进程Camera2 API 实现,封装 Camera Service 调用Camera Servicecameraserver中转站角色,管理客户端/设备/Provider,权限控制,驱逐策略Camera Providercameraserver (vendor)AIDL 接口实现(当前标准),HAL3 接口调用,SO 库加载Driver内核V4L2 框架,子设备控制Hardware硬件Sensor 曝光/增益控制,ISP 图像处理,Lens 对焦1. 总体架构设计 (libcameraservice)1.1 Camera Service 内部分层架构+-------------------------------------------------------------------+ | App 进程 (Java/Native) | | android.hardware.camera2 / android.hardware.Camera | +-------------------------------------------------------------------+ | (Binder IPC: ICameraDeviceUser / ICamera) v +-------------------------------------------------------------------+ | cameraserver 进程 (libcameraservice) | | | | +--------------------+ +------------------------------------+ | | | CameraService | | CameraProviderManager | | | | (Binder 服务) |---| (HAL Provider 发现) | | | | "media.camera" | | ProviderInfo[] - DeviceInfo3 | | | +--------------------+ +------------------------------------+ | | | | | | +-------v-----------+ +-----------v-----------+ | | | API 层 | | HAL 传输层 | | | | api1/ Camera2Client| | aidl/ AidlCameraService| | | | api2/ CameraDevice | | hidl/ HidlCameraService| | | | Client | +------------------------+ | | +--------+----------+ | | | | v | | +--------v----------+ +-------------------+ | | | 客户端基类 | | Camera3Device | | | | Camera2ClientBase |---| (Device3 层) | | | +--------------------+ | AidlCamera3Device | | | | HidlCamera3Device | | | +-------------------+ | | | | | +---------------------------------v-------------------------------+| | | Stream 层 (device3/) || | | Camera3Stream - Camera3IOStreamBase - Camera3OutputStream || | | - Camera3InputStream || | | - Camera3SharedOutputStream || | | Camera3StreamSplitter / Camera3BufferManager || | +------------------------------------------------------------------+| +-------------------------------------------------------------------+ | (AIDL IPC) [当前标准,HIDL 为旧版本兼容] v +-------------------------------------------------------------------+ | Camera HAL (厂商实现) | | ICameraDeviceSession / ICameraDevice | +-------------------------------------------------------------------+1.2 目录结构目录职责root/CameraService 核心 (CameraService.h/cpp, CameraFlashlight, CameraServiceWatchdog)aidl/稳定 NDK AIDL 服务包装 (AidlCameraService, AidlCameraDeviceUser, DeathPipe)hidl/HIDL-to-AIDL 桥接适配器(旧版本兼容) (HidlCameraService, HidlCameraDeviceUser, CameraHybridInterface)api1/旧版 Camera1 API 客户端 (Camera2Client)api1/client2/API1 流水线组件 (FrameProcessor, StreamingProcessor, CaptureSequencer, JpegProcessor, ZslProcessor, CallbackProcessor, Parameters)api2/现代 Camera2 API 客户端 (CameraDeviceClient, CameraOfflineSessionClient, CompositeStream 变体)common/共享基类 (Camera2ClientBase, CameraDeviceBase, CameraProviderManager, FrameProcessorBase)common/aidl/AIDL ProviderInfocommon/hidl/HIDL ProviderInfodevice3/Camera3 设备 + Stream 实现 (Camera3Device, streams, mappers, StatusTracker, BufferManager)device3/aidl/Camera3Device 的 AIDL 传输层device3/hidl/Camera3Device 的 HIDL 传输层device3/deprecated/已废弃的 Camera3StreamSplitterconfig/SharedSessionConfigReader/Utilsgui/RingBufferConsumerutils/工具类 (ClientManager, AttributionAndPermissionUtils, TagMonitor, ExifUtils, SessionConfigurationUtils 等)tests/单元测试fuzzer/,libcameraservice_fuzzer/模糊测试1.3 Binder 服务注册与双重角色CameraService继承BinderServiceCameraService,通过静态instantiate()注册为"media.camera"服务。服务入口点是AidlCameraService(NDK 稳定 AIDL),它包装了核心CameraService类。Camera Service 的双重角色:对上 (AIDL Server): 作为服务端,通过 AIDL 接口处理来自 Camera Framework 的跨进程请求对下 (AIDL Client): 作为客户端,通过 AIDL 接口将请求转发至 Camera Provider(旧平台兼容 HIDL)1.4 AIDL 接口定义AIDL 接口实现类关键方法ICameraService.aidlCameraServicegetNumberOfCameras()获取相机数量,connectDevice()打开设备,addListener()添加状态监听ICameraDeviceUser.aidlCameraDeviceClientdisconnect()关闭设备,submitRequestList()发送请求,beginConfigure()/endConfigure()配置流,createDefaultRequest()创建默认请求ICameraDeviceCallbacks.aidlFrameworkCameraDeviceCallbacksonResultReceived()结果回传,onCaptureStarted()采集开始通知,onDeviceError()错误通知ICameraServiceListener.aidlFrameworkCameraManagerGlobalonStatusChanged()设备状态变更通知1.4 API1 状态说明API1 (android.hardware.Camera)仍在使用,但不再是直接对接 Camera HAL 1.0。它作为兼容垫片运行在 HAL3 之上:App 调用ICamera(Binder) -CameraService::connect()(API_1) -Camera2Client(翻译层) -Camera3Device(HAL3)HAL 1.0 已被明确拒绝 (ERROR_DEPRECATED_HAL)代码库中无废弃标记、无移除计划、无 feature flag 控制 API1CameraProviderManager::getAPI1CompatibleCameraDeviceIds()等兼容性基础设施仍在维护2. 核心模块详解2.1 CameraService(中央服务)文件:CameraService.h/.cpp(290KB 源码, 72KB 头文件 – 代码库中最大)继承关系:CameraService : BinderServiceCameraService, BnCameraService, IBinder::DeathRecipient, CameraProviderManager::StatusListener, IServiceManager::LocalRegistrationCallback, AttributionAndPermissionUtilsEncapsulator关键内部类:类职责BasicClient所有相机客户端的抽象基类。持有 camera ID、朝向、方向、PID/UID、远程 binder。管理权限生命周期 (notifyCameraOpening, startCameraStreamingOps, finishCameraStreamingOps, notifyCameraClosing)。ClientAPI1 客户端基类。继承BnCamera+BasicClient。声明 ICamera 纯虚方法 (lock, unlock, startPreview, takePicture)。CameraState每设备状态容器 (ID, status, cost, 冲突设备, 物理相机)。存储在mCameraStatesmap 中。CameraClientManager支持驱逐的活跃客户端容器,通过ClientDescriptor封装。使用ClientManagerBasicClient模板。UidPolicy追踪 UID 空闲/活跃状态以执行隐私策略。空闲 UID 不能使用相机。SensorPrivacyPolicy执行传感器隐私开关(启用时终止所有相机访问)。ServiceListenerICameraServiceListener回调的 death-recipient 包装。CameraInjectionSession用于测试的相机注入。关键成员变量:mCameraProviderManager(sp) – HAL provider 管理mActiveClientManager(CameraClientManager) – 活跃客户端追踪/驱逐mCameraStates(mapstring, shared_ptr) – 每设备状态mFlashlight(sp) – 闪光灯/手电筒控制mServiceLock(Mutex) – 主服务锁mUidPolicy,mSensorPrivacyPolicy– 隐私执行mTorchStatusMap,mTorchClientMap– 手电筒状态追踪mVirtualDeviceCameraIdMapper– 虚拟设备 camera ID 重映射ICameraService Binder 接口方法:getNumberOfCameras(),getCameraInfo(),getCameraCharacteristics()– 相机枚举connect()– API1 连接 (返回 ICamera)connectDevice()– API2 连接 (返回 ICameraDeviceUser)addListener()/removeListener()– 相机状态回调setTorchMode(),turnOnTorchWithStrengthLevel(),getTorchStrengthLevel()– 手电筒控制getConcurrentCameraIds(),isConcurrentSessionConfigurationSupported()– 并发相机injectCamera(),injectSessionParams()– 测试注入warmUp()– 预热相机设备notifySystemEvent(),notifyDeviceStateChange()– 系统事件2.2 Camera2ClientBase(模板客户端基类)文件:common/Camera2ClientBase.h/.cppCamera2ClientBaseTClientBase : TClientBase, NotificationListenerAPI1 (Camera2Client) 和 API2 (CameraDeviceClient) 共享的模板基类。提供:connect()/disconnect()– 设备生命周期initialize(spCameraProviderManager)– 调用initializeImpl()创建 Camera3Device通知回调:notifyError(),notifyShutter(),notifyAutoFocus/Exposure/Whitebalance()notifyActive()/notifyIdle()– 空闲/活跃状态切换关键成员:mDevice(sp) – HAL3 设备包装。2.3 Camera2Client(API1 客户端)文件:api1/Camera2Client.h/.cppCamera2Client : Camera2ClientBaseCameraService::Client在 HAL3 之上实现旧版android.hardware.Camera(API1) 接口。包含 API1 专用流水线组件:StreamingProcessor– 管理预览/录像流CaptureSequencer– 编排拍照序列JpegProcessor– JPEG 编码ZslProcessor– 零快门延迟处理CallbackProcessor– 回调数据传递Parameters– API1 参数管理请求 ID 范围: 预览 (10M-20M), 录像 (20M-30M), 拍照 (30M-40M)。2.4 CameraDeviceClient(API2 客户端)文件:api2/CameraDeviceClient.h/.cppCameraDeviceClientBase : CameraService::BasicClient, BnCameraDeviceUser CameraDeviceClient : Camera2ClientBaseCameraDeviceClientBase, FrameProcessorBase::FilteredListener现代 Camera2 API 实现。关键方法:submitRequest()/submitRequestList()/cancelRequest()– 捕获请求管理beginConfigure()/endConfigure()/createStream()/deleteStream()– 流配置startStreaming()/waitUntilIdle()/flush()– 流生命周期prepare()/tearDown()– Buffer 预分配switchToOffline()– 切换到离线处理关键成员:mFrameProcessor,mStreamMap,mConfiguredOutputs,mCompositeStreamMap,mResultMetadataQueue。组合流:DepthCompositeStream,HeicCompositeStream,JpegRCompositeStream– 继承CompositeStream基类。与 Camera3Device 的连接关系 (初始化时建立):Camera2ClientBase::initialize()调用Camera3Device::initialize()初始化设备Camera3Device::setNotifyCallback()将 Camera2ClientBase 注册为事件回调接收者实例化FrameProcessorBase并传入Camera3Device,建立 metadata 中转联系FrameProcessorBase启动后台线程,等待 Camera3Device 的结果Camera3Device 事件 (notify) - 直接给 CameraDeviceClientCamera3Device metadata - FrameProcessorBase - CameraDeviceClient2.5 Camera3Device(HAL3 设备)文件:device3/Camera3Device.h/.cppCamera3Device : CameraDeviceBase, SetErrorInterface, InflightRequestUpdateInterface, RequestBufferInterface, FlushBufferInterface核心设备抽象。抽象类 –AidlCamera3Device和HidlCamera3Device提供传输层特定实现。关键内部类:类职责HalInterface抽象 HAL 会话包装 (configureStreams, processBatchCaptureRequests, flush, close)。具体实现:HidlHalInterface,AidlHalInterface。RequestThread专用线程,负责向 HAL 提交捕获请求。管理请求队列、重复请求、触发器、暂停/恢复、批量提交。CaptureRequest单个捕获请求,包含设置列表、输入/输出流、批大小。PreparerThread后台线程,用于预分配流 Buffer。Camera3DeviceInjectionMethods管理 HAL 接口替换(注入测试)。RequestBufferStateMachine控制 HAL 何时可以请求 Buffer (ready/stopped/pending-stop)。状态机:STATUS_ERROR - STATUS_UNINITIALIZED - STATUS_UNCONFIGURED - STATUS_CONFIGURED - STATUS_ACTIVE关键成员:mInterface(sp) – HAL 会话接口mOutputStreams(StreamSet) – 所有活跃输出流mInputStream(sp) – 可选输入流mRequestThread(sp) – 请求提交线程mStatusTracker(sp) – 空闲/活跃状态追踪mBufferManager(sp) – 共享 Buffer 管理mInFlightMap– 在途请求追踪mDistortionMappers,mZoomRatioMappers,mRotateAndCropMappers,mUHRCropAndMeteringRegionMappers– 每相机 metadata 映射器Camera3Device 作为 ICameraDeviceCallback 的角色:Camera3Device 实现了 Provider 端的ICameraDeviceCallback接口初始化时通过CameraProviderManager::openSession()将自身作为回调传入 ProviderProvider 通过此回调将结果 (notify/processCaptureResult/returnStreamBuffers) 回传给 Camera3DeviceCamera3Device 内部再将事件和数据分发给 CameraDeviceClient 和 FrameProcessorBase2.6 AidlCamera3Device / HidlCamera3Device(传输层)AidlCamera3Device(device3/aidl/AidlCamera3Device.h/.cpp) —当前标准:AidlHalInterface包装ICameraDeviceSession(AIDL)使用AidlRequestMetadataQueue(FMQ) 实现快速请求提交AidlCameraDeviceCallbacks实现BnCameraDeviceCallback(processCaptureResult, notify, requestStreamBuffers, returnStreamBuffers)通过std::shared_ptr管理(NDK 后端要求)HidlCamera3Device(device3/hidl/HidlCamera3Device.h/.cpp) —旧版本兼容:HidlHalInterface包装多版本 HIDL 会话 (V3_2 至 V3_7)使用RequestMetadataQueue(HIDL FMQ)版本化会话指针:mHidlSession(V3_2),mHidlSession_3_3…mHidlSession_3_72.7 CameraProviderManager(HAL Provider 管理器)文件:common/CameraProviderManager.h/.cppCameraProviderManager : hidl::manager::V1_0::IServiceNotification, IServiceManager::LocalRegistrationCallback发现并管理所有 Camera HAL provider(当前标准 AIDL,兼容旧版 HIDL)。关键内部结构:结构体职责StatusListener纯虚回调接口 (由 CameraService 实现)。onDeviceStatusChanged(), onTorchStatusChanged(), onNewProviderRegistered()。ProviderInfo每 provider 状态: 名称、设备列表、vendor tags、手电筒支持。DeviceInfo每设备: ID、版本、特性、状态、资源开销。DeviceInfo3HALv3 特有,含特性修正 (单色、HEIC、JPEG/R、深度等)。关键方法:initialize(),getCameraCount(),getCameraDeviceIds(),getCameraCharacteristics(),openAidlSession(),openHidlSession(),setTorchMode(),hasFlashUnit(),isSessionConfigurationSupported(),warmUp()。2.8 Stream 层次结构Camera3StreamInterface (纯虚接口) | v Camera3Stream (基类, 继承 camera_stream C 结构体) | v Camera3IOStreamBase (增加 buffer 计数、帧计数) | +--- Camera3OutputStream (输出到 Surface 消费者) | | | +--- Camera3SharedOutputStream (通过 StreamSplitter 支持多 Surface) | +--- Camera3InputStream (输入/重处理, 来自 BufferItemConsumer)Camera3OutputStream:处理 Buffer 出队/入队到 Surface、BufferManager 集成、批量操作、PreviewFrameSpacer (显示 Vsync 同步)、镜像模式、丢帧支持。Camera3SharedOutputStream:通过Camera3StreamSplitter支持最多 4 个消费者 Surface。用于共享相机会话。Camera3FakeStream:用于测试/注入的伪流。2.9 StatusTracker文件:device3/StatusTracker.h/.cppStatusTracker : Thread通过聚合组件状态 (流、RequestThread、BufferManager) 追踪空闲/活跃状态。后台线程处理状态变更事件和合并的 fence。当所有组件都空闲且所有 fence 信号就绪时,通过notifyStatus()通知 Camera3Device。2.10 CameraFlashlight文件:CameraFlashlight.h/.cppFlashControlBase (抽象) | +--- ProviderFlashControl (HAL provider v2.4+) CameraFlashlight (门面)管理闪光单元发现和手电筒控制。使用CameraProviderManager进行 provider 级手电筒控制。旧的 HAL v1 向后兼容模式已移除。2.11 Buffer 管理Camera3BufferManager(device3/Camera3BufferManager.h/.cpp): 跨流管理共享 Buffer 池。动态分配/授予/回收 Buffer。Camera3StreamSplitter(device3/Camera3StreamSplitter.h/.cpp): 将单个 HAL 输出流拆分到多个消费者 Surface。由 Camera3SharedOutputStream 使用。PreviewFrameSpacer(device3/PreviewFrameSpacer.h/.cpp): 重新调整预览帧间距以匹配显示 Vsync 时序。2.12 CameraServiceWatchdog(看门狗)文件:CameraServiceWatchdog.h/.cpp功能:检测 Camera HAL 的异常状态(卡死/超时),超时后杀死相关进程并生成 tombstone 用于调试。工作机制:独立线程,通过循环计数器(cycle counter)监控每个被监视线程的执行时间周期长度:kCycleLengthMs = 100ms(每个 cycle 100ms)最大周期:kMaxCycles = 650(即最大容忍65 秒)使用方式:通过WATCH()宏包裹需要监控的函数调用:#defineWATCH(toMonitor)watchThread([](){returntoMonitor;},gettid(),__FUNCTION__)当前监控的调用(Camera3Device.cpp):interface-close()(line 384) — HAL 关闭操作mRequestThread-flush()(line 1899) — flush 操作超时处理流程:周期 0~487 (0~48.7s): 正常监控,cycles 递增cycles == mMaxCycles * 3/4(487): 预警告 — 通知 CameraServiceProxy dump 所有相关进程的 stack tracecycles = mMaxCycles(650 = 65s): 触发 abort激活 Perfetto trace(300s 冷却期)记录 close 日志(CAMERA_WATCHDOG_ERROR)kill(provider_pids, SIGABRT)— 杀死 Provider 进程abort()— 杀死 cameraserver 进程,生成 tombstone关键代码位置:初始化:Camera3Device.cpp:283— 创建并启动 watchdog 线程监控 close():Camera3Device.cpp:384监控 flush():Camera3Device.cpp:1899启用/禁用:Camera3Device.cpp:4774—setCameraServiceWatchdog()禁用方式:adb shell cmd media.camera set-watchdog0# 禁用adb shell cmd media.camera set-watchdog1# 启用2.13 关键类间关系(继承、组合、聚合、关联)继承层次Core Device 继承链:RefBase └── FrameProducer └── CameraDeviceBase └── Camera3Device ├── AidlCamera3Device │ └── AidlCamera3SharedDevice └── HidlCamera3DeviceStream 继承链:RefBase └── Camera3StreamInterface ├── Camera3OutputStreamInterface └── Camera3Stream └── Camera3IOStreamBase ├── Camera3OutputStream │ └── Camera3SharedOutputStream └── Camera3InputStreamClient 继承链:RefBase └── BasicClient ├── Client (BnCamera) [API1] │ └── Camera2ClientBaseClient │ └── Camera2Client [API1] └── CameraDeviceClientBase (BnCameraDeviceUser) └── Camera2ClientBaseCameraDeviceClientBase └── CameraDeviceClient [API2]HAL Interface 继承链:HalInterface (Camera3Device 内部类) ├── AidlHalInterface └── HidlHalInterface RequestThread ├── AidlRequestThread └── HidlRequestThread组合关系(强生命周期 sp, unique_ptr)CameraService 拥有:spCameraProviderManager— Provider 管理器spCameraFlashlight— 闪光灯控制spUidPolicy,spSensorPrivacyPolicy— 策略管理CameraClientManager— 管理所有spBasicClientvectorspServiceListener— 服务监听器列表Camera2ClientBaseT 拥有:spCameraDeviceBase mDevice— 实际为 Camera3Device 子类shared_ptrCameraServiceProxyWrapperCameraDeviceClient (API2) 拥有:spFrameProcessorBase— 帧处理器mapSurfaceKey, spCompositeStream— 复合流映射unique_ptrMetadataQueue— FMQ 结果队列Camera3Device 拥有:spHalInterface mInterface— HAL 接口(Aidl/Hidl)spRequestThread— 请求提交线程spPreparerThread— Buffer 预分配线程spStatusTracker— 状态追踪spCamera3BufferManager— Buffer 管理spCamera3DeviceInjectionMethods— 注入方法StreamSet— 输出流集合(包含 spCamera3Stream)Camera3OutputStream 拥有:spSurface mConsumer— 消费者 SurfacespCamera3BufferManager— Buffer 管理(外部设置)spBufferProducerListener— 生产者监听AidlHalInterface 拥有:shared_ptrICameraDeviceSession— AIDL 会话shared_ptrAidlRequestMetadataQueue— 请求 FMQHidlHalInterface 拥有:spICameraDeviceSessionV3_2~V3_7 — 多版本 HIDL 会话shared_ptrRequestMetadataQueue— 请求 FMQ聚合关系(弱生命周期 wp, 原始指针)Camera3Device 持有弱引用:wpNotificationListener— 通知监听(CameraDeviceClient)RequestThread 持有弱引用:wpCamera3Device— 父设备wpNotificationListener— 通知监听FrameProcessorBase 持有弱引用:wpFrameProducer— 设备(Camera3Device)Camera3Stream 持有弱引用:wpCamera3StreamBufferFreedListener— Buffer 释放监听wpStatusTracker— 状态追踪AidlCameraDeviceCallbacks 持有弱引用:wpAidlCamera3Device— 父设备关联关系(非拥有)AidlCameraService → CameraService:CameraService* mCameraService(原始指针,不拥有)— AidlCameraService 包装 CameraService 的 AIDL 接口Camera3OutputUtils / Camera3OutputUtilsTemplated:自由函数命名空间,通过参数引用 CaptureOutputStates 等结构体操作 StreamSet、InFlightMap 等所有权链总览CameraService ├── spCameraProviderManager ├── spCameraFlashlight ├── CameraClientManager (管理 spBasicClient) └── vectorspServiceListener Camera2ClientBaseT ├── spCameraDeviceBase (实际 Camera3Device) └── shared_ptrCameraServiceProxyWrapper Camera3Device ├── spHalInterface (Aidl/Hidl) ├── spRequestThread ├── spPreparerThread ├── spStatusTracker ├── spCamera3BufferManager ├── StreamSet (spCamera3Stream) └── wpNotificationListener (CameraDeviceClient) Camera3OutputStream ├── spSurface mConsumer ├── spCamera3BufferManager └── wpCamera3StreamBufferFreedListener AidlHalInterface ├── shared_ptrICameraDeviceSession └── shared_ptrAidlRequestMetadataQueue FrameProcessorBase └── wpFrameProducer (Camera3Device)设计模式模式应用策略模式HalInterface抽象类,AidlHalInter