第33讲 Camera Native FW 之CameraDeviceClient成员变量详解

本讲是Android Camera Native Framework专题的第33讲,我们介绍Camera Native FW的Open Camera之CameraDeviceClient成员变量详解。

更多资源:

资源 描述
在线课程 极客笔记在线课程
知识星球 星球名称:深入浅出Android Camera 星球ID: 17296815
Wechat 极客笔记圈

Camera API2 makeClient流程

Camera API2 makeClient流程

Camera API2 Client 类图

Camera API2 Client 类图

Camera 各Client的职责

Category Camera Client 职责
API2 CameraDeviceClient 负责处理与API2相关的业务逻辑
API2 CameraDeviceClientBase 负责继承API2的ICameraDeviceUser
API1/API2 Camera2ClientBase 负责处理API1和API2共用的逻辑且与Camera Device
API1/API2 CameraService::BasicClient 负责处理API1和API2共用的逻辑且与Camera Device
API1 Camera2Client 负责处理与API1相关的业务逻辑
API1 CameraService::Client 负责继承API1的ICamera(BnCamera)

CameraDeviceClient成员变量详解

成员变量类型 成员变量 描述
FrameProcessorBase mFrameProcessor 从Device获取每帧的Result Metadata
vector mSupportedPhysicalRequestKeys Physical Camera支持设置的Request Keys,submitRequest时用于过滤掉不支持的Request设置
KeyedVector<sp, StreamSurfaceId> mStreamMap 以Map方式存在,key是GraphicBufferProducer,value是Stream&Surface ID(shared的情况,一个Stream有多个Surface)
KeyedVector<int32_t, OutputConfiguration> mConfiguredOutputs 保存上层配置的OutputConfiguration列表
map<int64_t, int64_t> mDynamicProfileMap (profile id -> Supported dynamic profiles bit map) 存放支持的Dynamic Range Profiles,submitRequest时会对设置的值做检查
InputStreamConfiguration mInputStream 存放Input Stream,只支持一路Input Stream
int32_t mStreamingRequestId 存放Streaming的Request ID,每次调用submitRequestList后,Request ID会++,主要用于判断Repeating request是否处于Active
成员变量类型 成员变量 描述
int32_t mRequestIdCounter; submitRequestList时++,唯一标识当前的这次submit request行为
vector mPhysicalCameraIds 存放当前CameraDevice对应的Physical Camera,对logical multi camera有效
Vector mDeferredStreams 存放处于Deferred状态的Output Stream,Surface ready后会move到mStreamMap
map<int32_t, OutputStreamInfo> mStreamInfoMap stream ID -> outputStreamInfo mapping,记录每路output stream的info
map<std::string, std::unordered_set> mHighResolutionCameraIdToStreamIdSet 高分辨率(>=24M)的camera id (logical / physical) -> list of stream ids,检查Request里面设置的Sensor Pixel Model与OutputConfiguration里面设置的Sensor Pixel Mode是否一致。
set mHighResolutionSensors 支持高分辨率Stream的Camera,有ULTRA_HIGH_RESOLUTION_SENSOR capability
KeyedVector<sp, sp> mCompositeStreamMap 等价于mStreamMap,存放需要做Composite的Stream:HEIC,JPEG_DEPTH(Jpeg with XMP depth metadata),JpegR(Jpeg with Recovery map)
成员变量类型 成员变量 描述
CameraProviderManager mProviderManager 存放CameraProviderManager的实例,用于判断是否是logical multi-cam和isSessionConfigurationSupported
bool mOverrideForPerfClass 是否要Override the camera characteristics for performance class primary cameras,在isSessionConfigurationSupported使用
string mUserTag CaptureRequest.setTag设置的,记录最新设置的mUserTag,记录在event log里面
int mVideoStabilizationMode 记录最新设置的Video Stabilization Mode,记录在event log里面

CameraDeviceClient与Stream相关的变量

CameraDeviceClient与Stream相关的变量

CameraDeviceClientBase成员变量详解

成员变量类型 成员变量 描述
ICameraDeviceCallbacks mRemoteCallback 保存给App进程的回调对象实例

Camera2ClientBase成员变量详解

成员变量类型 成员变量 描述
SharedCameraCallbacks mSharedCameraCallbacks 保存给App进程的回调对象实例
pid_t mInitialClientPid 记录初始化Camera Client时传递的Client PID
bool mOverrideForPerfClass 是否要Override the camera characteristics for performance class primary cameras
bool mLegacyClient Client是否是API1
CameraServiceProxyWrapper mCameraServiceProxyWrapper CameraServiceProxy对象,用于与之交互
CameraDeviceBase mDevice 存放CameraDeviceBase的实例
bool mDeviceActive 标识当前Camera Device是否处于Active状态
int mApi1CameraId API1的Camera ID(整型),如果是API2,这个值为-1
CameraServiceWatchdog mCameraServiceWatchdog Camera Client的Watch Dog,监控disconnect是否timeout

CameraService::BasicClient成员变量详解

成员变量类型 成员变量 描述
CameraService sCameraService 保存CameraService的实例,用于Client回调CameraService
String8 mCameraIdStr Camera ID
int mCameraFacing Camera的朝向(BACK或FRONT)
int mOrientation Camera sensor的安装角度
String16 mClientPackageName 客户端进程的package name
bool mSystemNativeClient 是否是System Native Client(UID < AID_APP_START的Native进程)
String16 mClientFeatureId Client进程的feature id(mContext.getAttributionTag()),在操作AppOpsManager使用
pid_t mClientPid Client的PID
uid_t mClientUid Client的UID
pid_t mServicePid Camera Service的PID
bool mDisconnected 当前Client是否处于Disconnect状态
bool mUidIsTrusted UID是否是可信的(mediaserver, cameraserver, telephony可信)
成员变量类型 成员变量 描述
bool mOverrideToPortrait 是否要将Stream通过RotateAndCrop成Portrait,兼容性考虑
int32_t mAudioRestriction 对Audio的限制策略
IBinder mRemoteBinder 保存给App进程的回调对象实例
AppOpsManager mAppOpsManager AppOpsManager,用于检查Client是否有Camera操作权限
OpsCallback mOpsCallback AppOps的回调,用于通知App的操作权限变化
bool mOpsActive 是否开始监听Camera Ops
bool mOpsStreaming 是否开始执行Camera Ops

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程

Android Camera Native Framework