第38讲 Camera Native FW 之Camera3Device架构概述

本讲是Android Camera Native Framework专题的第38讲,我们介绍Camera Native FW的Camera3Device架构概述。

更多资源:

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

Camera3Device架构概述

Camera3Device架构概述

Camera3Device核心内部类

核心内部类 功能职责
Camera3Device::RequestThread 该线程用于维护送给Camera HAL的CaptureRequest
Camera3Device::HalInterface Camera HAL ICameraDeviceSession类的封装
Camera3Device::Camera3DeviceInjectionMethods Inject Camera使用,会替换HalInterface对象为mInjectedCamHalInterface从而调用ICameraInjectionSession。 ICameraInjectionSession 提供了一种机制,允许外部Camera设备无缝地替代内部Camera,同时保持与原有Camera配置的兼容性。这对于需要临时使用外部Camera(如USB Camera)替代内置Camera的场景非常有用。

CameraDeviceBase成员变量详解

成员变量类型 成员变量 描述
bool mImageDumpMask dumpsys media.camera使用,设置给Output Stream,用于标识是否打开Jpeg Image Dump功能
vector mStreamUseCaseOverrides dumpsys media.camera使用,设置给Output Stream,用于记录Stream的Usecase 覆盖列表

ANDROID_SCALER_AVAILABLE_STREAM_USE_CASES如下:

Camera3Device架构概述

Camera3Device成员变量详解

成员变量类型 成员变量 描述
CameraServiceProxyWrapper mCameraServiceProxyWrapper 在Camer3Device中 1. 用于产生唯一的logId,调用AIDL HAL configureStreams 时使用 2. 用于记录reconfigureCamera的耗时
String8 mId 当前Camera3Device的ID
bool mLegacyClient 表示是否是Camera API1的Client
int mOperatingMode Configure streams带下来的Operation Mode
CameraMetadataNative mSessionParams Configure streams带下来的Session Parameter
bool mIsConstrainedHighSpeedConfiguration 标识是否是High Speed Configuration,有一些逻辑需要特殊处理
HalInterface mInterface Camera HAL ICameraDeviceSession类的封装
CameraMetadata mDeviceInfo 存放当前Camera的静态信息
std::unordered_map<std::string, CameraMetadata> mPhysicalDeviceInfoMap 如果是Logical multi-cam,这里存放每个Physical Camera的静态信息
bool mSupportNativeZoomRatio 是否支持通过Zoom Ratio来控制Zoom
bool mIsCompositeJpegRDisabled 是否支持JPEG_R的Stream。 JPEG_R结合了传统的 JPEG 压缩图像和嵌入式恢复映射(recovery map)。这种格式主要用于支持 Ultra HDR(高动态范围)图像。
CameraMetadata mRequestTemplateCache 缓存默认的CaptureRequest,可存放不同Template的CaptureRequest
enum Status mStatus 记录当前CameraDevice的状态
Vector mRecentStatusUpdates 记录最近更新的Status,在waitUntilStateThenRelock使用
StreamSet mOutputStreams 当前CameraDevice配置的输出流
Camera3Stream mInputStream 当前CameraDevice配置的输入流
SessionStatsBuilder mSessionStatsBuilder 统计Stream的Stats,产生直方图
std::map<int32_t, std::set> mGroupIdPhysicalCameraMap Stream GroupID与Physical Camera ID的映射关系 针对Multi Resolution的Stream才有GroupID,请求Physical Camera Stream时使用
int mNextStreamId 单调递增,用于产生Stream ID
bool mNeedConfig 标识是否需要执行config stream,如果条件未变,不重复configure
int mFakeStreamId 针对configure stream时mOutputStreams size为0的规避解法
bool mPauseStateNotify 用于内部做reconfiguration时,skip掉state 更新通知
Vector<sp<camera3::Camera3StreamInterface> > mDeletedStreams 持有待删除的Stream,直到configure结束。有可能在configure的过程中发生Flush操作,这种情况也需要对被即将Delete的Stream做Flash。
bool mUsePartialResult 标识HAL是否使用Partial Result(也就是Result会拆成多包上来)
uint32_t mNumPartialResults 有多少包Partial Result,默认值是1
bool mDeviceTimeBaseIsRealtime Timestamp Source是否是Realtime,是的话要对timestamp进行矫正
nsecs_t mTimestampOffset Monotonic time到Boottime的偏移值
sp mRequestThread 处理下发Request的线程
InFlightRequestMap mInFlightMap 送给HAL,正在被HAL处理的Request list
nsecs_t mExpectedInflightDuration 用于判断HAL处理request是否发生Timeout,最小5秒
wp mStatusTracker 跟踪Camera3Device的状态切换
sp mBufferManager 管理Output Stream的Graphic Buffer,一个Camera3Device只有一个Buffer Manager。为了优化内存用量而使用。
sp mPreparerThread 用于执行stream prepare的线程
std::list mResultQueue 用于存放HAL送上来的CaptureResult
wp mListener 用于Camera3Device回调Client
std::unordered_map<std::string, camera3::DistortionMapper> mDistortionMappers 对于支持畸变矫正的Camera,对CaptureRequest和CaptureResult进行修正
std::unordered_map<std::string, camera3::ZoomRatioMapper> mZoomRatioMappers 处理Zoom Ration与Crop Region之间的转换,对CaptureRequest和CaptureResult进行修正
std::unordered_map<std::string, camera3::UHRCropAndMeteringRegionMapper> mUHRCropAndMeteringRegionMappers 对于支持ULTRA HIGH RESOLUTION的Camera,对CaptureRequest进行修正
std::unordered_map<std::string, camera3::RotateAndCropMapper> mRotateAndCropMappers 对于支持Auto rotate-and-crop的Camera,对CaptureRequest和CaptureResult进行修正
camera_metadata_enum_android_scaler_rotate_and_crop_t mRotateAndCropOverride dumpsys media.camera Debug使用,强制设置RotateAndCrop Mode
TagMonitor mTagMonitor Debug使用,用于跟踪CaptureRequest/CaptureResult中的Metadata变化情况
metadata_vendor_id_t mVendorTagId 标识Vendor Tag的ID,不同Camera可以有不同的Vendor Tag ID,用于操作Vendor Tag
int mLastTemplateId 存放最后一次获取默认CaptureRequest的Template ID,如果configure streams没有带session parameters,则以这包参数为session parameters
camera_metadata_enum_android_control_autoframing mAutoframingOverride dumpsys media.camera Debug使用,强制设置Autoframing Mode
std::string mActivePhysicalId Logical Multicam的情况,记录目前正在使用的Physical Camera ID
sp<Camera3DeviceInjectionMethods> mInjectionMethods Inject Camera时使用

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程

Android Camera Native Framework