public class CaptureResult
extends CameraMetadata<Key<?>>
java.lang.Object | ||
↳ | android.hardware.camera2.CameraMetadata<android.hardware.camera2.CaptureResult.Key<?>> | |
↳ | android.hardware.camera2.CaptureResult |
Known Direct Subclasses |
来自图像传感器的单个图像捕获结果的子集。
包含捕获硬件(传感器,镜头,闪存)的最终配置的子集,处理管道,控制算法和输出缓冲区。
CaptureResults由产生CameraDevice
处理后CaptureRequest
。 列出的捕获请求的所有属性也可以在捕获结果上查询,以确定用于捕获的最终值。 结果还包括捕获期间有关摄像头设备状态的附加元数据。
并非所有由getAvailableCaptureResultKeys()
返回的getAvailableCaptureResultKeys()
都必须可用。 一些结果是partial
,不会有每个密钥集。 只有total
结果才能保证每个可用的密钥都是由请求启用的。
CaptureResult
对象是不可变的。
Nested classes |
|
---|---|
class |
CaptureResult.Key<T> 一个 |
Inherited constants |
---|
From class android.hardware.camera2.CameraMetadata
|
Fields |
|
---|---|
public static final Key<Boolean> |
BLACK_LEVEL_LOCK 黑电平补偿是否锁定到其当前值,或者可以自由变化。 |
public static final Key<Integer> |
COLOR_CORRECTION_ABERRATION_MODE 色差校正算法的操作模式。 |
public static final Key<RggbChannelVector> |
COLOR_CORRECTION_GAINS 获得应用于拜耳原始颜色通道的白平衡。 |
public static final Key<Integer> |
COLOR_CORRECTION_MODE 模式控制选择图像数据如何从传感器的本地颜色转换为线性sRGB颜色。 |
public static final Key<ColorSpaceTransform> |
COLOR_CORRECTION_TRANSFORM 用于从传感器RGB色彩空间转换为输出线性sRGB色彩空间的色彩转换矩阵。 |
public static final Key<Integer> |
CONTROL_AE_ANTIBANDING_MODE 相机设备的自动曝光算法的抗污染补偿所需的设置。 |
public static final Key<Integer> |
CONTROL_AE_EXPOSURE_COMPENSATION 调整自动曝光(AE)目标图像亮度。 |
public static final Key<Boolean> |
CONTROL_AE_LOCK 自动曝光(AE)当前是否锁定到其最新的计算值。 |
public static final Key<Integer> |
CONTROL_AE_MODE 相机设备自动曝光程序的所需模式。 |
public static final Key<Integer> |
CONTROL_AE_PRECAPTURE_TRIGGER 相机设备在处理该请求时是否会触发预捕获计量序列。 |
public static final Key<MeteringRectangle[]> |
CONTROL_AE_REGIONS 用于自动曝光调整的测光区域列表。 |
public static final Key<Integer> |
CONTROL_AE_STATE 自动曝光(AE)算法的当前状态。 |
public static final Key<Range<Integer>> |
CONTROL_AE_TARGET_FPS_RANGE 自动曝光程序可以调整捕捉帧率以保持良好曝光的范围。 |
public static final Key<Integer> |
CONTROL_AF_MODE 是否启用自动对焦(AF),以及设置为何种模式。 |
public static final Key<MeteringRectangle[]> |
CONTROL_AF_REGIONS 用于自动对焦的测光区域列表。 |
public static final Key<Integer> |
CONTROL_AF_STATE 自动对焦(AF)算法的当前状态。 |
public static final Key<Integer> |
CONTROL_AF_TRIGGER 相机设备是否会为此请求触发自动对焦。 |
public static final Key<Boolean> |
CONTROL_AWB_LOCK 自动白平衡(AWB)当前是否锁定到其最新的计算值。 |
public static final Key<Integer> |
CONTROL_AWB_MODE 自动白平衡(AWB)是否正在设置色彩转换字段以及其照明目标是什么。 |
public static final Key<MeteringRectangle[]> |
CONTROL_AWB_REGIONS 用于自动白平衡光源估计的测光区域列表。 |
public static final Key<Integer> |
CONTROL_AWB_STATE 自动白平衡(AWB)算法的当前状态。 |
public static final Key<Integer> |
CONTROL_CAPTURE_INTENT 相机设备3A的信息(自动曝光,自动对焦,自动白平衡)关于此拍摄目的的例程,以帮助相机设备决定最佳的3A策略。 |
public static final Key<Integer> |
CONTROL_EFFECT_MODE 要应用的特殊颜色效果。 |
public static final Key<Integer> |
CONTROL_MODE 3A(自动曝光,自动白平衡,自动对焦)控制程序的整体模式。 |
public static final Key<Integer> |
CONTROL_POST_RAW_SENSITIVITY_BOOST 捕获RAW传感器数据后应用于输出图像的附加灵敏度提升量。 |
public static final Key<Integer> |
CONTROL_SCENE_MODE 控制哪种场景模式当前处于活动状态。 |
public static final Key<Integer> |
CONTROL_VIDEO_STABILIZATION_MODE 视频稳定是否有效。 |
public static final Key<Integer> |
EDGE_MODE 边缘增强的操作模式。 |
public static final Key<Integer> |
FLASH_MODE 相机设备闪光灯控制的理想模式。 |
public static final Key<Integer> |
FLASH_STATE 闪光灯组件的当前状态。 |
public static final Key<Integer> |
HOT_PIXEL_MODE 热像素校正的操作模式。 |
public static final Key<Location> |
JPEG_GPS_LOCATION 生成图像GPS元数据时使用的位置对象。 |
public static final Key<Integer> |
JPEG_ORIENTATION JPEG图像的方向。 |
public static final Key<Byte> |
JPEG_QUALITY 最终JPEG图像的压缩质量。 |
public static final Key<Byte> |
JPEG_THUMBNAIL_QUALITY JPEG缩略图的压缩质量。 |
public static final Key<Size> |
JPEG_THUMBNAIL_SIZE 嵌入式JPEG缩略图的分辨率。 |
public static final Key<Float> |
LENS_APERTURE 所需的镜头光圈尺寸,作为镜头焦距与有效光圈直径的比率。 |
public static final Key<Float> |
LENS_FILTER_DENSITY 镜头中性密度滤镜的所需设置。 |
public static final Key<Float> |
LENS_FOCAL_LENGTH 所需的镜头焦距; 用于光学变焦。 |
public static final Key<Float> |
LENS_FOCUS_DISTANCE 从镜头最前表面测量的最清晰焦距平面的所需距离。 |
public static final Key<Pair<Float, Float>> |
LENS_FOCUS_RANGE 清晰焦距(景深)的场景距离范围。 |
public static final Key<float[]> |
LENS_INTRINSIC_CALIBRATION 此摄像机设备的固有校准参数。 |
public static final Key<Integer> |
LENS_OPTICAL_STABILIZATION_MODE 设置相机设备在拍摄图像时是否使用光学防抖(OIS)。 |
public static final Key<float[]> |
LENS_POSE_ROTATION 摄像机相对于传感器坐标系的方向。 |
public static final Key<float[]> |
LENS_POSE_TRANSLATION 相机光学中心的位置。 |
public static final Key<float[]> |
LENS_RADIAL_DISTORTION 校正系数以校正此摄像机设备的径向和切向镜头失真。 |
public static final Key<Integer> |
LENS_STATE 当前镜头状态。 |
public static final Key<Integer> |
NOISE_REDUCTION_MODE 降噪算法的操作模式。 |
public static final Key<Float> |
REPROCESS_EFFECTIVE_EXPOSURE_FACTOR 在发送用于重新处理之前,由应用程序处理应用于原始输出帧的曝光时间增加因子的数量。 |
public static final Key<Byte> |
REQUEST_PIPELINE_DEPTH 指定框架从暴露到最终完成结果可用于框架时的流水线阶段数。 |
public static final Key<Rect> |
SCALER_CROP_REGION 读取该传感器所需的区域以进行捕获。 |
public static final Key<float[]> |
SENSOR_DYNAMIC_BLACK_LEVEL 每个彩色滤光片排列(CFA)镶嵌通道的每帧动态黑色电平偏移。 |
public static final Key<Integer> |
SENSOR_DYNAMIC_WHITE_LEVEL 传感器为此帧输出的最大原始值。 |
public static final Key<Long> |
SENSOR_EXPOSURE_TIME 持续每个像素曝光。 |
public static final Key<Long> |
SENSOR_FRAME_DURATION 从帧曝光开始到下一帧曝光开始的持续时间。 |
public static final Key<Float> |
SENSOR_GREEN_SPLIT 拜耳绿色渠道之间最差的分歧。 |
public static final Key<Rational[]> |
SENSOR_NEUTRAL_COLOR_POINT 捕捉时本机传感器颜色空间中的相机中性色估计值。 |
public static final Key<Pair[]<Double, Double>> |
SENSOR_NOISE_PROFILE 每个CFA镶嵌通道的噪声模型系数。 |
public static final Key<Long> |
SENSOR_ROLLING_SHUTTER_SKEW 第一行曝光开始和最后一行曝光开始之间的持续时间。 |
public static final Key<Integer> |
SENSOR_SENSITIVITY 处理前应用于传感器数据的增益量。 |
public static final Key<int[]> |
SENSOR_TEST_PATTERN_DATA 像素 |
public static final Key<Integer> |
SENSOR_TEST_PATTERN_MODE 启用后,传感器将发送测试图案,而不是从相机进行实际曝光。 |
public static final Key<Long> |
SENSOR_TIMESTAMP 图像传感器有源阵列第一行曝光开始时间,以纳秒为单位。 |
public static final Key<Integer> |
SHADING_MODE 应用于图像数据的镜头阴影校正质量。 |
public static final Key<Face[]> |
STATISTICS_FACES 在此捕获中通过相机脸部检测检测到的脸部列表。 |
public static final Key<Integer> |
STATISTICS_FACE_DETECT_MODE 面部检测器单元的操作模式。 |
public static final Key<Point[]> |
STATISTICS_HOT_PIXEL_MAP 传感器上热/缺陷像素的 |
public static final Key<Boolean> |
STATISTICS_HOT_PIXEL_MAP_MODE 生成热像素图的操作模式。 |
public static final Key<LensShadingMap> |
STATISTICS_LENS_SHADING_CORRECTION_MAP 着色图是一个低分辨率浮点图,列出了用于校正每个拜耳颜色通道的渐晕的系数。 |
public static final Key<Integer> |
STATISTICS_LENS_SHADING_MAP_MODE 相机设备是否将在输出结果元数据中输出镜头阴影贴图。 |
public static final Key<Integer> |
STATISTICS_SCENE_FLICKER 摄像机设备估计场景照明照明频率。 |
public static final Key<TonemapCurve> |
TONEMAP_CURVE 当 |
public static final Key<Float> |
TONEMAP_GAMMA
色调映射曲线将被定义为以下公式:* OUT = pow(IN,1.0 / gamma)其中IN和OUT是缩放到范围[0.0,1.0]的输入像素值,pow是功率函数,而gamma是伽玛值由此键指定。 |
public static final Key<Integer> |
TONEMAP_MODE 高级全局对比度/伽马/色调映射控制。 |
public static final Key<Integer> |
TONEMAP_PRESET_CURVE
色调映射曲线将由指定的标准定义。 |
Public methods |
|
---|---|
<T> T |
get(Key<T> key) 获取捕获结果字段值。 |
long |
getFrameNumber() 获取与此结果关联的帧号。 |
List<Key<?>> |
getKeys() 返回此映射中包含的键的列表。 |
CaptureRequest |
getRequest() 获取与此结果关联的请求。 |
int |
getSequenceId() 由 |
Inherited methods |
|
---|---|
From class android.hardware.camera2.CameraMetadata
|
|
From class java.lang.Object
|
Key<Boolean> BLACK_LEVEL_LOCK
黑电平补偿是否锁定到其当前值,或者可以自由变化。
黑框电平是否被锁定。 如果捕获请求中的android.blackLevel.lock
为ON,则应该为ON,除非其他捕获设置中的更改强制相机设备执行黑电平重设。
可选 - 在某些设备上,此值可能为 null
。
完整功能 - 存在于 android.info.supportedHardwareLevel
密钥中报告为 HARDWARE_LEVEL_FULL
设备的所有相机设备上
Key<Integer> COLOR_CORRECTION_ABERRATION_MODE
色差校正算法的操作模式。
色差(色差)是由于不同波长的光在离开镜头后不能聚焦在同一点上。 该元数据定义了色差校正算法的高级控制,其目的是最小化可能沿着图像中的对象边界发生的色差伪像。
FAST / HIGH_QUALITY都意味着将应用相机设备确定的像差校正。 HIGH_QUALITY模式表示相机设备将使用最高质量的像差校正算法,即使它会降低捕捉速率。 FAST意味着相机设备在应用像差校正时不会降低拍摄速度。
LEGACY设备将始终处于FAST模式。
可能的值:
此设备的可用值:
android.colorCorrection.availableAberrationModes
此密钥可在所有设备上使用。
Key<RggbChannelVector> COLOR_CORRECTION_GAINS
获得应用于拜耳原始颜色通道的白平衡。
这些每信道增益是由摄像机装置当请求任一组 android.colorCorrection.mode
不是TRANSFORM_MATRIX,或直接由在当该请求的应用 android.colorCorrection.mode
是TRANSFORM_MATRIX。
结果元数据中的增益是相机设备实际应用于当前帧的增益。
增益的有效范围因不同设备而异,但保证[1.0,3.0]之间的增益不会被削减。 即使给定的设备允许低于1.0的增益,通常也不建议这样做,因为这可能会产生彩色伪像。
单位 :无 单位增益因子
可选 - 在某些设备上,此值可能为 null
。
完整功能 - 存在于 android.info.supportedHardwareLevel
密钥中报告为 HARDWARE_LEVEL_FULL
设备的所有相机设备上
Key<Integer> COLOR_CORRECTION_MODE
模式控制选择图像数据如何从传感器的本地颜色转换为线性sRGB颜色。
当使用android.control.awbMode
启用自动白平衡(AWB)时,AWB例程会覆盖此控件。 当禁用AWB时,应用程序将控制颜色映射的执行方式。
我们在下面定义了预期的处理流程。 为了保持设备之间的一致性,TRANSFORM_MATRIX始终是这种情况。
当使用FULL或HIGH_QUALITY时,相机设备可能会执行额外的处理,但 android.colorCorrection.gains
和 android.colorCorrection.transform
仍将由相机设备提供(在结果中)并且大致正确。
切换到TRANSFORM_MATRIX并使用从FAST或HIGH_QUALITY提供的数据将产生与前一帧中摄像机设备产生的相同白点的图像。
预期的处理流程如下:
白平衡由两个值编码,一个4通道白平衡增益矢量(应用于拜耳域)和一个3x3色彩转换矩阵(在去马赛克之后应用)。
4通道白平衡增益定义为:
android.colorCorrection.gains
= [ R G_even G_odd B ]
其中G_even
是输出的偶数行上绿色像素的增益, G_odd
是奇数行上绿色像素的增益。 对于给定的相机设备实现,这些可能是相同的; 如果相机设备不支持偶数/奇数绿色通道的单独增益,则它将使用G_even
值,并在输出结果元数据G_even
写G_odd
等于G_even
。
颜色变换的矩阵被定义为9入口矢量:
android.colorCorrection.transform
= [ I0 I1 I2 I3 I4 I5 I6 I7 I8 ]
其定义了从输入传感器颜色 P_in = [ r g b ]
到输出线性sRGB的 P_out = [ r' g' b' ]
,
颜色如下:
r' = I0r + I1g + I2b
g' = I3r + I4g + I5b
b' = I6r + I7g + I8b
输入和输出值范围必须匹配。 上溢/下溢值被剪切以适应该范围。
可能的值:
可选 - 在某些设备上该值可能为 null
。
完整功能 - 存在于 android.info.supportedHardwareLevel
密钥中报告为 HARDWARE_LEVEL_FULL
设备的所有相机设备上
Key<ColorSpaceTransform> COLOR_CORRECTION_TRANSFORM
用于从传感器RGB色彩空间转换为输出线性sRGB色彩空间的色彩转换矩阵。
当请求 android.colorCorrection.mode
不是TRANSFORM_MATRIX时,或者在 android.colorCorrection.mode
为TRANSFORM_MATRIX时请求中的应用程序直接通过相机设备设置此矩阵。
在后一种情况下,摄像机设备可能会对矩阵进行四舍五入以解决精度问题; 最后的舍入矩阵应该在这个矩阵结果元数据中报告。 变换应将输出颜色值的大小保持在[0, 1.0]
内(假设输入颜色值在标准化范围[0, 1.0]
),否则可能会发生削波。
每个矩阵元素的有效范围在不同设备上有所不同,但保证[-1.5,3.0]内的值不被剪切。
单位 :无 单位比例因子
可选 - 在某些设备上,此值可能为 null
。
完整功能 - 在 android.info.supportedHardwareLevel
密钥中报告为 HARDWARE_LEVEL_FULL
设备的所有相机设备上都存在
Key<Integer> CONTROL_AE_ANTIBANDING_MODE
相机设备的自动曝光算法的抗污染补偿所需的设置。
某些类型的照明灯具,如某些荧光灯,以电源频率(60Hz或50Hz,取决于国家)的频率闪烁。 虽然这通常对个人来说不明显,但是摄像机设备可以看到它。 如果相机将其曝光时间设置为错误值,则闪烁可能会在取景器中以闪烁或最终拍摄的图像的形式出现,如图像上的一组可变亮度带。
因此,相机设备的自动曝光程序包括抗染色程序,以确保所选择的曝光值不会导致此类条纹。 曝光时间的选择取决于相机设备可以自动检测到的闪烁速率,或者应用程序使用此控件可以选择预期速率。
给定的相机设备可能不支持抗混模式的所有可能选项。 android.control.aeAvailableAntibandingModes
键包含给定摄像头设备的可用模式。
如果在给定的相机设备上可用,则AUTO模式是默认模式。 当AUTO模式不可用时,默认值为50HZ或60HZ,50HZ和60HZ都可用。
如果启用手动曝光控制(通过将android.control.aeMode
或android.control.mode
设置为OFF),则此设置无效,并且应用程序必须确保它选择不会导致条带问题的曝光时间。 android.statistics.sceneFlicker
密钥可以协助此应用程序。
可能的值:
此设备的可用值:
android.control.aeAvailableAntibandingModes
此密钥可在所有设备上使用。
Key<Integer> CONTROL_AE_EXPOSURE_COMPENSATION
调整自动曝光(AE)目标图像亮度。
调整以步数计算,步长由 android.control.aeCompensationStep
定义,允许的范围由 android.control.aeCompensationRange
。
例如,如果曝光值(EV)为0.333,则“6”表示曝光补偿为+ 2EV; -3意味着-1 EV的曝光补偿。 一个EV代表图像亮度的两倍。 请注意,此控件仅在android.control.aeMode
!=
OFF时才有效。 即使在android.control.aeLock
== true
时,此控件也会生效。
如果曝光补偿值发生变化,相机设备可能需要几帧才能到达新请求的曝光目标。 在此期间, android.control.aeState
字段将处于SEARCHING状态。 一旦达到新的曝光目标, android.control.aeState
将从SEARCHING变为CONVERGED,LOCKED(如果启用了AE锁定)或FLASH_REQUIRED(如果场景太暗而不能拍摄)。
单位 :补偿步骤
有效值的范围:
android.control.aeCompensationRange
此密钥可在所有设备上使用。
Key<Boolean> CONTROL_AE_LOCK
自动曝光(AE)当前是否锁定到其最新的计算值。
设置为 true
(开)时,AE算法将锁定到其最新参数,并且不会更改曝光设置,直到锁定设置为 false
(OFF)。
请注意,即使AE锁定,如果 android.control.aeMode
为ON_AUTO_FLASH / ON_ALWAYS_FLASH / ON_AUTO_FLASH_REDEYE,则可能会触发闪光灯。
当更改 android.control.aeExposureCompensation
,即使自动曝光锁定为开启,照相机设备仍将调整其曝光值。
如果自动曝光已被锁定,触发AE预捕获(请参阅android.control.aePrecaptureTrigger
),相机设备将不会更改曝光时间( android.sensor.exposureTime
)和灵敏度( android.sensor.sensitivity
)参数。 如果android.control.aeMode
为ON_AUTO_FLASH / ON_AUTO_FLASH_REDEYE且场景太暗,则可能会触发闪光灯。 如果android.control.aeMode
为ON_ALWAYS_FLASH,则场景可能会曝光过度。 同样,当AE已经锁定时,AE预捕获触发器CANCEL不起作用。
当AE预捕获序列被触发时,如果在预捕测量序列期间AE由摄像设备在内部锁定,AE解锁将无法解锁AE。换句话说,提交带AE解锁的请求对正在进行的预捕获计量序列没有影响。 否则,预捕获测光序列永远不会成功执行AE锁定始终设置为false
的预览请求序列。
由于相机设备具有一系列正在进行的请求,因此锁定的设置不一定与从相机设备接收到的最新捕捉结果中存在的设置相对应,因为甚至可能在之前发生了额外的捕捉和AE更新结果被送出。 如果应用程序在自动和手动控制之间切换,并希望在切换过程中消除闪烁,建议执行以下步骤:
有关AE锁相关状态转换的详细信息,请参阅 android.control.aeState
。
此密钥可在所有设备上使用。
Key<Integer> CONTROL_AE_MODE
相机设备自动曝光程序的所需模式。
此控件仅在 android.control.mode
为自动时有效。
当设置为任何的ON模式,相机设备的自动曝光程序被使能,重写应用程序的选择的曝光时间,传感器的灵敏度,和帧持续时间( android.sensor.exposureTime
, android.sensor.sensitivity
,和android.sensor.frameDuration
)。 如果选择了其中一种闪光灯模式,则照相机设备的闪光灯控制装置也将被覆盖。
只有相机设备具有闪光灯组件时才可使用闪光灯模式( android.flash.info.available
为 true
)。
如果需要闪光灯TORCH模式,则此字段必须设置为ON或OFF,并且 android.flash.mode
设置为TORCH。
当设置为任何ON模式时,相机设备自动曝光程序为给定捕捉的重写字段选择的值将在CaptureResult中提供。
可能的值:
此设备的可用值:
android.control.aeAvailableModes
此密钥可在所有设备上使用。
Key<Integer> CONTROL_AE_PRECAPTURE_TRIGGER
相机设备在处理该请求时是否会触发预捕获计量序列。
该条目通常设置为IDLE,或根本不包含在请求设置中。 当包含并设置为开始时,相机设备将触发自动曝光(AE)预捕测量序列。
当设置为取消时,相机设备将取消任何激活的预捕测量触发,并返回到其初始AE状态。 如果预捕获测光序列已经完成,并且相机设备已隐式锁定了AE以便随后进行静态捕捉,则CANCEL触发器将解锁AE并返回其初始AE状态。
在启动高质量静态捕捉以进行最终测光决定之前,应该触发预捕获序列,并且在启用闪光灯时启动预捕捉闪光脉冲以估计场景亮度并要求最终捕捉闪光灯功率。
通常情况下,只有一个请求才会将此条目设置为START,并且应用程序应该等到序列完成后才能开始新的请求。
当预捕获测光序列完成后,相机设备可以在内部锁定自动曝光程序,以便能够准确曝光后续的静态图像(
)。 对于这种情况,如果未提交后续静态捕捉,AE可能无法恢复正常扫描。 为确保AE例程重新开始正常扫描,如果应用程序决定在precapture序列完成后不提交静态捕获请求,则应用程序应提交android.control.captureIntent
== STILL_CAPTURE
的请求,然后请求android.control.aeLock
== true
。 或者,对于API级别23或更新的设备,如果应用程序在AE预捕获触发后未提交静态捕获请求,则可以使用CANCEL来解锁相机设备内部锁定的AE。 请注意,CANCEL已添加到API级别23中,并且不得用于具有较早API级别的设备。android.control.aeLock
== false
自动曝光(AE)预捕获触发的确切效果取决于当前AE模式和状态; 有关AE预捕获状态转换细节,请参阅android.control.aeState
。
在LEGACY级别的设备上,预捕获触发器不受支持; 捕获高分辨率JPEG图像将在高分辨率捕捉之前自动触发预捕获序列,包括可能触发预捕获闪光。
允许同时使用预捕获触发器和自动对焦触发器android.control.afTrigger
。 然而,由于这些触发器经常需要自动对焦和自动曝光例程之间的协作(例如,可能需要启用焦点扫描),所以摄像机设备可以延迟作用于稍后的触发,直到先前的触发已经被完全处理。 例如,这可能导致触发和更改为android.control.aeState
之间的更长间隔, android.control.aeState
指示预捕获序列的开始。
如果预取和自动对焦触发都在相同请求中激活,则摄像机设备将按照该设备的最佳顺序完成它们。
可能的值:
可选 - 某些设备上的此值可能为 null
。
能力有限 - 在 android.info.supportedHardwareLevel
密钥中报告至少 HARDWARE_LEVEL_LIMITED
设备的所有相机设备上都存在
Key<MeteringRectangle[]> CONTROL_AE_REGIONS
用于自动曝光调整的测光区域列表。
如果 android.control.maxRegionsAe
为0, android.control.maxRegionsAe
可用。否则将始终存在。
设备支持的最大区域数由值 android.control.maxRegionsAe
。
坐标系基于有源像素阵列,其中(0,0)是有源像素阵列中的左上像素,并且( android.sensor.info.activeArraySize
android.sensor.info.activeArraySize
-1,android.sensor.info.activeArraySize。高-1)是右下像素有源像素阵列。
权重必须在[0, 1000]
之内,并且表示该区域中每个像素的权重。 这意味着与较小面积相同重量的大型计量区域将对计量结果产生更大的影响。 测光区域可以部分重叠,相机设备将在重叠区域添加权重。
权重是相对于其他曝光测量区域的权重的,所以如果只使用一个区域,所有非零权重将具有相同的效果。 忽略0重量的区域。
如果所有地区的重量都为0,则相机设备不需要使用特定的测光区域。
如果测光区域在捕捉结果元数据中返回使用的android.scaler.cropRegion
之外,相机设备将忽略裁切区域之外的部分,并仅输出相交矩形作为结果元数据中的测光区域。 如果该区域完全位于裁剪区域之外,它将被忽略,并且不会在结果元数据中报告。
单位 : android.sensor.info.activeArraySize
内的像素坐标
有效值的范围:
坐标必须介于[(0,0), (width, height))
之间的android.sensor.info.activeArraySize
之间
可选 - 在某些设备上该值可能为 null
。
Key<Integer> CONTROL_AE_STATE
自动曝光(AE)算法的当前状态。
在AE模式之间切换或启用AE模式( android.control.aeMode
)总是会将AE状态重置为INACTIVE。 类似地,如果
所有算法状态重置为INACTIVE,则在android.control.mode
== USE_SCENE_MODEandroid.control.mode
或android.control.sceneMode
之间切换。
如果状态转换表允许,相机设备可以在两个结果之间进行多个状态转换。 例如:INACTIVE可能永远不会在结果中看到。
结果中的状态是此图像的状态(与此图像同步):如果AE状态变为CONVERGED,则与此结果相关的图像数据应该很好使用。
以下是不同AE模式的状态转换表。
State | Transition Cause | New State | Notes |
---|---|---|---|
INACTIVE | INACTIVE | Camera device auto exposure algorithm is disabled |
当 android.control.aeMode
是AE_MODE_ON_ *时:
State | Transition Cause | New State | Notes |
---|---|---|---|
INACTIVE | Camera device initiates AE scan | SEARCHING | Values changing |
INACTIVE | android.control.aeLock is ON |
LOCKED | Values locked |
SEARCHING | Camera device finishes AE scan | CONVERGED | Good values, not changing |
SEARCHING | Camera device finishes AE scan | FLASH_REQUIRED | Converged but too dark w/o flash |
SEARCHING | android.control.aeLock is ON |
LOCKED | Values locked |
CONVERGED | Camera device initiates AE scan | SEARCHING | Values changing |
CONVERGED | android.control.aeLock is ON |
LOCKED | Values locked |
FLASH_REQUIRED | Camera device initiates AE scan | SEARCHING | Values changing |
FLASH_REQUIRED | android.control.aeLock is ON |
LOCKED | Values locked |
LOCKED | android.control.aeLock is OFF |
SEARCHING | Values not good after unlock |
LOCKED | android.control.aeLock is OFF |
CONVERGED | Values good after unlock |
LOCKED | android.control.aeLock is OFF |
FLASH_REQUIRED | Exposure good, but too dark |
PRECAPTURE | Sequence done. android.control.aeLock is OFF |
CONVERGED | Ready for high-quality capture |
PRECAPTURE | Sequence done. android.control.aeLock is ON |
LOCKED | Ready for high-quality capture |
LOCKED | aeLock is ON and aePrecaptureTrigger is START | LOCKED | Precapture trigger is ignored when AE is already locked |
LOCKED | aeLock is ON and aePrecaptureTrigger is CANCEL | LOCKED | Precapture trigger is ignored when AE is already locked |
Any state (excluding LOCKED) | android.control.aePrecaptureTrigger is START |
PRECAPTURE | Start AE precapture metering sequence |
Any state (excluding LOCKED) | android.control.aePrecaptureTrigger is CANCEL |
INACTIVE | Currently active precapture metering sequence is canceled |
对于上表,摄像机设备可以跳过报告在没有应用干预的情况下发生的任何状态改变(即,模式切换,触发,锁定)。 任何可以以这种方式跳过的状态都称为瞬态。
例如,对于上述AE模式(AE_MODE_ON_ *),除了上表中列出的状态转换之外,相机设备在两个结果之间跳过一个或多个瞬态状态也是合法的。 示例见下表:
State | Transition Cause | New State | Notes |
---|---|---|---|
INACTIVE | Camera device finished AE scan | CONVERGED | Values are already good, transient states are skipped by camera device. |
Any state (excluding LOCKED) | android.control.aePrecaptureTrigger is START, sequence done |
FLASH_REQUIRED | Converged but too dark w/o flash after a precapture sequence, transient states are skipped by camera device. |
Any state (excluding LOCKED) | android.control.aePrecaptureTrigger is START, sequence done |
CONVERGED | Converged after a precapture sequence, transient states are skipped by camera device. |
Any state (excluding LOCKED) | android.control.aePrecaptureTrigger is CANCEL, converged |
FLASH_REQUIRED | Converged but too dark w/o flash after a precapture sequence is canceled, transient states are skipped by camera device. |
Any state (excluding LOCKED) | android.control.aePrecaptureTrigger is CANCEL, converged |
CONVERGED | Converged after a precapture sequenceis canceled, transient states are skipped by camera device. |
CONVERGED | Camera device finished AE scan | FLASH_REQUIRED | Converged but too dark w/o flash after a new scan, transient states are skipped by camera device. |
FLASH_REQUIRED | Camera device finished AE scan | CONVERGED | Converged after a new scan, transient states are skipped by camera device. |
可能的值:
可选 - 在某些设备上,此值可能为 null
。
能力有限 - 在 android.info.supportedHardwareLevel
密钥中报告至少 HARDWARE_LEVEL_LIMITED
设备的所有相机设备上都存在
Key<Range<Integer>> CONTROL_AE_TARGET_FPS_RANGE
自动曝光程序可以调整捕捉帧率以保持良好曝光的范围。
只限制自动曝光(AE)算法,而不是手动控制 android.sensor.exposureTime
和 android.sensor.frameDuration
。
单位 :每秒帧数(FPS)
有效值的范围:
android.control.aeAvailableTargetFpsRanges
任何条目
此密钥可在所有设备上使用。
Key<Integer> CONTROL_AF_MODE
是否启用自动对焦(AF),以及设置为何种模式。
仅当android.control.mode
= AUTO并且镜头不是固定焦点(即
)时才有效。 另请注意,当android.lens.info.minimumFocusDistance
> 0android.control.aeMode
关闭时,AF的行为取决于设备。 建议在将android.control.aeMode
设置为OFF之前使用android.control.afTrigger
来锁定AF,或者在AE关闭时将AF模式设置为OFF。
如果镜头由相机设备自动对焦算法控制,则相机设备将在结果元数据中报告 android.control.afState
中的当前AF状态。
可能的值:
此设备的可用值:
android.control.afAvailableModes
此密钥可在所有设备上使用。
Key<MeteringRectangle[]> CONTROL_AF_REGIONS
用于自动对焦的测光区域列表。
如果 android.control.maxRegionsAf
为0, android.control.maxRegionsAf
可用。否则将始终存在。
设备支持的最大聚焦区域数量由值 android.control.maxRegionsAf
确定。
的坐标系是基于有源像素阵列上,以(0,0)作为有源像素阵列中的左上角的像素,以及( android.sensor.info.activeArraySize
.WIDTH - 1, android.sensor.info.activeArraySize
.height - 1)是在右下像素有源像素阵列。
权重必须在[0, 1000]
之内,并且表示该区域中每个像素的权重。 这意味着与较小面积相同重量的大型计量区域将对计量结果产生更大的影响。 测光区域可以部分重叠,相机设备将在重叠区域添加权重。
权重与其他测量区域的权重有关,所以如果只使用一个区域,则所有非零权重将具有相同的效果。 忽略0重量的区域。
如果所有地区的重量都为0,则相机设备不需要使用特定的测光区域。
如果测光区域在捕捉结果元数据中返回使用的android.scaler.cropRegion
之外,摄像机设备将忽略裁切区域之外的区域,并仅输出相交矩形作为结果元数据中的测光区域。 如果该区域完全位于裁剪区域之外,它将被忽略,并且不会在结果元数据中报告。
单位 : android.sensor.info.activeArraySize
内的像素坐标
有效值的范围:
坐标必须在[(0,0), (width, height))
之间android.sensor.info.activeArraySize
可选 - 在某些设备上此值可能为 null
。
Key<Integer> CONTROL_AF_STATE
自动对焦(AF)算法的当前状态。
在自动对焦模式( android.control.afMode
)之间切换时,始终会将自动对焦状态重置为非激活状态。 同样,如果
所有算法状态重置为INACTIVE,则在android.control.mode
== USE_SCENE_MODEandroid.control.mode
或android.control.sceneMode
之间切换。
如果状态转换表允许,相机设备可以在两个结果之间进行多个状态转换。 例如:INACTIVE可能永远不会在结果中看到。
结果中的状态是此图像的状态(与此图像同步):如果AF状态变为FOCUSED,则与此结果相关的图像数据应该很清晰。
以下是不同AF模式的状态转换表。
当 android.control.afMode
是AF_MODE_OFF或AF_MODE_EDOF时:
State | Transition Cause | New State | Notes |
---|---|---|---|
INACTIVE | INACTIVE | Never changes |
当 android.control.afMode
是AF_MODE_AUTO或AF_MODE_MACRO时:
State | Transition Cause | New State | Notes |
---|---|---|---|
INACTIVE | AF_TRIGGER | ACTIVE_SCAN | Start AF sweep, Lens now moving |
ACTIVE_SCAN | AF sweep done | FOCUSED_LOCKED | Focused, Lens now locked |
ACTIVE_SCAN | AF sweep done | NOT_FOCUSED_LOCKED | Not focused, Lens now locked |
ACTIVE_SCAN | AF_CANCEL | INACTIVE | Cancel/reset AF, Lens now locked |
FOCUSED_LOCKED | AF_CANCEL | INACTIVE | Cancel/reset AF |
FOCUSED_LOCKED | AF_TRIGGER | ACTIVE_SCAN | Start new sweep, Lens now moving |
NOT_FOCUSED_LOCKED | AF_CANCEL | INACTIVE | Cancel/reset AF |
NOT_FOCUSED_LOCKED | AF_TRIGGER | ACTIVE_SCAN | Start new sweep, Lens now moving |
Any state | Mode change | INACTIVE |
对于上表,摄像机设备可以跳过报告在没有应用干预的情况下发生的任何状态改变(即,模式切换,触发,锁定)。 任何可以以这种方式跳过的状态都称为瞬态。
例如,对于这些AF模式(AF_MODE_AUTO和AF_MODE_MACRO),除了上表中列出的状态转换之外,摄像机设备在两个结果之间跳过一个或多个瞬态状态也是合法的。 示例见下表:
State | Transition Cause | New State | Notes |
---|---|---|---|
INACTIVE | AF_TRIGGER | FOCUSED_LOCKED | Focus is already good or good after a scan, lens is now locked. |
INACTIVE | AF_TRIGGER | NOT_FOCUSED_LOCKED | Focus failed after a scan, lens is now locked. |
FOCUSED_LOCKED | AF_TRIGGER | FOCUSED_LOCKED | Focus is already good or good after a scan, lens is now locked. |
NOT_FOCUSED_LOCKED | AF_TRIGGER | FOCUSED_LOCKED | Focus is good after a scan, lens is not locked. |
当 android.control.afMode
是AF_MODE_CONTINUOUS_VIDEO时:
State | Transition Cause | New State | Notes |
---|---|---|---|
INACTIVE | Camera device initiates new scan | PASSIVE_SCAN | Start AF scan, Lens now moving |
INACTIVE | AF_TRIGGER | NOT_FOCUSED_LOCKED | AF state query, Lens now locked |
PASSIVE_SCAN | Camera device completes current scan | PASSIVE_FOCUSED | End AF scan, Lens now locked |
PASSIVE_SCAN | Camera device fails current scan | PASSIVE_UNFOCUSED | End AF scan, Lens now locked |
PASSIVE_SCAN | AF_TRIGGER | FOCUSED_LOCKED | Immediate transition, if focus is good. Lens now locked |
PASSIVE_SCAN | AF_TRIGGER | NOT_FOCUSED_LOCKED | Immediate transition, if focus is bad. Lens now locked |
PASSIVE_SCAN | AF_CANCEL | INACTIVE | Reset lens position, Lens now locked |
PASSIVE_FOCUSED | Camera device initiates new scan | PASSIVE_SCAN | Start AF scan, Lens now moving |
PASSIVE_UNFOCUSED | Camera device initiates new scan | PASSIVE_SCAN | Start AF scan, Lens now moving |
PASSIVE_FOCUSED | AF_TRIGGER | FOCUSED_LOCKED | Immediate transition, lens now locked |
PASSIVE_UNFOCUSED | AF_TRIGGER | NOT_FOCUSED_LOCKED | Immediate transition, lens now locked |
FOCUSED_LOCKED | AF_TRIGGER | FOCUSED_LOCKED | No effect |
FOCUSED_LOCKED | AF_CANCEL | INACTIVE | Restart AF scan |
NOT_FOCUSED_LOCKED | AF_TRIGGER | NOT_FOCUSED_LOCKED | No effect |
NOT_FOCUSED_LOCKED | AF_CANCEL | INACTIVE | Restart AF scan |
当 android.control.afMode
是AF_MODE_CONTINUOUS_PICTURE时:
State | Transition Cause | New State | Notes |
---|---|---|---|
INACTIVE | Camera device initiates new scan | PASSIVE_SCAN | Start AF scan, Lens now moving |
INACTIVE | AF_TRIGGER | NOT_FOCUSED_LOCKED | AF state query, Lens now locked |
PASSIVE_SCAN | Camera device completes current scan | PASSIVE_FOCUSED | End AF scan, Lens now locked |
PASSIVE_SCAN | Camera device fails current scan | PASSIVE_UNFOCUSED | End AF scan, Lens now locked |
PASSIVE_SCAN | AF_TRIGGER | FOCUSED_LOCKED | Eventual transition once the focus is good. Lens now locked |
PASSIVE_SCAN | AF_TRIGGER | NOT_FOCUSED_LOCKED | Eventual transition if cannot find focus. Lens now locked |
PASSIVE_SCAN | AF_CANCEL | INACTIVE | Reset lens position, Lens now locked |
PASSIVE_FOCUSED | Camera device initiates new scan | PASSIVE_SCAN | Start AF scan, Lens now moving |
PASSIVE_UNFOCUSED | Camera device initiates new scan | PASSIVE_SCAN | Start AF scan, Lens now moving |
PASSIVE_FOCUSED | AF_TRIGGER | FOCUSED_LOCKED | Immediate trans. Lens now locked |
PASSIVE_UNFOCUSED | AF_TRIGGER | NOT_FOCUSED_LOCKED | Immediate trans. Lens now locked |
FOCUSED_LOCKED | AF_TRIGGER | FOCUSED_LOCKED | No effect |
FOCUSED_LOCKED | AF_CANCEL | INACTIVE | Restart AF scan |
NOT_FOCUSED_LOCKED | AF_TRIGGER | NOT_FOCUSED_LOCKED | No effect |
NOT_FOCUSED_LOCKED | AF_CANCEL | INACTIVE | Restart AF scan |
在AF_MODE_CONTINUOUS_ *(CAF模式)和AF_MODE_AUTO / AF_MODE_MACRO(自动模式)之间切换时,相机设备可能会跳过初始INACTIVE或PASSIVE_SCAN状态。 当模式切换请求中包含触发器时,将在请求中新模式的上下文中评估触发器。 示例见下表:
State | Transition Cause | New State | Notes |
---|---|---|---|
any state | CAF-->AUTO mode switch | INACTIVE | Mode switch without trigger, initial state must be INACTIVE |
any state | CAF-->AUTO mode switch with AF_TRIGGER | trigger-reachable states from INACTIVE | Mode switch with trigger, INACTIVE is skipped |
any state | AUTO-->CAF mode switch | passively reachable states from INACTIVE | Mode switch without trigger, passive transient state is skipped |
可能的值:
INACTIVE
PASSIVE_SCAN
PASSIVE_FOCUSED
ACTIVE_SCAN
FOCUSED_LOCKED
NOT_FOCUSED_LOCKED
PASSIVE_UNFOCUSED
此密钥可在所有设备上使用。
Key<Integer> CONTROL_AF_TRIGGER
相机设备是否会为此请求触发自动对焦。
该条目通常设置为IDLE,或根本不包含在请求设置中。
当包含并设置为START时,相机设备将触发自动对焦算法。 如果禁用了自动对焦,则此触发器不起作用。
设置为取消时,相机设备将取消任何激活的触发,并返回其初始AF状态。
通常,应用程序应将此条目设置为START或CANCEL,以便仅进行一次捕获,然后将其返回到IDLE(或根本不设置)。 指定连续多次捕捉的开始意味着反复重新开始AF操作。
有关每种自动对焦模式的触发方式,请参阅 android.control.afState
。
允许同时使用自动对焦触发器和预捕获触发器android.control.aePrecaptureTrigger
。 然而,由于这些触发器经常需要自动对焦和自动曝光例程之间的协作(例如,可能需要启用焦点扫描),所以摄像机设备可以延迟作用于稍后的触发,直到先前的触发已经被完全处理。 例如,这可能会导致触发器和android.control.afState
更改之间的间隔变android.control.afState
。
可能的值:
此密钥可在所有设备上使用。
Key<Boolean> CONTROL_AWB_LOCK
自动白平衡(AWB)当前是否锁定到其最新的计算值。
当设置为 true
(ON)时,AWB算法被锁定到其最新参数,并且不会更改色彩平衡设置,直到锁定设置为 false
(OFF)。
由于相机设备具有流水线中的请求,因此锁定的设置不一定对应于从相机设备接收到的最新捕捉结果中存在的设置,因为甚至可能之前发生了附加捕捉和AWB更新结果被送出。 如果应用程序在自动和手动控制之间切换,并希望在切换过程中消除闪烁,建议执行以下步骤:
请注意,AWB锁仅在android.control.awbMode
处于AUTO模式时才有意义; 在其他模式下,AWB已经被固定为特定设置。
一些LEGACY设备可能不支持ON; 该值将被覆盖为OFF。
此密钥可在所有设备上使用。
也可以看看:
Key<Integer> CONTROL_AWB_MODE
自动白平衡(AWB)是否正在设置色彩转换字段以及其照明目标是什么。
此控件仅在 android.control.mode
为AUTO时有效。
当设置为ON模式下,相机设备的自动白平衡程序启用,重写应用程序的选择android.colorCorrection.transform
, android.colorCorrection.gains
和android.colorCorrection.mode
。 请注意,当android.control.aeMode
为OFF时,AWB的行为取决于设备。 在将AE模式设置为OFF之前,建议使用android.control.awbLock
将AWB模式设置为OFF或锁定AWB。
当设置为关闭模式时,相机设备的自动白平衡例程被禁用。 应用手动控制由白平衡android.colorCorrection.transform
, android.colorCorrection.gains
和android.colorCorrection.mode
。
设置为其他模式时,相机设备的自动白平衡例程将被禁用。 相机设备使用每个特定的照明目标进行白平衡调整。 该应用程序对价值android.colorCorrection.transform
, android.colorCorrection.gains
和android.colorCorrection.mode
被忽略。
可能的值:
此设备的可用值:
android.control.awbAvailableModes
此密钥可在所有设备上使用。
也可以看看:
COLOR_CORRECTION_GAINS
COLOR_CORRECTION_MODE
COLOR_CORRECTION_TRANSFORM
CONTROL_AE_MODE
CONTROL_AWB_AVAILABLE_MODES
CONTROL_AWB_LOCK
CONTROL_MODE
CONTROL_AWB_MODE_OFF
CONTROL_AWB_MODE_AUTO
CONTROL_AWB_MODE_INCANDESCENT
CONTROL_AWB_MODE_FLUORESCENT
CONTROL_AWB_MODE_WARM_FLUORESCENT
CONTROL_AWB_MODE_DAYLIGHT
CONTROL_AWB_MODE_CLOUDY_DAYLIGHT
CONTROL_AWB_MODE_TWILIGHT
CONTROL_AWB_MODE_SHADE
Key<MeteringRectangle[]> CONTROL_AWB_REGIONS
用于自动白平衡光源估计的测光区域列表。
如果 android.control.maxRegionsAwb
为0, android.control.maxRegionsAwb
可用。否则将始终存在。
设备支持的最大区域数由值 android.control.maxRegionsAwb
确定。
的坐标系是基于有源像素阵列上,以(0,0)作为有源像素阵列中的左上角的像素,以及( android.sensor.info.activeArraySize
.WIDTH - 1, android.sensor.info.activeArraySize
.height - 1)是在右下像素有源像素阵列。
权重必须在0到1000之间,并且表示该区域中每个像素的权重。 这意味着与较小面积相同重量的大型计量区域将对计量结果产生更大的影响。 测光区域可以部分重叠,相机设备将在重叠区域添加权重。
权重与其他白平衡测量区域的权重有关,因此如果仅使用一个区域,则所有非零权重将具有相同的效果。 忽略0重量的区域。
如果所有地区的重量都为0,则相机设备不需要使用特定的测光区域。
如果测光区域在捕捉结果元数据中返回使用的android.scaler.cropRegion
之外,相机设备将忽略裁切区域之外的部分,并仅输出相交矩形作为结果元数据中的测光区域。 如果该区域完全位于裁剪区域之外,它将被忽略,并且不会在结果元数据中报告。
单位 : android.sensor.info.activeArraySize
内的像素坐标
有效值的范围:
坐标必须在[(0,0), (width, height))
之间android.sensor.info.activeArraySize
可选 - 某些设备上的此值可能为 null
。
Key<Integer> CONTROL_AWB_STATE
自动白平衡(AWB)算法的当前状态。
在AWB模式之间切换( android.control.awbMode
)总是会将AWB状态重置为INACTIVE。 同样,如果
所有算法状态重置为INACTIVE,则在android.control.mode
== USE_SCENE_MODEandroid.control.mode
或android.control.sceneMode
之间切换。
如果状态转换表允许,相机设备可以在两个结果之间进行多个状态转换。 所以INACTIVE可能永远不会在结果中看到。
结果中的状态是此图像的状态(与此图像同步):如果AWB状态变为CONVERGED,则与此结果相关的图像数据应该很好用。
以下是不同AWB模式的状态转换表。
当
:android.control.awbMode
!= AWB_MODE_AUTO
State | Transition Cause | New State | Notes |
---|---|---|---|
INACTIVE | INACTIVE | Camera device auto white balance algorithm is disabled |
当 android.control.awbMode
是AWB_MODE_AUTO时:
State | Transition Cause | New State | Notes |
---|---|---|---|
INACTIVE | Camera device initiates AWB scan | SEARCHING | Values changing |
INACTIVE | android.control.awbLock is ON |
LOCKED | Values locked |
SEARCHING | Camera device finishes AWB scan | CONVERGED | Good values, not changing |
SEARCHING | android.control.awbLock is ON |
LOCKED | Values locked |
CONVERGED | Camera device initiates AWB scan | SEARCHING | Values changing |
CONVERGED | android.control.awbLock is ON |
LOCKED | Values locked |
LOCKED | android.control.awbLock is OFF |
SEARCHING | Values not good after unlock |
对于上表,摄像机设备可以跳过报告在没有应用干预的情况下发生的任何状态改变(即,模式切换,触发,锁定)。 任何可以以这种方式跳过的状态都称为瞬态。
例如,对于此AWB模式(AWB_MODE_AUTO),除上表中列出的状态转换外,相机设备在两个结果之间跳过一个或多个瞬态也是合法的。 示例见下表:
State | Transition Cause | New State | Notes |
---|---|---|---|
INACTIVE | Camera device finished AWB scan | CONVERGED | Values are already good, transient states are skipped by camera device. |
LOCKED | android.control.awbLock is OFF |
CONVERGED | Values good after unlock, transient states are skipped by camera device. |
可能的值:
可选 - 在某些设备上,此值可能为 null
。
能力有限 - 在 android.info.supportedHardwareLevel
密钥中报告至少 HARDWARE_LEVEL_LIMITED
设备的所有相机设备上都存在
Key<Integer> CONTROL_CAPTURE_INTENT
相机设备3A的信息(自动曝光,自动对焦,自动白平衡)关于此拍摄目的的例程,以帮助相机设备决定最佳的3A策略。
该控制(MANUAL除外)仅在
和任何3A例程处于活动状态时才有效。android.control.mode
!= OFF
如果android.request.availableCapabilities
包含PRIVATE_REPROCESSING或YUV_REPROCESSING,将支持ZERO_SHUTTER_LAG。 如果android.request.availableCapabilities
包含MANUAL_SENSOR,则将支持MANUAL。 其他意图值始终受支持。
可能的值:
此密钥可在所有设备上使用。
Key<Integer> CONTROL_EFFECT_MODE
要应用的特殊颜色效果。
设置此模式时,相机设备生成的图像将应用颜色效果。 这些色彩效果的解释和实现留给相机设备的实现者,并且不应该依赖于在所有设备中一致(或存在)。
可能的值:
此设备的可用值:
android.control.availableEffects
此密钥可在所有设备上使用。
Key<Integer> CONTROL_MODE
3A(自动曝光,自动白平衡,自动对焦)控制程序的整体模式。
这是一个顶级3A控制开关。 设置为OFF时,相机设备的所有3A控制均被禁用。 应用程序必须自行设置捕获参数的字段。
当设置为AUTO时,android.control。*中的各个算法控件有效,例如 android.control.afMode
。
当设置为USE_SCENE_MODE时,android.control。*中的各个控件大多被禁用,并且相机设备按照自己的意愿实现场景模式设置之一(例如ACTION,SUNSET或PARTY)。 摄像机设备场景模式3A设置由capture results
提供。
设置为OFF_KEEP_STATE时,它与OFF模式类似,唯一的区别是相机设备不会使用背景3A统计信息更新,就像从未捕获此帧一样。 该模式可用于应用程序不希望3A手动控制捕获影响后续自动3A捕获结果的情况。
可能的值:
此设备的可用值:
android.control.availableModes
此密钥可在所有设备上使用。
Key<Integer> CONTROL_POST_RAW_SENSITIVITY_BOOST
捕获RAW传感器数据后应用于输出图像的附加灵敏度提升量。
在捕捉传感器RAW图像后,某些相机设备在相机处理流水线中支持额外的数字灵敏度提升。 这种提升将应用于YUV / JPEG格式的输出图像,但不会对RAW_SENSOR,RAW10,RAW12或RAW_OPAQUE等RAW输出格式产生影响。
对于不支持任何RAW格式输出的设备,该密钥将为null
。 对于支持RAW格式输出的设备,该键始终存在,如果设备不支持后期RAW灵敏度提升,则会在此键中列出100
。
如果相机设备无法应用所请求的精确提升,它会将提升降至最接近的支持值。 输出捕捉结果中将使用最终提升值。
对于支持后期RAW灵敏度提升的设备,此类设备的YUV / JPEG输出图像的总灵敏度为
格式图像的灵敏度始终为 android.sensor.sensitivity
* android.control.postRawSensitivityBoost
/ 100android.sensor.sensitivity
此控件仅在android.control.aeMode
或android.control.mode
设置为OFF时有效; 否则自动曝光算法将覆盖此值。
单位 :ISO算术单位,与 android.sensor.sensitivity
相同
有效值的范围:
android.control.postRawSensitivityBoostRange
可选 - 在某些设备上,此值可能为 null
。
Key<Integer> CONTROL_SCENE_MODE
控制哪种场景模式当前处于活动状态。
场景模式是针对特定条件和拍摄设置进行优化的自定义相机模式。
这是
时激活的模式。 除了FACE_PRIORITY,这些模式将禁用android.control.mode
== USE_SCENE_MODEandroid.control.aeMode
, android.control.awbMode
,并android.control.afMode
,同时在使用。
这些场景模式的解释和实现留给相机设备的实现者。 他们的行为在所有设备上都不一致,并且任何给定的设备可能只实现这些模式的一个子集。
可能的值:
DISABLED
FACE_PRIORITY
ACTION
PORTRAIT
LANDSCAPE
NIGHT
NIGHT_PORTRAIT
THEATRE
BEACH
SNOW
SUNSET
STEADYPHOTO
FIREWORKS
SPORTS
PARTY
CANDLELIGHT
BARCODE
HIGH_SPEED_VIDEO
HDR
此设备的可用值:
android.control.availableSceneModes
此密钥可在所有设备上使用。
也可以看看:
CONTROL_AE_MODE
CONTROL_AF_MODE
CONTROL_AVAILABLE_SCENE_MODES
CONTROL_AWB_MODE
CONTROL_MODE
CONTROL_SCENE_MODE_DISABLED
CONTROL_SCENE_MODE_FACE_PRIORITY
CONTROL_SCENE_MODE_ACTION
CONTROL_SCENE_MODE_PORTRAIT
CONTROL_SCENE_MODE_LANDSCAPE
CONTROL_SCENE_MODE_NIGHT
CONTROL_SCENE_MODE_NIGHT_PORTRAIT
CONTROL_SCENE_MODE_THEATRE
CONTROL_SCENE_MODE_BEACH
CONTROL_SCENE_MODE_SNOW
CONTROL_SCENE_MODE_SUNSET
CONTROL_SCENE_MODE_STEADYPHOTO
CONTROL_SCENE_MODE_FIREWORKS
CONTROL_SCENE_MODE_SPORTS
CONTROL_SCENE_MODE_PARTY
CONTROL_SCENE_MODE_CANDLELIGHT
CONTROL_SCENE_MODE_BARCODE
CONTROL_SCENE_MODE_HIGH_SPEED_VIDEO
CONTROL_SCENE_MODE_HDR
Key<Integer> CONTROL_VIDEO_STABILIZATION_MODE
视频稳定是否有效。
视频稳定会自动变换摄像机中的图像,以便稳定连续帧之间的运动。
如果启用,视频稳定可以修改 android.scaler.cropRegion
以保持视频流稳定。
在不同的视频稳定模式之间切换可能需要几个帧才能初始化,相机设备将在捕捉结果元数据中报告当前模式。 例如,当请求“开”模式时,前几个捕捉结果中的视频稳定模式可能仍为“关”,初始化完成后它将变为“开”。
另外,并非所有记录尺寸或帧速率都可以被支持稳定的设备支持。 如果记录分辨率小于或等于1920 x 1080(宽度小于或等于1920,高度小于或等于1080),则可以保证以MediaRecorder或MediaCodec为目标的输出稳定;记录帧速率小于或等于30fps。 在其他尺寸下,如果记录输出不稳定,或者没有可稳定的输出表面类型,则CaptureResult android.control.videoStabilizationMode
字段将返回OFF。
如果摄像设备同时支持此模式和OIS( android.lens.opticalStabilizationMode
),则打开这两个模式可能会产生不希望的交互,因此建议不要同时启用这两种模式。
可能的值:
此密钥可在所有设备上使用。
Key<Integer> EDGE_MODE
边缘增强的操作模式。
边缘增强功能可提高拍摄图像的清晰度和细节。 OFF表示相机设备不会应用增强功能。
FAST / HIGH_QUALITY都意味着将应用相机设备确定的增强。 HIGH_QUALITY模式表示相机设备将使用最高质量的增强算法,即使它会降低捕捉速率。 FAST意味着相机设备在应用边缘增强时不会降低捕捉速度。 如果边缘增强会减慢捕获速率,FAST可能与OFF相同。 每个输出流都会应用相似的增强量。
ZERO_SHUTTER_LAG旨在用于在预览期间保持高分辨率图像的连续循环缓冲区并在用户触发时将来自该缓冲区的图像重新处理为最终采集的应用程序。 在此模式下,相机设备会将边缘增强应用于低分辨率流(低于最大记录分辨率)以最大化预览质量,但不会将边缘增强应用于高分辨率流,因为如果需要,以后会对其进行重新处理。
对于YUV_REPROCESSING,这些FAST / HIGH_QUALITY模式都意味着相机设备将分别应用FAST / HIGH_QUALITY YUV域边缘增强。 如果已设置,摄像机设备可根据android.reprocess.effectiveExposureFactor
调整其内部边缘增强参数以获得最佳图像质量。
可能的值:
此设备的可用值:
android.edge.availableEdgeModes
可选 - 在某些设备上,此值可能为 null
。
完整功能 - 在 android.info.supportedHardwareLevel
密钥中报告为 HARDWARE_LEVEL_FULL
设备的所有相机设备上都存在
Key<Integer> FLASH_MODE
相机设备闪光灯控制的理想模式。
此控件仅在闪光灯可用时有效(
)。android.flash.info.available
== true
使用此控件时,必须将android.control.aeMode
设置为ON或OFF。 否则,相机设备自动曝光相关的闪光控制(ON_AUTO_FLASH,ON_ALWAYS_FLASH或ON_AUTO_FLASH_REDEYE)将覆盖此控件。
设置为OFF时,相机设备将不会为此拍摄启动闪光灯。
设置为SINGLE时,无论相机设备的自动曝光例程结果如何,相机设备都会闪光。 当用于静止拍摄的情况下,该控制应与自动曝光(AE)预拍测光顺序( android.control.aePrecaptureTrigger
)一起使用,否则图像可能会曝光不正确。
设置为TORCH时,闪光灯将持续点亮。 此模式可用于预览,自动对焦辅助,静态拍摄或视频录制等用例。
捕获结果元数据中的闪存状态将由 android.flash.state
报告。
可能的值:
此密钥可在所有设备上使用。
Key<Integer> FLASH_STATE
闪光灯组件的当前状态。
当相机设备没有闪光灯装置时(即
),此状态将始终为无效。 其他状态表示当前的闪光灯状态。android.flash.info.available
== false
在某些情况下,这可以在LEGACY设备上使用:
android.control.aeMode
==
ON_ALWAYS_FLASH will always return FIRED.android.flash.mode
==
TORCH will always return FIRED.在所有其他情况下,LEGACY设备将无法使用该状态(即它将是 null
)。
可能的值:
可选 - 在某些设备上,此值可能为 null
。
能力有限 - 在 android.info.supportedHardwareLevel
密钥中报告至少 HARDWARE_LEVEL_LIMITED
设备的所有相机设备上都存在
Key<Integer> HOT_PIXEL_MODE
热像素校正的操作模式。
热像素校正插值出或去除不能准确测量入射光的像素(例如,粘在任意值或过度敏感的像素)。
可能的值:
此设备的可用值:
android.hotPixel.availableHotPixelModes
可选 - 在某些设备上该值可能为 null
。
Key<Location> JPEG_GPS_LOCATION
生成图像GPS元数据时使用的位置对象。
在请求中设置位置对象将把位置的GPS坐标包括在根据请求捕获的任何JPEG图像中。 任何接收JPEG图像的人都可以查看这些坐标。
此密钥可在所有设备上使用。
Key<Integer> JPEG_ORIENTATION
JPEG图像的方向。
相对于相机的方向,顺时针旋转的角度(以度为单位),JPEG图片需要旋转,以便直视。
相机设备可以将此值编码为JPEG EXIF标头,或旋转图像数据以匹配此方向。 当图像数据旋转时,缩略图数据也会旋转。
请注意,此方向与摄像机传感器的方向有关,由 android.sensor.orientation
给出。
要从Android传感器API提供的设备方向转换,可以使用以下示例代码:
private int getJpegOrientation(CameraCharacteristics c, int deviceOrientation) {
if (deviceOrientation == android.view.OrientationEventListener.ORIENTATION_UNKNOWN) return 0;
int sensorOrientation = c.get(CameraCharacteristics.SENSOR_ORIENTATION);
// Round device orientation to a multiple of 90
deviceOrientation = (deviceOrientation + 45) / 90 * 90;
// Reverse device orientation for front-facing cameras
boolean facingFront = c.get(CameraCharacteristics.LENS_FACING) == CameraCharacteristics.LENS_FACING_FRONT;
if (facingFront) deviceOrientation = -deviceOrientation;
// Calculate desired JPEG orientation relative to camera orientation to make
// the image upright relative to the device orientation
int jpegOrientation = (sensorOrientation + deviceOrientation + 360) % 360;
return jpegOrientation;
}
单位 :90度的倍数
有效值的范围:
0,90,180,270
此密钥可在所有设备上使用。
也可以看看:
Key<Byte> JPEG_QUALITY
最终JPEG图像的压缩质量。
85-95是典型的使用范围。
有效值的范围:
1-100; 质量越高,质量越好
此密钥可在所有设备上使用。
Key<Byte> JPEG_THUMBNAIL_QUALITY
JPEG缩略图的压缩质量。
有效值的范围:
1-100; 质量越高,质量越好
此密钥可在所有设备上使用。
Key<Size> JPEG_THUMBNAIL_SIZE
嵌入式JPEG缩略图的分辨率。
设置为(0,0)值时,JPEG EXIF将不包含缩略图,但捕获的JPEG仍然是有效的图像。
为获得最佳效果,在发出JPEG图像请求时,所选缩略图大小应与主JPEG输出具有相同的纵横比。
如果缩略图图像宽高比与JPEG主图像宽高比不同,则相机设备通过从主图像裁剪缩略图来创建缩略图。 例如,如果主图像的宽高比为4:3,则缩略图图像的宽高比为16:9,主图像将垂直裁剪(信箱)以生成缩略图图像。 纵横比不同时,缩略图图像始终比主图像具有更小的视场(FOV)。
当请求非零度的 android.jpeg.orientation
时,相机设备将通过以下方式之一处理缩略图旋转:
EXIF orientation flag
and keep jpeg and thumbnail image data unrotated.EXIF orientation flag
. In this case, LIMITED or FULL hardware level devices will report rotated thumnail size in capture result, so the width and height will be interchanged if 90 or 270 degree orientation is requested. LEGACY device will always report unrotated thumbnail size.有效值的范围:
android.jpeg.availableThumbnailSizes
此密钥可在所有设备上使用。
Key<Float> LENS_APERTURE
所需的镜头光圈尺寸,作为镜头焦距与有效光圈直径的比率。
仅在具有可变光圈镜头的相机设备上支持设置此值。
当这种支撑和 android.control.aeMode
为OFF时,这可被设置连同 android.sensor.exposureTime
, android.sensor.sensitivity
和 android.sensor.frameDuration
实现手动曝光控制。
要求的光圈值可能需要几帧才能达到要求的值; 相机设备将在光圈变化时报告捕捉结果元数据中的当前(中间)光圈大小。 当光圈仍在变化时, android.lens.state
将被设置为MOVING。
当这被支持并且 android.control.aeMode
是开启模式之一时,这将被相机设备自动曝光算法覆盖,重写的值然后在相应的结果中被提供给用户。
单位 :f数(f / N)
有效值的范围:
android.lens.info.availableApertures
可选 - 在某些设备上,此值可能为 null
。
完整功能 - 存在于 android.info.supportedHardwareLevel
密钥中报告为 HARDWARE_LEVEL_FULL
设备的所有相机设备上
Key<Float> LENS_FILTER_DENSITY
镜头中性密度滤镜的所需设置。
大多数相机设备不支持此控件。
通常使用透镜滤光片来降低传感器所接触的光量(以EV的步长测量)。 如此处所使用的,EV步骤是标准对数表示,其是非负的,并且与光照到传感器的光量成反比。 例如,将此值设置为0将不会导致入射光的减少,将其设置为2意味着将滤波器设置为将入射光减少两次(允许传感器的先前光量的1/4) )。
在镜头滤镜密度变为所需值之前可能需要几个画面。 虽然滤波器密度仍在变化,但android.lens.state
将设置为MOVING。
单位 :曝光值(EV)
有效值的范围:
android.lens.info.availableFilterDensities
可选 - 在某些设备上,该值可能为 null
。
完整功能 - 在 android.info.supportedHardwareLevel
密钥中报告为 HARDWARE_LEVEL_FULL
设备的所有相机设备上都存在
Key<Float> LENS_FOCAL_LENGTH
所需的镜头焦距; 用于光学变焦。
此设置控制相机设备镜头的物理焦距。 改变焦距会改变相机设备的视野,并且通常用于光学变焦。
与android.lens.focusDistance
和android.lens.aperture
一样,此设置不会立即应用,并且可能需要几帧才能将镜头更改为所需的焦距。 虽然焦距仍在变化,但android.lens.state
将设置为MOVING。
大多数设备不支持光学变焦。
单位 :毫米
有效值的范围:
android.lens.info.availableFocalLengths
此密钥可在所有设备上使用。
Key<Float> LENS_FOCUS_DISTANCE
从镜头最前表面测量的最清晰焦距平面的所需距离。
对于定焦相机应该为零
单位 :详情请参阅 android.lens.info.focusDistanceCalibration
有效值的范围:
> = 0
可选 - 在某些设备上,此值可能为 null
。
完整功能 - 存在于 android.info.supportedHardwareLevel
密钥中报告为 HARDWARE_LEVEL_FULL
设备的所有相机设备上
Key<Pair<Float, Float>> LENS_FOCUS_RANGE
清晰焦距(景深)的场景距离范围。
如果变焦不支持,仍然可以报告固定的景深范围
单位 :屈光度的一对焦点距离:(近,远); 详情请参阅android.lens.info.focusDistanceCalibration
。
有效值的范围:
> = 0
可选 - 在某些设备上该值可能为 null
。
能力有限 - 在 android.info.supportedHardwareLevel
密钥中报告至少 HARDWARE_LEVEL_LIMITED
设备的所有相机设备上都存在
Key<float[]> LENS_INTRINSIC_CALIBRATION
此摄像机设备的固有校准参数。
描述从以相机为中心的三维坐标到传感器像素坐标的转换的五个校准参数:
[f_x, f_y, c_x, c_y, s]
其中 f_x
和 f_y
是水平和垂直焦距, [c_x, c_y]
是光轴的位置,而 s
是传感器平面未与镜头平面对齐的歪斜参数。
这些通常在变换矩阵K中使用:
K = [ f_x, s, c_x,
0, f_y, c_y,
0 0, 1 ]
然后可以将其与相机姿态旋转 R
和平移 t
(分别为 android.lens.poseRotation
和 android.lens.poseTranslation
)组合以计算从世界坐标到像素坐标的完整变换:
P = [ K 0 * [ R t
0 1 ] 0 1 ]
并且 p_w
是世界坐标系中的点,并且 p_s
是相机有效像素阵列坐标系中的点,并且具有包括由z:
p_h = (x_h, y_h, z_h) = P p_w
p_s = p_h / z_h
因此 [x_s, y_s]
是世界点的像素坐标, z_s = 1
和 w_s
是像素坐标中视差(深度)的度量。
请注意,此变换的坐标系是android.sensor.info.preCorrectionActiveArraySize
系统,其中(0,0)
是preCorrectionActiveArraySize矩形的左上角。 一旦将姿态和内部校准变换应用于世界点,则需要应用android.lens.radialDistortion
变换,并将结果调整为android.sensor.info.activeArraySize
坐标系(其中(0, 0)
是activeArraySize矩形的左上角),以将确定已处理(非RAW)输出缓冲区的世界点的最终像素坐标。
单位 : android.sensor.info.preCorrectionActiveArraySize
坐标系中的像素。
可选 - 在某些设备上,此值可能为 null
。
Key<Integer> LENS_OPTICAL_STABILIZATION_MODE
设置相机设备在拍摄图像时是否使用光学防抖(OIS)。
OIS用于补偿捕捉过程中摄像机微小移动造成的运动模糊。 与数字图像稳定( android.control.videoStabilizationMode
)不同,OIS利用机械元件来稳定照相机传感器,从而在照相机震动变得明显之前允许更长的曝光时间。
在不同的光学稳定模式之间切换可能需要几帧来初始化,相机设备将在捕捉结果元数据中报告当前模式。 例如,当请求“ON”模式时,前几个捕捉结果中的光学稳定模式可能仍为“OFF”,初始化完成后它将变为“ON”。
如果相机设备同时支持OIS和数字图像稳定( android.control.videoStabilizationMode
),则打开这两种模式可能会产生不希望的交互作用,因此建议不要同时启用这两种模式。
并非所有设备都支持OIS; 有关可用的控件,请参阅android.lens.info.availableOpticalStabilization
。
可能的值:
此设备的可用值:
android.lens.info.availableOpticalStabilization
可选 - 在某些设备上,此值可能为 null
。
能力有限 - 在 android.info.supportedHardwareLevel
密钥中报告至少 HARDWARE_LEVEL_LIMITED
设备的所有相机设备上都存在
Key<float[]> LENS_POSE_ROTATION
摄像机相对于传感器坐标系的方向。
四个系数描述从Android传感器坐标系到相机对齐坐标系的四元数旋转,其中X轴与图像传感器的长边对齐,Y轴与图像的短边对齐传感器,并且Z轴与传感器的光轴对齐。
为了从四元数系数 (x,y,z,w)
转换成旋转轴 (a_x, a_y, a_z)
和旋转量 theta
,可以使用以下公式:
theta = 2 * acos(w)
a_x = x / sin(theta/2)
a_y = y / sin(theta/2)
a_z = z / sin(theta/2)
要创建应用由此四元数定义的旋转的3x3旋转矩阵,可以使用以下矩阵:
R = [ 1 - 2y^2 - 2z^2, 2xy - 2zw, 2xz + 2yw,
2xy + 2zw, 1 - 2x^2 - 2z^2, 2yz - 2xw,
2xz - 2yw, 2yz + 2xw, 1 - 2x^2 - 2y^2 ]
然后可以使用该矩阵将旋转应用于列向量点
p' = Rp
其中 p
位于设备传感器坐标系中,而 p'
位于面向相机的坐标系中。
单位 :四元数系数
可选 - 在某些设备上,此值可能为 null
。
Key<float[]> LENS_POSE_TRANSLATION
相机光学中心的位置。
相机设备的透镜的光学中心的位置,作为三维矢量(x,y,z)
,相对于在相同的方向,因为这相机面向最大相机装置的光学中心,在Android sensor coordinate axes
。 请注意,只有轴定义与传感器坐标系共享,但不是原点。
如果此设备是具有给定面的最大或唯一相机设备,则此位置将为(0, 0, 0)
; 一个镜头光学中心位于主传感器沿+ X轴(从用户的角度来看,右侧)3厘米的摄像机设备将报告(0.03, 0, 0)
。
要在面向相同方向的两台摄像机之间转换像素坐标,首先必须校正源摄像机android.lens.radialDistortion
。 则源相机android.lens.intrinsicCalibration
需要由被施加,随后android.lens.poseRotation
源照相机的,相对于目的相机源相机的平移,所述android.lens.poseRotation
目的地的相机,和最后的逆android.lens.intrinsicCalibration
目的地相机。 这在目标相机像素坐标中获得了径向无失真坐标。
为了将其与目标摄像机的实际图像进行比较,目标摄像机图像需要在比较或采样之前对径向失真进行校正。
单位 :米
可选 - 在某些设备上,此值可能为 null
。
Key<float[]> LENS_RADIAL_DISTORTION
校正系数以校正此摄像机设备的径向和切向镜头失真。
四个径向畸变系数 [kappa_0, kappa_1, kappa_2, kappa_3]
和两个切向畸变系数 [kappa_4, kappa_5]
,可用于校正镜头的几何失真与映射方程:
x_c = x_i * ( kappa_0 + kappa_1 * r^2 + kappa_2 * r^4 + kappa_3 * r^6 ) +
kappa_4 * (2 * x_i * y_i) + kappa_5 * ( r^2 + 2 * x_i^2 )
y_c = y_i * ( kappa_0 + kappa_1 * r^2 + kappa_2 * r^4 + kappa_3 * r^6 ) +
kappa_5 * (2 * x_i * y_i) + kappa_4 * ( r^2 + 2 * y_i^2 )
这里, [x_c, y_c]
是输入图像中与坐标 [x_i, y_i]
处的校正图像中的像素值对应的样本的坐标:
correctedImage(x_i, y_i) = sample_at(x_c, y_c, inputImage)
像素坐标在与android.lens.intrinsicCalibration
校准字段相关的归一化坐标系中定义。 既[x_i, y_i]
和[x_c, y_c]
具有(0,0)
在镜片的光学中心[c_x, c_y]
。 x和y坐标的最大值在距离光学中心较远的边缘处归一化为1,因此两个尺寸的范围均为-1 <= x <= 1
。
最后, r
表示从光学中心,径向距离 r^2 = x_i^2 + y_i^2
,其大小是因此不大于 |r| <= sqrt(2)
。
所使用的失真模型是Brown-Conrady模型。
单位 :无 单位系数。
可选 - 在某些设备上该值可能为 null
。
也可以看看:
Key<Integer> LENS_STATE
当前镜头状态。
对于透镜参数android.lens.focalLength
, android.lens.focusDistance
, android.lens.filterDensity
和android.lens.aperture
,请求改变时,它们可能需要几个帧以达到所要求的值。 该状态表示镜头参数的当前状态。
当状态为STATIONARY时,镜头参数不变。 这可能是因为参数都是固定的,或者因为镜头有足够的时间来达到最近请求的值。 如果所有这些镜头参数对于相机设备都不可更改,如下所列:
android.lens.info.minimumFocusDistance
== 0
), which means android.lens.focusDistance
parameter will always be 0.android.lens.info.availableFocalLengths
contains single value), which means the optical zoom is not supported.android.lens.info.availableFilterDensities
contains only 0).android.lens.info.availableApertures
contains single value).那么这个状态将永远是STATIONARY。
当状态为MOVING时,表示至少有一个镜头参数正在改变。
可能的值:
可选 - 在某些设备上,此值可能为 null
。
能力有限 - 在 android.info.supportedHardwareLevel
密钥中报告至少 HARDWARE_LEVEL_LIMITED
设备的所有相机设备上都存在
Key<Integer> NOISE_REDUCTION_MODE
降噪算法的操作模式。
降噪算法试图通过消除捕捉过程中添加的过多噪声来提高图像质量,特别是在黑暗条件下。
OFF表示相机设备不会对RAW和YUV区域应用降噪。
MINIMAL意味着仅启用传感器原始域基本降噪功能,以去除去马赛克或其他处理工件。 对于YUV_REPROCESSING,MINIMAL与OFF相同。 该模式是可选的,可能不被所有设备支持。 应用程序在使用前应检查android.noiseReduction.availableNoiseReductionModes
。
FAST / HIGH_QUALITY都意味着将应用相机设备确定的噪声过滤。 HIGH_QUALITY模式表示相机设备将使用最高质量的噪音过滤算法,即使它会降低捕捉速度。 FAST意味着相机设备在应用噪声过滤时不会降低捕捉速度。 如果MINIMAL列出,FAST可能与MINIMAL相同,或者如果有任何噪声过滤会减慢捕获速率,则FAST与OFF相同。 每个输出流都会应用相似的增强量。
ZERO_SHUTTER_LAG旨在用于在预览期间保持高分辨率图像的连续循环缓冲区并在用户触发时将来自该缓冲区的图像重新处理为最终采集的应用程序。 在此模式下,摄像机设备将降噪功能应用于低分辨率流(低于最大记录分辨率)以最大化预览质量,但不会将降噪应用于高分辨率流,因为如果需要,以后会对其进行重新处理。
对于YUV_REPROCESSING,这些FAST / HIGH_QUALITY模式都意味着相机设备将分别应用FAST / HIGH_QUALITY YUV域降噪。 如果已设置,则相机设备可根据android.reprocess.effectiveExposureFactor
调整降噪参数以获得最佳图像质量。
可能的值:
此设备的可用值:
android.noiseReduction.availableNoiseReductionModes
可选 - 在某些设备上,此值可能为 null
。
完整功能 - 存在于 android.info.supportedHardwareLevel
密钥中报告为 HARDWARE_LEVEL_FULL
设备的所有相机设备上
Key<Float> REPROCESS_EFFECTIVE_EXPOSURE_FACTOR
在发送用于重新处理之前,由应用程序处理应用于原始输出帧的曝光时间增加因子的数量。
这是可选的,并且如果相机设备支持YUV_REPROCESSING功能( android.request.availableCapabilities
包含YUV_REPROCESSING),将会被支持。
对于一些YUV再处理用例,应用程序可以选择过滤原始输出帧,以有效地将噪声降低到与以更长曝光时间捕获的帧相同的水平。 更具体地说,假设以S的灵敏度和T的曝光时间捕获原始捕获的图像,相机设备中的模型是图像中的噪声量将近似于如果原始捕获参数分别是S / effectiveExposureFactor和T * effectiveExposureFactor的曝光时间,而不是S和T的敏感度。 如果捕捉的图像在被发送用于再处理之前由应用程序处理,则应用程序可能已经使用图像处理算法和/或多帧图像融合来减少应用处理的图像(输入图像)中的噪声。 通过使用effectiveExposureFactor控件,应用程序可以向应用程序处理的图像传达相机设备实际噪声级别的改进。 利用这些信息,摄像机设备可以选择合适的降噪和边缘增强参数,以避免将过度的降噪( android.noiseReduction.mode
)和不足的边缘增强( android.edge.mode
)应用于重新处理的帧。
例如,对于多帧图像融合用例,应用程序可以将多个输出帧融合到一起用于再处理的最终帧。 当N图像融合成1幅图像进行再处理时,曝光时间增加因子可以达到N的平方根(基于简单的光子散粒噪声模型)。 相机设备将相应地调整再处理降噪和边缘增强参数以产生最佳质量的图像。
这是相对因素,1.0表示应用程序未以影响其有效曝光时间的方式处理输入缓冲区。
该控制仅对YUV再处理捕捉请求有效。 对于降噪再处理,仅在
时android.noiseReduction.mode
!= OFF
。 同样,对于边缘增强重新处理,它仅在android.noiseReduction.mode
!= OFF
时android.edge.mode
!= OFF
。android.edge.mode
!= OFF
单位 :相对曝光时间增加系数。
有效值的范围:
> = 1.0
可选 - 在某些设备上该值可能为 null
。
能力有限 - 在 android.info.supportedHardwareLevel
密钥中报告至少 HARDWARE_LEVEL_LIMITED
设备的所有相机设备上都存在
Key<Byte> REQUEST_PIPELINE_DEPTH
指定框架从暴露到最终完成结果可用于框架时的流水线阶段数。
根据请求中使用的设置以及配置了哪些流,数据可能会经历较少的处理,并且跳过一些流水线阶段。
详情请参阅 android.request.pipelineMaxDepth
。
有效值的范围:
<= android.request.pipelineMaxDepth
此密钥可在所有设备上使用。
也可以看看:
Key<Rect> SCALER_CROP_REGION
读取该传感器所需的区域以进行捕获。
这个控制可以用来实现数字变焦。
裁剪区域坐标系基于 android.sensor.info.activeArraySize
,其中 (0, 0)
是传感器活动阵列的左上角。
输出流使用这个矩形产生它们的输出,如果需要的话裁剪到一个较小的区域,以保持流的纵横比,然后缩放传感器输入以匹配输出的配置分辨率。
裁剪区域在RAW之后应用于其他色彩空间(例如YUV)转换。 由于原始流(例如RAW16)没有转换阶段,因此它们不可裁剪。 作物区域将被原始流忽略。
对于非原始流,将执行任何附加的每个流的裁剪以最大化流的最终像素区域。
例如,如果裁剪区域设置为4:3宽高比,则4:3流将使用确切的裁剪区域。 16:9溪流将进一步垂直耕种(信箱)。
相反,如果裁剪区域设置为16:9,那么4:3输出将水平裁剪(邮筒),16:9码流将完全匹配。 这些额外的作物将集中在作物区域内。
裁剪区域的宽度和高度不能分别设置为小于 floor( activeArraySize.width /
和 android.scaler.availableMaxDigitalZoom
)floor( activeArraySize.height /
。android.scaler.availableMaxDigitalZoom
)
相机设备可以调整裁剪区域以考虑到舍入和其他硬件要求; 所使用的最终裁剪区域将包含在输出捕捉结果中。
单位 :相对于 android.sensor.info.activeArraySize
像素坐标
此密钥可在所有设备上使用。
Key<float[]> SENSOR_DYNAMIC_BLACK_LEVEL
每个彩色滤光片排列(CFA)镶嵌通道的每帧动态黑色电平偏移。
相机传感器的黑色水平可能因不同的拍摄设置而发生显着变化(例如android.sensor.sensitivity
)。 由android.sensor.blackLevelPattern
报告的固定黑电平可能太不准确,不能以每帧为单位表示实际值。 摄像机设备内部流水线依靠可靠的黑电平值来适当地处理原始图像。 为了获得最佳图像质量,相机设备可以选择基于光学屏蔽黑色区域( android.sensor.opticalBlackRegions
)或其内部模型来估计每帧黑色电平值。
此键报告摄像机设备估计摄像机传感器中每个CFA镶嵌通道的每帧零光源值。 android.sensor.blackLevelPattern
只能表示实际黑电平值的粗略近似值。 该值是相机设备内部图像处理流水线中使用的黑色水平,通常比固定黑色水平值更精确。 但是,由于它们是相机设备的估计值,因此它们可能不如从android.sensor.opticalBlackRegions
报告的光学黑色像素计算的黑色电平值那么精确。
这些值的顺序与为CFA布局键列出的通道的顺序相同(请参阅 android.sensor.info.colorFilterArrangement
),即给出的第n个值与CFA中列出的第n个颜色通道的黑色电平偏移相对应。
如果 android.sensor.opticalBlackRegions
可用或者相机设备通过 getAvailableCaptureResultKeys()
此密钥,此密钥将可用。
有效值的范围:
> = 0。
可选 - 在某些设备上,此值可能为 null
。
Key<Integer> SENSOR_DYNAMIC_WHITE_LEVEL
传感器为此帧输出的最大原始值。
由于android.sensor.blackLevelPattern
可能会因不同的拍摄设置(例如android.sensor.sensitivity
)而发生变化,因此白色电平会相应改变。 此键类似于android.sensor.info.whiteLevel
,但指定每个帧的摄像机设备估计的白色电平。
如果 android.sensor.opticalBlackRegions
可用或相机设备通过 getAvailableCaptureRequestKeys()
此密钥,此密钥将可用。
有效值的范围:
> = 0
可选 - 在某些设备上,此值可能为 null
。
Key<Long> SENSOR_EXPOSURE_TIME
持续每个像素曝光。
如果传感器无法公开此确切的持续时间,则会缩短暴露于最近可能值的持续时间(而不是长时间暴露)。 最终曝光时间将在输出捕捉结果中可用。
此控件仅在android.control.aeMode
或android.control.mode
设置为OFF时有效; 否则自动曝光算法将覆盖此值。
单位 :纳秒
有效值的范围:
android.sensor.info.exposureTimeRange
可选 - 在某些设备上,此值可能为 null
。
完整功能 - 存在于 android.info.supportedHardwareLevel
密钥中报告为 HARDWARE_LEVEL_FULL
设备的所有相机设备上
Key<Long> SENSOR_FRAME_DURATION
从帧曝光开始到下一帧曝光开始的持续时间。
相机子系统可以支持的最大帧速率是许多因素的函数:
由于这些因素在不同的ISP和传感器之间可能会有很大的差异,因此摄像机抽象试图用尽可能简单的模型来表示带宽限制。
所呈现的模型具有以下特征:
考虑到上述模型,应用程序的必要信息通过android.scaler.streamConfigurationMap
字段使用getOutputMinFrameDuration(int, Size)
。 这些用于确定给定流配置可能的最大帧速率/最小帧持续时间。
具体来说,应用程序可以使用以下规则来确定它可以从相机设备请求的最小帧持续时间:
S
.S
, by looking it up in android.scaler.streamConfigurationMap
using getOutputMinFrameDuration(int, Size)
(with its respective size/format). Let this set of frame durations be called F
.R
, the minimum frame duration allowed for R
is the maximum out of all values in F
. Let the streams used in R
be called S_r
.如果S_r
中的流没有任何停滞时间(使用其相应的大小/格式在getOutputStallDuration(int, Size)
列出),则F
的帧持续时间决定应用程序将使用R
作为重复请求时将获得的稳态帧速率。 让这种特殊的请求被称为Rsimple
。
一个重复请求 Rsimple
可以通过单个捕获新请求 Rstall
(其具有至少一个具有非零延迟时间的使用中的流) 偶尔交错,并且如果 Rstall
具有相同的最小帧持续时间,则这不会导致帧如果以前的 Rstall
所有缓冲区已经交付, Rstall
造成速率损失。
有关拖延的更多详细信息,请参阅 getOutputStallDuration(int, Size)
。
此控件仅在android.control.aeMode
或android.control.mode
设置为OFF时有效; 否则自动曝光算法将覆盖此值。
单位 :纳秒
有效值的范围:
见android.sensor.info.maxFrameDuration
, android.scaler.streamConfigurationMap
。 持续时间限制为max(duration, exposureTime + overhead)
。
可选 - 在某些设备上该值可能为 null
。
完整功能 - 存在于 android.info.supportedHardwareLevel
密钥中报告为 HARDWARE_LEVEL_FULL
设备的所有相机设备上
Key<Float> SENSOR_GREEN_SPLIT
拜耳绿色渠道之间最差的分歧。
此值是传感器彩色滤光片阵列中红色和蓝色行中拜耳绿色通道之间最差情况分割的估计值。
绿色分割计算如下:
R = max((mean_Gr + 1)/(mean_Gb + 1), (mean_Gb + 1)/(mean_Gr + 1))
比率R是针对此属性报告的绿色分裂散度,其表示绿色通道在镶嵌图案中的差异程度。 此值通常用于确定去马赛克时对绿色镶嵌通道的处理情况。
绿色分割值可粗略地解释如下:
有效值的范围:
> = 0
可选 - 在某些设备上,此值可能为 null
。
Key<Rational[]> SENSOR_NEUTRAL_COLOR_POINT
捕捉时本机传感器颜色空间中的相机中性色估计值。
该值给出在本机传感器颜色空间中编码为RGB值的中性色点。 中性色点指示当前估计的场景照明的白点。 在处理原始传感器数据时,它可用于在所提供的颜色变换之间进行插值。
值的顺序是R,G,B; 其中R在最低指数。
可选 - 在某些设备上,此值可能为 null
。
Key<Pair[]<Double, Double>> SENSOR_NOISE_PROFILE
每个CFA镶嵌通道的噪声模型系数。
该键包含对应于传感器放大(S)和传感器读出噪声(O)的每个CFA通道的两个噪声模型系数。 这些按每个通道的系数对以与为CFA布局键列出的通道相同的顺序给出(请参阅android.sensor.info.colorFilterArrangement
)。 这表示为Pair <Double,Double>的阵列,其中索引n处的Pair的第一个成员是S系数,第二个成员是CFA中第n个颜色通道的O系数。
这些系数用于双参数噪声模型,用于描述每个CFA通道图像中存在的噪声量。 这里使用的噪声模型是:
N(x)= sqrt(Sx + O)
其中x表示归一化到范围[0,1]的CFA信道的记录信号,并且S和O是该信道的噪声模型系数。
噪声模型的更详细的描述可以在NoiseProfile标签的Adobe DNG规范中找到。
可选 - 在某些设备上,此值可能为 null
。
Key<Long> SENSOR_ROLLING_SHUTTER_SKEW
第一行曝光开始和最后一行曝光开始之间的持续时间。
这是第一行和最后一行曝光开始时间之间的曝光时间偏差。 第一行和最后一行是android.sensor.info.activeArraySize
的第一行和最后一行。
对于使用卷帘的典型相机传感器,这也相当于帧读取时间。
单位 :纳秒
有效值的范围:
> = 0和< getOutputMinFrameDuration(int, Size)
。
可选 - 在某些设备上,此值可能为 null
。
能力有限 - 在 android.info.supportedHardwareLevel
密钥中报告至少 HARDWARE_LEVEL_LIMITED
设备的所有摄像头设备上都存在
Key<Integer> SENSOR_SENSITIVITY
处理前应用于传感器数据的增益量。
灵敏度是ISO 12232:2006中定义的标准ISO灵敏度值。
灵敏度必须在 android.sensor.info.sensitivityRange
之内,如果小于 android.sensor.maxAnalogSensitivity
,相机设备保证仅使用模拟放大来应用增益。
如果相机设备无法应用所请求的确切灵敏度,则会将增益降至最接近的支持值。 最终使用的灵敏度将在输出捕捉结果中可用。
此控件仅在android.control.aeMode
或android.control.mode
设置为OFF时有效; 否则自动曝光算法将覆盖此值。
单位 :ISO算术单位
有效值的范围:
android.sensor.info.sensitivityRange
可选 - 在某些设备上该值可能为 null
。
完整功能 - 存在于 android.info.supportedHardwareLevel
密钥中报告为 HARDWARE_LEVEL_FULL
设备的所有相机设备上
Key<int[]> SENSOR_TEST_PATTERN_DATA
像素 [R, G_even, G_odd, B]
时供给测试图案 android.sensor.testPatternMode
是SOLID_COLOR。
每个颜色通道都被视为一个无符号的32位整数。 然后摄像机设备使用与Bayer原始传感器输出中有多少位对应的最高有效X位。
例如,具有RAW10 Bayer输出的传感器将使用来自每个颜色通道的10个最高有效位。
可选 - 在某些设备上,此值可能为 null
。
也可以看看:
Key<Integer> SENSOR_TEST_PATTERN_MODE
启用后,传感器将发送测试图案,而不是从相机进行实际曝光。
启用测试模式时,android.sensor。*指定的所有手动传感器控件都将被忽略。 所有其他控件应该可以正常工作。
例如,如果启用了手动闪光灯,则仍会发生闪光灯闪光(并且测试图案保持不变,因为闪光灯实际上不会影响它)。
默认为OFF。
可能的值:
此设备的可用值:
android.sensor.availableTestPatternModes
可选 - 在某些设备上,此值可能为 null
。
Key<Long> SENSOR_TIMESTAMP
图像传感器有源阵列第一行曝光开始时间,以纳秒为单位。
所有图像缓冲区中都包含时间戳,这些缓冲区是为同一个捕获而生成的,并且在所有输出中都相同。
当android.sensor.info.timestampSource
==
UNKNOWN时,时间戳测量自未指定起点以来的时间,并且是单调递增的。 可以将它们与来自同一相机设备的其他拍摄时间戳进行比较,但不能保证与任何其他时间源相比。
当 android.sensor.info.timestampSource
==
REALTIME时,时间戳在与 elapsedRealtimeNanos()
相同的时基中测量时间,并且它们可以与其他使用该基的子系统的其他时间戳进行比较。
对于重新处理,时间戳将与输入图像的曝光开始相匹配,即 the timestamp
中用于创建重新处理捕获请求的the timestamp。
单位 :纳秒
有效值的范围:
> 0
此密钥可在所有设备上使用。
也可以看看:
Key<Integer> SHADING_MODE
应用于图像数据的镜头阴影校正质量。
当设置为关闭模式时,相机设备将不会应用镜头阴影校正,如果
将提供身份镜头阴影地图数据。 例如,对于尺寸为android.statistics.lensShadingMapMode
== ON[ 4, 3 ]
镜头着色贴图,此情况下的输出android.statistics.lensShadingCorrectionMap
将为如下所示的标识贴图:
[ 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 ]
设置为其他模式时,相机设备将应用镜头阴影校正。 应用程序可以通过将android.statistics.lensShadingMapMode
设置为ON来请求镜头阴影地图数据,然后相机设备将在android.statistics.lensShadingCorrectionMap
提供镜头阴影地图数据; 返回的阴影贴图数据将是相机设备为此捕获请求应用的数据。
阴影贴图数据可能取决于自动曝光(AE)和AWB统计数据,因此地图数据的可靠性可能受到AE和AWB算法的影响。 当AE和AWB处于自动模式( android.control.aeMode
!=
OFF和android.control.awbMode
!=
OFF)时,为获得最佳效果,建议在使用返回的阴影贴图数据之前,应用程序等待AE和AWB收敛。
可能的值:
此设备的可用值:
android.shading.availableModes
可选 - 在某些设备上该值可能为 null
。
完整功能 - 存在于 android.info.supportedHardwareLevel
密钥中报告为 HARDWARE_LEVEL_FULL
设备的所有相机设备上
Key<Face[]> STATISTICS_FACES
在此捕获中通过相机脸部检测检测到的脸部列表。
仅在 android.statistics.faceDetectMode
!=
OFF时可用。
此密钥可在所有设备上使用。
也可以看看:
Key<Integer> STATISTICS_FACE_DETECT_MODE
面部检测器单元的操作模式。
是否启用人脸检测,以及是否只输出基本字段或全部字段。
可能的值:
此设备的可用值:
android.statistics.info.availableFaceDetectModes
此密钥可在所有设备上使用。
Key<Point[]> STATISTICS_HOT_PIXEL_MAP
传感器上热/缺陷像素的 (x, y)
坐标列表。
坐标(x, y)
必须分别位于(0, 0)
和(width - 1, height - 1)
(含)之间,它们分别是像素阵列的左上角和右下角。 宽度和高度尺寸在android.sensor.info.pixelArraySize
中给出。 这可能包括位于android.sensor.info.activeArraySize
给出的有效数组边界之外的热像素。
有效值的范围:
n <=传感器上的像素数量。 (x, y)
坐标必须以android.sensor.info.pixelArraySize
为界。
可选 - 在某些设备上,此值可能为 null
。
Key<Boolean> STATISTICS_HOT_PIXEL_MAP_MODE
生成热像素图的操作模式。
如果设置为true
,则会在android.statistics.hotPixelMap
返回热像素映射。 如果设置为false
,则不会返回热像素图。
有效值的范围:
android.statistics.info.availableHotPixelMapModes
可选 - 在某些设备上该值可能为 null
。
Key<LensShadingMap> STATISTICS_LENS_SHADING_CORRECTION_MAP
着色图是一个低分辨率浮点图,列出了用于校正每个拜耳颜色通道的渐晕的系数。
此处提供的地图与摄像机设备用于校正输出非RAW图像的颜色阴影和晕影的地图相同。
当没有对RAW输出图像应用镜头阴影校正( android.sensor.info.lensShadingApplied
==
false)时,此图是完整的镜头阴影校正图; 如果对RAW输出图像应用了某些镜头阴影校正( android.sensor.info.lensShadingApplied
==
true),则此图会报告需要应用的其余镜头阴影校正图,以获取与非RAW格式的相机设备输出相匹配的阴影校正图像。
对于完整的阴影校正图,图像中阴影最少的部分的增益因子为1; 所有其他部分的收益均高于1。
当 android.colorCorrection.mode
= TRANSFORM_MATRIX时,地图将考虑colorCorrection设置。
阴影贴图适用于整个活动像素阵列,并且不受请求中指定的裁剪区域的影响。 每个阴影贴图条目都是传感器上特定像素上的阴影补偿贴图的值。 具体来说,使用(N×M)分辨率阴影图和有效像素数组大小(W×H),阴影映射项(x,y)φ(0 ... N-1,0 ... M-1 )是四个颜色通道在像素(((W-1)/(N-1))* x,((H-1)/(M-1))* y处的着色图的值。 该图被假定为在采样点之间双线性插值。
通道顺序是[R,Geven,Godd,B],其中Geven是拜耳模式偶数行的绿色通道,Godd是奇数行。 着色图以完全交错的格式存储。
阴影贴图通常具有30-40行和列的顺序,并且将小于64x64。
作为一个例子,给定一个非常小的地图定义为:
width,height = [ 4, 3 ]
values =
[ 1.3, 1.2, 1.15, 1.2, 1.2, 1.2, 1.15, 1.2,
1.1, 1.2, 1.2, 1.2, 1.3, 1.2, 1.3, 1.3,
1.2, 1.2, 1.25, 1.1, 1.1, 1.1, 1.1, 1.0,
1.0, 1.0, 1.0, 1.0, 1.2, 1.3, 1.25, 1.2,
1.3, 1.2, 1.2, 1.3, 1.2, 1.15, 1.1, 1.2,
1.2, 1.1, 1.0, 1.2, 1.3, 1.15, 1.2, 1.3 ]
每个通道的低分辨率缩放地图图像(使用最近邻插值显示):
仅作为可视化,反转全色地图以恢复传感器捕获的灰墙图像(使用双三次插值以获得视觉质量),可以:
有效值的范围:
每个增益因子> = 1
可选 - 在某些设备上,此值可能为 null
。
完整功能 - 在 android.info.supportedHardwareLevel
密钥中报告为 HARDWARE_LEVEL_FULL
设备的所有相机设备上存在
Key<Integer> STATISTICS_LENS_SHADING_MAP_MODE
相机设备是否将在输出结果元数据中输出镜头阴影贴图。
设置为ON时,将在输出结果元数据中提供android.statistics.lensShadingMap。
ON始终支持具有RAW功能的设备。
可能的值:
此设备的可用值:
android.statistics.info.availableLensShadingMapModes
可选 - 在某些设备上该值可能为 null
。
完整功能 - 在 android.info.supportedHardwareLevel
密钥中报告为 HARDWARE_LEVEL_FULL
设备的所有相机设备上都存在
Key<Integer> STATISTICS_SCENE_FLICKER
摄像机设备估计场景照明照明频率。
许多光源,如大多数荧光灯,闪烁的速度取决于当地的公用电力标准。 这种闪烁必须通过自动曝光程序来解决,以避免捕获图像中的伪像。 相机设备使用此条目来告诉应用程序场景光源频率是什么。
当启用手动曝光控制(
或android.control.aeMode
== OFF
)时, android.control.mode
== OFFandroid.control.aeAntibandingMode
不会执行抗划分,并且应用程序可以通过查看此元数据字段来确保选择不会导致分段问题的曝光时间。 详情请参阅android.control.aeAntibandingMode
。
如果没有出现闪烁照明,则报告NONE。
可能的值:
可选 - 在某些设备上,此值可能为 null
。
完整功能 - 存在于 android.info.supportedHardwareLevel
密钥中报告为 HARDWARE_LEVEL_FULL
设备的所有相机设备上
Key<TonemapCurve> TONEMAP_CURVE
当 android.tonemap.mode
为CONTRAST_CURVE时使用的色调映射/对比度/伽马曲线。
tonemapCurve分别由红色,绿色和蓝色通道的三条曲线组成。 以下示例使用红色通道作为示例。 相同的逻辑适用于绿色和蓝色通道。 每个通道的曲线由一系列控制点定义:
curveRed =
[ P0(in, out), P1(in, out), P2(in, out), P3(in, out), ..., PN(in, out) ]
2 <= N <= android.tonemap.maxCurvePoints
这些按顺序增加Pin
; 总是保证输入值0.0和1.0包含在列表中以定义完整的映射。 对于控制点之间的输入值,摄像机设备必须在控制点之间进行线性插值。
每条曲线可以有独立的点数,并且点数可以小于最大值(也就是说,请求不必始终提供点数等于 android.tonemap.maxCurvePoints
的曲线)。
一些示例及其相应的图形映射; 这些只是指定了红色通道,并且为了简明起见,精度限制为4位数。
线性映射:
curveRed = [ (0, 0), (1.0, 1.0) ]
反转映射:
curveRed = [ (0, 1.0), (1.0, 0) ]
Gamma 1 / 2.2映射,16个控制点:
curveRed = [
(0.0000, 0.0000), (0.0667, 0.2920), (0.1333, 0.4002), (0.2000, 0.4812),
(0.2667, 0.5484), (0.3333, 0.6069), (0.4000, 0.6594), (0.4667, 0.7072),
(0.5333, 0.7515), (0.6000, 0.7928), (0.6667, 0.8317), (0.7333, 0.8685),
(0.8000, 0.9035), (0.8667, 0.9370), (0.9333, 0.9691), (1.0000, 1.0000) ]
标准sRGB伽玛映射,根据IEC 61966-2-1:1999,有16个控制点:
curveRed = [
(0.0000, 0.0000), (0.0667, 0.2864), (0.1333, 0.4007), (0.2000, 0.4845),
(0.2667, 0.5532), (0.3333, 0.6125), (0.4000, 0.6652), (0.4667, 0.7130),
(0.5333, 0.7569), (0.6000, 0.7977), (0.6667, 0.8360), (0.7333, 0.8721),
(0.8000, 0.9063), (0.8667, 0.9389), (0.9333, 0.9701), (1.0000, 1.0000) ]
可选 - 在某些设备上,此值可能为 null
。
完整功能 - 在 android.info.supportedHardwareLevel
密钥中报告为 HARDWARE_LEVEL_FULL
设备的所有相机设备上存在
Key<Float> TONEMAP_GAMMA
android.tonemap.mode
为GAMMA_VALUE时使用的 android.tonemap.mode
映射曲线
色调映射曲线将被定义为以下公式:* OUT = pow(IN,1.0 / gamma)其中IN和OUT是缩放到范围[0.0,1.0]的输入像素值,pow是功率函数,而gamma是伽玛值由此键指定。
相同的曲线将应用于所有颜色通道。 相机设备可以将输入伽马值剪切到其支持的范围。 实际应用值将在捕获结果中返回。
伽玛值的有效范围在不同设备上有所不同,但保证[1.0,5.0]内的值不被剪切。
可选 - 在某些设备上此值可能为 null
。
也可以看看:
Key<Integer> TONEMAP_MODE
高级全局对比度/伽马/色调映射控制。
当通过将android.tonemap.mode
设置为CONTRAST_CURVE切换到应用程序定义的对比曲线时,将使用一组(in, out)
点为每个通道定义曲线,该点指定从输入高位深度像素值到输出低位深度值的映射。 由于输入和输出的实际像素范围可能会根据摄像机流水线而发生变化,所以这些值由归一化的浮点数指定。
当 android.tonemap.mode
为CONTRAST_CURVE时,更复杂的颜色映射操作(如3D颜色查找表,选择性色度增强或其他非线性颜色变换)将被禁用。
当使用FAST或HIGH_QUALITY时,相机设备将在android.tonemap.curve
发出自己的色调映射曲线。 这些值始终可用,并尽可能接近实际使用的非线性/非全局变换。
如果使用CONTRAST_CURVE发送请求并且摄像机设备提供的曲线为FAST或HIGH_QUALITY,则图像的色调图将大致相同。
可能的值:
此设备的可用值:
android.tonemap.availableToneMapModes
可选 - 在某些设备上,此值可能为 null
。
完整功能 - 存在于 android.info.supportedHardwareLevel
密钥中报告为 HARDWARE_LEVEL_FULL
设备的所有相机设备上
Key<Integer> TONEMAP_PRESET_CURVE
android.tonemap.mode
为PRESET_CURVE时使用的 android.tonemap.mode
映射曲线
色调映射曲线将由指定的标准定义。
sRGB(接近16个控制点):
建议 709(近似于16个控制点):
请注意,上图显示了预设曲线的16个控制点近似值。 相机设备可以对曲线应用不同的近似值。
可能的值:
可选 - 在某些设备上,此值可能为 null
。
T get (Key<T> key)
获取捕获结果字段值。
字段定义可以在 CaptureResult
找到。
多次查询同一个键的值将返回一个等于先前查询值的值。
Parameters | |
---|---|
key |
Key : The result field to read. |
Returns | |
---|---|
T |
The value of that key, or null if the field is not set. |
Throws | |
---|---|
IllegalArgumentException |
if the key was not valid |
long getFrameNumber ()
获取与此结果关联的帧号。
无论何时处理请求,无论失败或成功,它都会获得一个指定给其未来结果/失败的唯一帧号。
对于相同类型的请求(从相机设备捕获或重新处理),此值从0开始单调递增,对于每个新结果或故障,范围是CameraDevice
的寿命。 在不同类型的请求之间,帧号可能不会单调递增。 例如,较新的重新处理结果的帧号可能小于捕获来自摄像机装置的新图像的较旧结果的帧号,但较新的重新处理结果的帧号永远不会小于较旧的重新处理结果。
Returns | |
---|---|
long |
The frame number |
List<Key<?>> getKeys ()
返回此映射中包含的键的列表。
返回的列表是不可修改的,所以任何修改它的尝试都会抛出 UnsupportedOperationException
。
通过#get
此列表中的密钥检索的所有值都保证为非null
。 每个键只在列表中列出一次。 密钥的顺序是未定义的。
Returns | |
---|---|
List<Key<?>> |
List of the keys contained in this map. |
CaptureRequest getRequest ()
获取与此结果关联的请求。
只要有请求已经被完全或部分地捕获,与 onCaptureCompleted(CameraCaptureSession, CaptureRequest, TotalCaptureResult)
或者 onCaptureProgressed(CameraCaptureSession, CaptureRequest, CaptureResult)
,该 result
的 getRequest()
将返回 request
。
例如,
cameraDevice.capture(someRequest, new CaptureCallback() {
@Override
void onCaptureCompleted(CaptureRequest myRequest, CaptureResult myResult) {
assert(myResult.getRequest.equals(myRequest) == true);
}
}, null);
Returns | |
---|---|
CaptureRequest |
The request associated with this result. Never null . |
int getSequenceId ()
由 capture(CaptureRequest, CameraCaptureSession.CaptureCallback, Handler)
系列函数返回的此故障的序列号。
序列ID是一个从0开始的唯一单调增加的值,每次向CameraDevice提交一组新请求时递增。
Returns | |
---|---|
int |
int The ID for the sequence of requests that this capture result is a part of |