OC之AVCaptureDevice续

OC之AVCaptureDevice

11、管理感光度 ISO

11.1、什么是感光度 ISO

在数码相机中 ISO 表示感光元件的感光的速度。感光度 ISO 数值越高就说明该感光元器件的感光能力越强,对曝光量的要求就越少。一般情况下,ISO 值越低,相片的质量越高,相片的细节表现的得越细腻;ISO 值越高,相片的亮度就越高,而相片的质量会随着 ISO值的升高而降低,噪点会变得越来越严重,但高 ISO 值可以弥补光线的不足。

11.2、获取AVCaptureDevice的感光度ISO
@property(nonatomic, readonly) float ISO;

当前曝光的感光度 ISO 值。此属性通过应用于信号的增益值返回传感器对光的灵敏度。

仅支持minISOmaxISO之间的ISO值;值越高,图像越嘈杂。
无论曝光模式如何,都可以随时读取属性值,但只能使用-setExposureModeCustomWithDuration:ISO:completionHandler:方法进行设置。

常量const float AVCaptureISOCurrent;表示调用者不希望为 ISO 属性指定值,而是应将其设置为其当前值。

12、曝光设置

12.1、关于相机的一些概念
12.1.1、光圈

光圈是一个用来控制光线透过镜头,进入机身内感光面的光量的装置;它通常是在镜头内。
表达光圈大小我们是用F值:光圈F值 = 镜头的焦距/镜头口径的直径;从以上的公式可知要达到相同的光圈F值,长焦距镜头的口径要比短焦距镜头的口径大。当光圈物理孔径不变时,镜头中心与感光器件距离愈远,F数愈大,反之,镜头中心与感光器件距离愈近,通过光孔到达感光器件的光密度愈高,F数就愈小。
完整的光圈值系列如下: F1, F1.4, F2, F2.8, F4, F5.6, F8, F11, F16, F22, F32, F44, F64。
光圈F值愈小,在同一单位时间内的进光量便愈多,而且上一级的进光量刚是下一级的一倍,例如光圈从F8调整到F5.6,进光量便多一倍,我们也说光圈开大了一级。

12.1.2、快门

快门是照相机用来控制感光片有效曝光时间的装置。是照相机的一个重要组成部分,它的结构、形式及功能是衡量照相机档次的一个重要因素。一般而言快门的时间范围越大越好。秒数低适合拍运动中的物体,某款相机就强调快门最快能到1/16000秒,可轻松抓住急速移动的目标。不过当你要拍的是夜晚的车水马龙,快门时间就要拉长,常见照片中丝绢般的水流效果也要用慢速快门才能拍出来。

快门速度单位是“秒”。专业135相机的最高快门速度达到1/16000秒。常见的快门速度有:1 1/2 1/4 1/8 1/15 1/30 1/60 1/125 1/250 1/500 1/1000 1/2000等。相邻两级的快门速度的曝光量相差一倍,我们常说相差一级。如1/60秒比1/125秒的曝光量多一倍,即1/60秒比1/125秒速度慢一级或称低一级。

12.1.3、曝光

曝光:是指当你按相机快门按钮的时候,快门(镜头外的世界和机身内部感光元件之间的门)会打开,过一段时间再关上;就在这一小段时间之内,光线会从镜头钻进来,照在长方形的感光元件上边,感光元件上几千万的感光点就会记录照到它上边的光的色彩;于是,就得到一张照片了。

曝光就是 光圈、快门 和 感光度ISO 的组合。
曝光值 是由快门速度值和光圈值组合表示摄影镜头通光能力的一个数值。

可以这样认为:光圈值大小其实就是那个小圆窗户开多大;快门(速度)就是窗户打开多久。
假设窗户只打开1/4,时间为4秒钟可以正确曝光的话,很显然,窗户打开一半,时间2秒钟也能让底片正确曝光,因为 1/44 = 1/22 = 1,进光量都是一样多。同样的,如果窗户全开,曝光时间就只需要1秒了。
假若一个镜头光圈全开为 F4,用摄影行话来说,光圈 F4 快门速度 1 秒为正确曝光值,那 F5.6 和 2 秒以及 F8 和 4 秒也同样能得到准确曝光的图片。

一张正确曝光的图片可以有N种不同的光圈和快门速度组合。

12.1.4、曝光的兴趣点

兴趣点,又被称为点特征,指的是图像中具有特殊性质的像素点,是图像的重要特征。它具有旋转不变性和不随光照条件变化的优点。这类点被大量用于解决物体识别,图像匹配,视觉跟踪,三维重建等问题。

12.2、曝光的一些属性
属性 类型 描述
exposureDuration CMTime 一个只读属性,表示曝光时间;仅支持minExposureDurationmaxExposureDuration之间的曝光持续时间值。无论曝光模式如何,都可以随时读取曝光时间。
exposureTargetOffset float 一个只读属性,表示当前场景的计量曝光水平与目标曝光值之间的差异;以EV为单位。
exposureTargetBias float 一个只读属性,以EV单位应用于目标暴露值的偏差。当曝光模式为AVCaptureExposureModeAutoExposeAVCaptureExposureModeLocked时,偏差将影响测光(exposureTargetOffset)和实际曝光等级:曝光时间exposureDuration和感光度ISO。 当曝光模式为AVCaptureExposureModeCustom时,它只会影响测光。
minExposureTargetBias float 一个只读属性,EV单位支持的最小曝光偏差。
maxExposureTargetBias float 一个只读属性,以EV为单位的最大支持曝光偏差。
activeMaxExposureDuration CMTime 自动曝光算法中定义的最长曝光持续时间(以秒为单位)。
adjustingExposure BOOL 一个只读属性,指示设备当前是否正在调整其曝光设置。
exposureMode AVCaptureExposureMode 设备的曝光模式。在更改此属性的值之前,必须调用-lockForConfiguration:以锁定AVCaptureDevice;否则,设置此属性的值会引发异常。完成配置设备后,请调用-unlockForConfiguration以释放锁定并允许其他设备配置设置。
exposurePointOfInterestSupported BOOL 一个只读属性,指示设备是否支持曝光的兴趣点。
exposurePointOfInterest CGPoint 曝光的兴趣点。
12.2.1、关于activeMaxExposureDuration属性

AVCaptureSession设置sessionPreset或在AVCaptureDevice上选择其他activeFormat时,可以查询或观察对activeMaxExposureDuration的更改。
可以随时覆盖此属性,以及activeFormat属性的minExposureDurationmaxExposureDuration范围中的任何值。会话运行时会立即反映更改,而不会重建图形。
还可以将属性设置为kCMTimeInvalid以返回默认值。例如,如果想要比帧速率更短的曝光,则可以覆盖自动曝光算法的最大曝光持续时间。 如果需要通过暴露1/40秒但仍然每秒捕获30帧来冻结运动,则需要手动覆盖。

12.2.2、关于曝光模式AVCaptureExposureMode

AVCaptureExposureMode 用于指定AVCaptureDevice曝光模式的枚举。

枚举值 描述
AVCaptureExposureModeLocked 曝光设置已锁定。
AVCaptureExposureModeAutoExpose 设备会自动调整曝光一次,然后将曝光模式更改为AVCaptureExposureModeLocked
AVCaptureExposureModeContinuousAutoExposure 设备会持续监控曝光量并在必要时自动曝光。
AVCaptureExposureModeCustom 设备应仅根据用户提供的感光度 ISO 和曝光时间exposureDuration属性值调整曝光。

我们可以利用下述方法获得设备是否支持给定的曝光模式:

- (BOOL)isExposureModeSupported:(AVCaptureExposureMode)exposureMode;
12.2.3、关于曝光的兴趣点exposurePointOfInterest

为此属性设置值不会启动曝光重新平衡操作。要使用兴趣点设置曝光,首先设置此属性的值,然后将exposureMode属性设置为AVCaptureExposureModeAutoExposeAVCaptureExposureModeContinuousAutoExposure

此属性的CGPoint值使用坐标系,其中{0,0}是图片区域的左上角,{1,1}是右下角。无论实际的设备方向如何,此坐标系始终相对于横向设备方向,主页按钮位于右侧。可以使用AVCaptureVideoPreviewLayer方法在此坐标系和视图坐标之间进行转换。

在更改此属性的值之前,必须调用-lockForConfiguration:以锁定AVCaptureDevice;否则,设置此属性的值会引发异常。完成配置设备后,请调用-unlockForConfiguration以释放锁定并允许其他设备配置设置。

12.3、设置曝光时间和感光度

我们在上文已经了解了如何获取曝光时间和感光度的属性,但是它们都是只读属性,我们能且唯一可用的就是使用下述方法修改曝光时间与感光度

- (void)setExposureModeCustomWithDuration:(CMTime)duration ISO:(float)ISO completionHandler:(void (^)(CMTime syncTime))handler;

该方法将曝光时间和感光度 ISO 锁定在指定值;有三个参数:

  • 参数CMTime duration :表示曝光时间。表示当前曝光时间的特殊常量AVCaptureExposureDurationCurrent 将曝光时间锁定为其当前值,即禁用自动曝光。注意,对此属性的更改可能会导致activeVideoMinFrameDurationactiveVideoMaxFrameDuration发生更改。

  • 参数float ISO : 表示感光度。常量AVCaptureISOCurrent的值可用于指示调用者不希望为ISO指定值,而是应将其设置为其当前值。

  • 参数handler :当曝光时间exposureDuration和感光度ISO都已设置为指定值且曝光模式exposureModeAVCaptureExposureModeCustom时的回调。该块接收与已应用所有设置的第一个缓冲区匹配的时间戳。 时间戳与设备时钟同步,因此必须先转换为主时钟,然后再与通过AVCaptureVideoDataOutput实例传送的缓冲区的时间戳进行比较。如果不需要知道操作的完成,则为处理程序参数传递nil。

该方法是设置曝光时间 exposureDuration 和感光度 ISO 的唯一方法。
如果将曝光时间exposureDuration或感光度ISO设置为不支持的级别,则此方法将抛出NSInvalidArgumentException异常。
如果在没有调用-lockForConfiguration:锁定 AVCaptureDevice的情况下调用此方法,则抛出NSGenericException异常。

12.4、设置曝光偏差
- (void)setExposureTargetBias:(float)bias completionHandler:(void (^)(CMTime syncTime))handler;

该方法用于设置要应用于目标曝光值的偏差。有两个参数:

  • 参数bias: 要应用于曝光目标值的偏差。表示当前曝光偏差值的特殊常量AVCaptureExposureTargetBiasCurrent将曝光偏差锁定为其当前值,即禁用自动曝光。
  • 参数handler: 将exposureTargetBias属性设置为指定值时的回调。该块接收时间戳,该时间戳与已应用该设置的第一缓冲区的时间戳匹配。 时间戳与设备时钟同步,因此必须先转换为主时钟,然后再与通过AVCaptureVideoDataOutput实例传送的缓冲区的时间戳进行比较。如果不需要知道操作的完成,则客户端可以为处理程序参数传递nil。

此方法是设置exposureTargetBias属性的唯一方法。
如果exposureTargetBias设置为不支持的级别,则此方法抛出NSInvalidArgumentException异常。
如果在没有调用-lockForConfiguration:锁定 AVCaptureDevice的情况下调用此方法,则抛出NSGenericException异常。

13、管理低亮度设置

属性 类型 描述
lowLightBoostSupported BOOL 指示AVCaptureDevice是否支持在低光照条件下提升图像的布尔值。只有在此属性为YES时,才能设置AVCaptureDevice对象的automaticEnablesLowLightBoostWhenAvailable属性。
lowLightBoostEnabled BOOL 指示是否启用AVCaptureDevice的低光增强功能的布尔值。当该属性为“是”时,AVCaptureDevice已切换到特殊模式,在该模式中可以在图像中感知到更多光。
automaticallyEnablesLowLightBoostWhenAvailable BOOL 指示AVCaptureDevice是否应在必要时自动切换到低光增强模式的布尔值;默认值为NO。

lowLightBoostSupported为YES的AVCaptureDevice对象上,可以使用特殊的低光增强模式来提高图像质量。当automaticEnablesLowLightBoostWhenAvailable属性设置为YES时,AVCaptureDevice会在低光照条件下自行切换到特殊的升压模式。当场景变得充足时,设备切换回正常操作。支持此功能的AVCaptureDevice可能仅针对某些源格式或分辨率使用升压模式。

如果lowLightBoostSupported为NO,则设置automaticEnablesLowLightBoostWhenAvailable会抛出NSInvalidArgumentException

如果在没有调用-lockForConfiguration:锁定 AVCaptureDevice的情况下设置automaticEnablesLowLightBoostWhenAvailable,则抛出NSGenericException异常。

客户端可以使用键值观察来观察对lowLightBoostEnabled属性的更改,以了解升压模式何时启用。正常操作和低光增强模式之间的切换可能会丢失一个或多个视频帧。

14、管理帧率设置

14.1、什么帧率?

工业相机的主要参数包括:分辨率、帧率、像素、像元尺寸、光谱响应特性等。
帧率(Frame rate)是用于测量显示帧数的量度。所谓的测量单位为每秒显示帧数(Frames per Second),简称:FPS或“赫兹”(Hz)。
由于人类眼睛的特殊生理结构,如果所看画面之帧率高于16fps的时候,就会认为是连贯的,此现象称之为视觉暂留。这也就是为什么电影胶片是一格一格拍摄出来,然后快速播放的。
每秒的帧数(fps)或者说帧率表示图形处理器处理场时每秒钟能够更新的次数。高的帧率可以得到更流畅、更逼真的动画。一般来说30fps就是可以接受的,但是将性能提升至60fps则可以明显提升交互感和逼真感,但是一般来说超过75fps一般就不容易察觉到有明显的流畅度提升了。如果帧率超过屏幕刷新率只会浪费图形处理的能力,因为监视器不能以这么快的速度更新,这样超过刷新率的帧率就浪费掉了。
最大帧率(Frame Rate)/行频(Line Rate):即相机采集传输图像的速率,对于面阵相机一般为每秒采集的帧数(Frames/Sec.),对于线阵相机为每秒采集的行数(Hz)。

相机上的图像采集过程包括两个截然不同的部分。第一部分是曝光。曝光完成后,进行第二部分Readout过程即从传感器的寄存器中读出数据并传送出去(Readout过程)。

14.2、最小帧率
@property(nonatomic) CMTime activeVideoMinFrameDuration;

当前有效的最小帧持续时间。

设备的最小帧持续时间是其最大帧速率的倒数。可以设置此属性的值以限制捕获会话期间的最大帧速率。AVCaptureDevice 根据其活动格式activeFormat自动选择默认的最小帧持续时间。更改此属性的值后,可以通过将此属性的值设置为kCMTimeInvalid来返回默认的最小帧持续时间。为 AVCaptureSession设置sessionPreset也会将此属性重置为其默认值。

尝试将此属性设置为活动格式的videoSupportedFrameRateRanges数组中未找到的值会引发异常NSInvalidArgumentException

如果在没有调用-lockForConfiguration:锁定 AVCaptureDevice的情况下设置activeVideoMinFrameDuration,则抛出NSGenericException异常。

14.3、最大帧率
@property(nonatomic) CMTime activeVideoMaxFrameDuration;

设备的最大帧持续时间是其最小帧速率的倒数。
可以设置此属性的值以限制捕获会话期间的最小帧速率。AVCaptureDevice根据其活动格式activeFormat自动选择默认的最大帧持续时间。更改此属性的值后,可以通过将此属性的值设置为kCMTimeInvalid来返回默认的最大帧持续时间。为AVCaptureSession设置sessionPreset也会将此属性重置为其默认值。

尝试将此属性设置为活动格式的videoSupportedFrameRateRanges数组中未找到的值会引发异常NSInvalidArgumentException

如果在没有调用-lockForConfiguration:锁定 AVCaptureDevice的情况下设置activeVideoMaxFrameDuration,则抛出NSGenericException异常。

下面的代码示例演示了如何选择iOS设备的最高帧率:

- (void)configureCameraForHighestFrameRate:(AVCaptureDevice *)device
{
    AVCaptureDeviceFormat *bestFormat = nil;
    AVFrameRateRange *bestFrameRateRange = nil;
    for ( AVCaptureDeviceFormat *format in [device formats] ) {
         for ( AVFrameRateRange *range in format.videoSupportedFrameRateRanges ) {
             if ( range.maxFrameRate > bestFrameRateRange.maxFrameRate ) {
                 bestFormat = format;
                 bestFrameRateRange = range;
            }
        }
    }
    if ( bestFormat ) {
         if ( [device lockForConfiguration:NULL] == YES ) {
             device.activeFormat = bestFormat;
             device.activeVideoMinFrameDuration = bestFrameRateRange.minFrameDuration;
             device.activeVideoMaxFrameDuration = bestFrameRateRange.minFrameDuration;
             [device unlockForConfiguration];
         }
    }
}

15、传输管理控制

属性 类型 描述
transportControls Supported BOOL 指示设备是否支持传输控制命令。对于具有传输控件的设备,例如基于AVC磁带的摄像机或具有RS422卡座控制的专业捕获设备,此属性的值为YES。 如果不支持传输控制,则接收器上没有相关的传输控制方法和属性。
transportControls PlaybackMode AVCaptureDevice TransportControls PlaybackMode 当前的播放模式;此属性仅对支持传输控制的设备有效。
transportControlsSpeed AVCaptureDevice TransportControls Speed 目前的播放速度。

AVCaptureDeviceTransportControlsPlaybackMode 表示传输控件当前播放模式的枚举。

枚举值 描述
AVCaptureDeviceTransportControlsNotPlayingMode 表示磁带传输没有穿过播放头。
AVCaptureDeviceTransportControlsPlayingMode 表示磁带传输穿过播放头。

AVCaptureDeviceTransportControlsSpeed typedef修饰的用于表示播放速度的类别。该值的含义示例:

含义
0.0 停止
1.0 以正常速度前进。
-1.0 以正常速度反转。
2.0 以2x正常速度前进。
设置播放模式和速度

下述方法用于设置传输控件的播放模式和速度:

- (void)setTransportControlsPlaybackMode:(AVCaptureDeviceTransportControlsPlaybackMode)mode
speed:(AVCaptureDeviceTransportControlsSpeed)speed;

该方法有两个参数:

  • 参数 mode: AVCaptureDeviceTransportControlsPlaybackMode常量,指示是否应将牌组置于播放模式。
  • 参数 speed: AVCaptureDeviceTransportControlsSpeed值,指示卷绕或播放磁带的速度。

如果在没有调用-lockForConfiguration:锁定 AVCaptureDevice的情况下调用此方法,则抛出NSGenericException异常。

16、监测主题领域变化

16.1、监视更改
@property(nonatomic, getter=isSubjectAreaChangeMonitoringEnabled) BOOL subjectAreaChangeMonitoringEnabled;

此属性的值指示接收器是否应监视视频主题区域的更改,例如照明更改,实质移动等。

如果启用了主题区域更改监视,则捕获设备对象会在检测到主题区域发生更改时发送AVCaptureDeviceSubjectAreaDidChangeNotification,此时感兴趣的客户端可能希望重新聚焦,调整曝光,白平衡等。

在更改此属性的值之前,必须调用-lockForConfiguration:以获得对设备配置属性的访问权,否则,设置此属性的值将引发异常;完成设备配置后,调用-unlockForConfiguration释放锁并允许其他设备配置设置

16.2、更改时的通知
NSString *const AVCaptureDeviceSubjectAreaDidChangeNotification;

AVCaptureDevice实例检测到视频主题区域发生重大变化时发送通知。
客户端可以观察AVCaptureDeviceSubjectAreaDidChangeNotification以了解AVCaptureDevice的实例何时检测到视频主题区域的实质性变化。

仅当subjectAreaChangeMonitoringEnabledYES时才会发送此通知。

17、管理白平衡

17.1、什么是白平衡?

白平衡,字面上的理解是白色的平衡。通过它可以解决色彩还原和色调处理的一系列问题。它是实现摄像机图像能精确反映被摄物的色彩状况,有手动白平衡和自动白平衡等方式。许多人在使用数码摄像机拍摄的时候都会遇到这样的问题:在日光灯的房间里拍摄的影像会显得发绿,在室内钨丝灯光下拍摄出来的景物就会偏黄,而在日光阴影处拍摄到的照片则莫名其妙地偏蓝,其原因就在于白平衡的设置上。

我们可以使用以下属性获取AVCaptureDevice当前是否正在调整白平衡:

@property(nonatomic, readonly, getter=isAdjustingWhiteBalance) BOOL adjustingWhiteBalance;
17.2、白平衡模式AVCaptureWhiteBalanceMode
@property(nonatomic) AVCaptureWhiteBalanceMode whiteBalanceMode;

我们可以使用该属性获取或者设置目前的白平衡模式;在更改此属性的值之前,必须调用-lockForConfiguration:以获得对设备配置属性的访问权。

AVCaptureWhiteBalanceMode 用于指定捕获设备的白平衡模式的枚举。

枚举 描述
AVCaptureWhiteBalanceModeLocked 白平衡设置已锁定。
AVCaptureWhiteBalanceModeAutoWhiteBalance 设备现在执行自动白平衡操作。
AVCaptureWhiteBalanceModeContinuousAutoWhiteBalance 该设备可持续监控白平衡并在必要时进行调整。

当然,我们在设置白平衡模式AVCaptureWhiteBalanceMode时,需要确定设备是否支持指定的模式

- (BOOL)isWhiteBalanceModeSupported:(AVCaptureWhiteBalanceMode)whiteBalanceMode;

该方法返回一个布尔值,指示是否支持给定的白平衡模式。如果支持whiteBalanceMode,则为YES,否则为NO。

17.3、白平衡增益AVCaptureWhiteBalanceGains
@property(nonatomic, readonly) float maxWhiteBalanceGain;

一个只读属性,最大的白平衡增益;该值在对象的生命周期内不会更改。

typedef struct {
     float redGain;     //白平衡值的红色增益分量。
     float greenGain;   //白平衡值的绿色增益分量。
     float blueGain;    //白平衡值的蓝色增益分量。
} AVCaptureWhiteBalanceGains

包含RGB白平衡增益值的结构,对于该结构中的每个成员,仅支持1.0maxWhiteBalanceGain之间的值。如果结构成员设置为不受支持的值,则此方法抛出NSInvalidArgumentException异常。

@property(nonatomic, readonly) AVCaptureWhiteBalanceGains deviceWhiteBalanceGains;

获取白平衡增益。这些值可用于调整给定场景的色偏。无论白平衡模式如何,都可以随时读取该值。

我们可以使用下述方利用指定的deviceWhiteBalanceGains值将白平衡设置为锁定模式。

- (void)setWhiteBalanceModeLockedWithDeviceWhiteBalanceGains:(AVCaptureWhiteBalanceGains)whiteBalanceGains
completionHandler:(void (^)(CMTime syncTime))handler;

该方法有两个参数:

  • 参数whiteBalanceGains: 白平衡增加到设定。表示当前白平衡设置的结构常量AVCaptureWhiteBalanceGainsCurrent将白平衡增益锁定为其当前值,即禁用自动白平衡。如果将whiteBalanceGains设置为不支持的级别,则此方法抛出异常NSInvalidArgumentException
  • 参数handler:当白平衡增益已设置为指定值且whiteBalanceMode属性为AVCaptureWhiteBalanceModeLocked时要调用的块。 该块接收与已应用所有设置的第一个缓冲区匹配的时间戳。 时间戳与设备时钟同步,因此必须先转换为主时钟,然后再与通过AVCaptureVideoDataOutput实例传送的缓冲区的时间戳进行比较。如果不需要同步,则此参数可以为nil

调用该方法时,如果lockingWhiteBalanceWithCustomDeviceGainsSupported属性为NO,使用除AVCaptureWhiteBalanceGainsCurrent之外的白平衡增益值会引发异常。

在调用此方法之前,必须调用-lockForConfiguration:以获得对设备配置属性的访问权。

@property(nonatomic, readonly, getter=isLockingWhiteBalanceWithCustomDeviceGainsSupported) BOOL lockingWhiteBalanceWithCustomDeviceGainsSupported;

指示设备是否支持将白平衡锁定到特定增益值的布尔值。

@property(nonatomic, readonly) AVCaptureWhiteBalanceGains grayWorldDeviceWhiteBalanceGains;

中性灰色白点所需的当前设备特定白平衡值。该属性指定从当前场景派生的当前红色,绿色和蓝色增益值,以提供白平衡的中性(或灰色世界)白点。
灰色世界值假定中间主体(例如灰卡)已放置在主题区域的中间并填充帧的中心50%。 客户端可以使用-setWhiteBalanceModeLockedWithDeviceWhiteBalanceGains:completionHandler:读取这些值并将其应用于设备。

17.4、CIE 1931色度坐标系

包含CIE 1931色度坐标的结构:

typedef struct {
    float x;//表示与红色有关的相对量值,值范围介于0到0.8之间。
    float y;//表示与绿色有关的相对量值,值范围介于0和0.85之间。
} AVCaptureWhiteBalanceChromaticityValues

使用下述方法将白平衡增益AVCaptureWhiteBalanceGains转换为 CIE 1931色度坐标系,进行白平衡色度调节

- (AVCaptureWhiteBalanceChromaticityValues)chromaticityValuesForDeviceWhiteBalanceGains:(AVCaptureWhiteBalanceGains)whiteBalanceGains;

该方法的参数与返回值:

  • 参数whiteBalanceGains:白平衡增益值。 可能不使用AVCaptureWhiteBalanceGainsCurrent的值。
  • 返回值:包含CIE 1931色度坐标的结构

使用下述方法将 CIE 1931色度坐标系转换为白平衡增益AVCaptureWhiteBalanceGains

- (AVCaptureWhiteBalanceGains)deviceWhiteBalanceGainsForChromaticityValues:(AVCaptureWhiteBalanceChromaticityValues)chromaticityValues;

注意:某些 chromaticityValues字段组合产生超出范围的设备RGB值,如果直接传递给 -setWhiteBalanceModeLockedWithDeviceWhiteBalanceGains:completionHandler:将导致抛出异常。务必检查红色,绿色和蓝色增益值是否在 [1.0 - maxWhiteBalanceGain]的范围内。

17.5、温度和色彩度的白平衡调节

含有与白平衡色相关的温度和色彩值的结构

typedef struct {
     float temperature; //以开尔文表示的白平衡色相关温度。
     float tint;        //白平衡色彩值在-150.0到+150.0之间。
} AVCaptureWhiteBalanceTemperatureAndTintValues

我们可以调用下述方法获取当前白平衡增益AVCaptureWhiteBalanceGains下的温度和色彩度

- (AVCaptureWhiteBalanceTemperatureAndTintValues)temperatureAndTintValuesForDeviceWhiteBalanceGains:(AVCaptureWhiteBalanceGains)whiteBalanceGains;

该方法的参数与返回值:
参数 whiteBalanceGains:包含RGB白平衡增益值的结构;可以不使用AVCaptureWhiteBalanceGainsCurrent的值。
返回值: 返回一个含有与白平衡色相关的温度和色彩值的结构

18、管理高动态范围视频

属性 类型 描述
automaticallyAdjustsVideoHDREnabled BOOL 指示是否允许AVCaptureDevice打开或关闭高动态范围流,默认值为YES。
videoHDREnabled BOOL 指示是否允许接收器打开或关闭高动态范围流,默认值为YES。

默认情况下,当客户端使用activeFormat属性设置新格式时,AVCaptureDevice始终将videoHDREnabled设置为NO。

当客户端使用AVCaptureSession属性sessionPreset时,AVCaptureDevice会自动打开视频HDR,如果它非常适合预设。客户端可以使用videoHDREnabled属性的键值观察来了解接收器何时自动更改了值。

如果在没有调用-lockForConfiguration:锁定 AVCaptureDevice的情况下设置此属性,则抛出NSGenericException异常。

19、管理颜色空间

@property(nonatomic) AVCaptureColorSpace activeColorSpace;

管理色彩空间,当前活动的色彩空间用于捕获。

所有设备和格式都支持sRGB色彩空间中的捕获。某些设备和格式也可以在P3色彩空间中捕捉,其中包括比sRGB色彩空间宽得多的色域。默认情况下,AVCaptureSession会自动为受支持的设备捕获宽色域捕获并捕获工作流;

为获得最佳效果,请在AVCaptureSession上调用-startRunning之前选择一个颜色空间。在AVCaptureSession运行时更改此属性需要对捕获渲染管道进行破坏性重新配置,正在进行的影片捕获将立即结束,未实现的照片请求将中止,并且视频预览将暂时冻结。

如果在没有调用-lockForConfiguration:锁定 AVCaptureDevice的情况下设置此属性,则抛出NSGenericException异常。

AVCaptureColorSpace用于指定用于图像和视频捕获的色域和格式的枚举,与activeColorSpace属性一起使用。默认情况下,AVCaptureSession类自动为受支持的设备和捕获工作流启用宽色域捕获。

枚举值 描述
AVCaptureColorSpace_sRGB 标准RGB色彩空间。
AVCaptureColorSpace_P3_D65 数字影院标准DCI-P3色彩空间,带有CIE D65标准白点。

20、处理系统压力变化

20.1、状态信息systemPressureState
@property(nonatomic, readonly) AVCaptureSystemPressureState *systemPressureState;

影响捕获系统性能和可用性的操作系统和硬件状态的当前状态。当前的操作系统和硬件状态影响捕获系统的性能和可用性。

AVCaptureSystemPressureState 有关影响捕获系统性能和可用性的OS和硬件状态的信息。

iOS 设备上的摄像头捕获系统的性能和可用性受到多种外部因素的影响,例如电源使用和设备温度。如果在捕获会话期间总系统压力达到过高水平,则捕获系统会自动关闭,从而导致会话中断。在较轻的压力下,系统可以自动降低捕获质量。

要避免此类中断,需要使用KVO来监视AVCaptureDevicesystemPressureState属性的值,并在系统压力增加时采取措施降低捕获会话的性能影响;例如,通过降低捕获帧速率。

20.2、总体水平level
@property(atomic, readonly) AVCaptureSystemPressureLevel level;

捕获系统性能约束的整体表征。操作系统和硬件状态的几个方面会影响捕获系统的性能和可用性。整体系统压力水平代表最关键的潜在因素。

typedef NSString *AVCaptureSystemPressureLevel; 表示系统压力水平的结构

描述
AVCaptureSystemPressureLevelNominal 系统压力水平正常(未加压)。
AVCaptureSystemPressureLevelFair 系统压力略有升高。
AVCaptureSystemPressureLevelSerious 系统压力大大提高。 捕获性能可能会受到影响。 建议采用帧率限制。
AVCaptureSystemPressureLevelCritical 系统压力严重升高。 捕获质量和性能受到显着影响。 强烈建议使用帧速率限制。
AVCaptureSystemPressureLevelShutdown 系统压力超出临界值,因此捕获系统已关闭。当系统压力达到此水平时,捕获系统会自动关闭,从而导致会话中断。在中断通知的userInfo字典中使用AVCaptureSessionInterruptionSystemPressureStateKey来查找导致中断的系统压力因素的详细信息。
20.3、影响因素
@property(atomic, readonly) AVCaptureSystemPressureFactors factors;

系统压力水平的一系列根本原因。系统压力水平较高时,可以使用此信息选择如何缓解问题。
例如,在多镜头设备上由于AVCaptureSystemPressureFactorDepthModuleTemperature导致的高系统压力可以通过限制深度捕获帧速率来减少。

AVCaptureSystemPressureFactors 影响捕获系统性能的一组因素。如果系统压力级别为AVCaptureSystemPressureLevelNominal(即捕获系统性能不受其他OS和硬件因素的影响),则此值为空集。

描述
AVCaptureSystemPressureFactorNone 系统压力目前是标称值。
AVCaptureSystemPressureFactorSystemTemperature 整个系统的热负荷都很高。
AVCaptureSystemPressureFactorPeakPower 系统的峰值功率要求超过了电池的当前容量。具有化学老化电池的设备不太能够响应总功率使用(CPU和GPU使用,I/O,相机系统,无线电等)的快速增加。当设备检测到这种情况时,可能会限制捕获系统性能,以防止意外的设备关闭。
AVCaptureSystemPressureFactorDepthModuleTemperature 捕获深度信息的模块在升高的温度下操作。随着系统压力的增加,深度质量可能会降低。要从此因素降低系统压力,需要降低深度捕获帧速率。此因素仅适用于多镜头设备。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345