OC之AVCaptureDevice續(xù)

OC之AVCaptureDevice

11丛塌、管理感光度 ISO

11.1妒茬、什么是感光度 ISO

在數(shù)碼相機(jī)中 ISO 表示感光元件的感光的速度。感光度 ISO 數(shù)值越高就說明該感光元器件的感光能力越強(qiáng)蚊锹,對曝光量的要求就越少熙暴。一般情況下闺属,ISO 值越低慌盯,相片的質(zhì)量越高周霉,相片的細(xì)節(jié)表現(xiàn)的得越細(xì)膩;ISO 值越高亚皂,相片的亮度就越高俱箱,而相片的質(zhì)量會隨著 ISO值的升高而降低,噪點會變得越來越嚴(yán)重灭必,但高 ISO 值可以彌補光線的不足狞谱。

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

當(dāng)前曝光的感光度 ISO 值禁漓。此屬性通過應(yīng)用于信號的增益值返回傳感器對光的靈敏度跟衅。

僅支持minISOmaxISO之間的ISO值;值越高播歼,圖像越嘈雜伶跷。
無論曝光模式如何,都可以隨時讀取屬性值秘狞,但只能使用-setExposureModeCustomWithDuration:ISO:completionHandler:方法進(jìn)行設(shè)置叭莫。

常量const float AVCaptureISOCurrent;表示調(diào)用者不希望為 ISO 屬性指定值,而是應(yīng)將其設(shè)置為其當(dāng)前值烁试。

12雇初、曝光設(shè)置

12.1、關(guān)于相機(jī)的一些概念
12.1.1减响、光圈

光圈是一個用來控制光線透過鏡頭靖诗,進(jìn)入機(jī)身內(nèi)感光面的光量的裝置郭怪;它通常是在鏡頭內(nèi)。
表達(dá)光圈大小我們是用F值:光圈F值 = 鏡頭的焦距/鏡頭口徑的直徑刊橘;從以上的公式可知要達(dá)到相同的光圈F值移盆,長焦距鏡頭的口徑要比短焦距鏡頭的口徑大。當(dāng)光圈物理孔徑不變時伤为,鏡頭中心與感光器件距離愈遠(yuǎn)咒循,F(xiàn)數(shù)愈大,反之绞愚,鏡頭中心與感光器件距離愈近叙甸,通過光孔到達(dá)感光器件的光密度愈高,F(xiàn)數(shù)就愈小位衩。
完整的光圈值系列如下: F1裆蒸, F1.4, F2糖驴, F2.8僚祷, F4, F5.6贮缕, F8辙谜, F11, F16感昼, F22装哆, F32, F44定嗓, F64蜕琴。
光圈F值愈小,在同一單位時間內(nèi)的進(jìn)光量便愈多宵溅,而且上一級的進(jìn)光量剛是下一級的一倍凌简,例如光圈從F8調(diào)整到F5.6,進(jìn)光量便多一倍恃逻,我們也說光圈開大了一級雏搂。

12.1.2、快門

快門是照相機(jī)用來控制感光片有效曝光時間的裝置辛块。是照相機(jī)的一個重要組成部分畔派,它的結(jié)構(gòu)、形式及功能是衡量照相機(jī)檔次的一個重要因素润绵。一般而言快門的時間范圍越大越好线椰。秒數(shù)低適合拍運動中的物體,某款相機(jī)就強(qiáng)調(diào)快門最快能到1/16000秒尘盼,可輕松抓住急速移動的目標(biāo)憨愉。不過當(dāng)你要拍的是夜晚的車水馬龍烦绳,快門時間就要拉長,常見照片中絲絹般的水流效果也要用慢速快門才能拍出來配紫。

快門速度單位是“秒”径密。專業(yè)135相機(jī)的最高快門速度達(dá)到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、曝光

曝光:是指當(dāng)你按相機(jī)快門按鈕的時候于个,快門(鏡頭外的世界和機(jī)身內(nèi)部感光元件之間的門)會打開氛魁,過一段時間再關(guān)上;就在這一小段時間之內(nèi)厅篓,光線會從鏡頭鉆進(jìn)來秀存,照在長方形的感光元件上邊,感光元件上幾千萬的感光點就會記錄照到它上邊的光的色彩羽氮;于是或链,就得到一張照片了。

曝光就是 光圈乏苦、快門 和 感光度ISO 的組合株扛。
曝光值 是由快門速度值和光圈值組合表示攝影鏡頭通光能力的一個數(shù)值尤筐。

可以這樣認(rèn)為:光圈值大小其實就是那個小圓窗戶開多大汇荐;快門(速度)就是窗戶打開多久。
假設(shè)窗戶只打開1/4盆繁,時間為4秒鐘可以正確曝光的話掀淘,很顯然,窗戶打開一半油昂,時間2秒鐘也能讓底片正確曝光革娄,因為 1/44 = 1/22 = 1,進(jìn)光量都是一樣多冕碟。同樣的拦惋,如果窗戶全開,曝光時間就只需要1秒了安寺。
假若一個鏡頭光圈全開為 F4厕妖,用攝影行話來說,光圈 F4 快門速度 1 秒為正確曝光值挑庶,那 F5.6 和 2 秒以及 F8 和 4 秒也同樣能得到準(zhǔn)確曝光的圖片言秸。

一張正確曝光的圖片可以有N種不同的光圈和快門速度組合软能。

12.1.4、曝光的興趣點

興趣點举畸,又被稱為點特征查排,指的是圖像中具有特殊性質(zhì)的像素點,是圖像的重要特征抄沮。它具有旋轉(zhuǎn)不變性和不隨光照條件變化的優(yōu)點跋核。這類點被大量用于解決物體識別,圖像匹配叛买,視覺跟蹤了罪,三維重建等問題。

12.2聪全、曝光的一些屬性
屬性 類型 描述
exposureDuration CMTime 一個只讀屬性泊藕,表示曝光時間;僅支持minExposureDurationmaxExposureDuration之間的曝光持續(xù)時間值难礼。無論曝光模式如何娃圆,都可以隨時讀取曝光時間。
exposureTargetOffset float 一個只讀屬性蛾茉,表示當(dāng)前場景的計量曝光水平與目標(biāo)曝光值之間的差異讼呢;以EV為單位。
exposureTargetBias float 一個只讀屬性谦炬,以EV單位應(yīng)用于目標(biāo)暴露值的偏差悦屏。當(dāng)曝光模式為AVCaptureExposureModeAutoExposeAVCaptureExposureModeLocked時,偏差將影響測光(exposureTargetOffset)和實際曝光等級:曝光時間exposureDuration和感光度ISO键思。 當(dāng)曝光模式為AVCaptureExposureModeCustom時础爬,它只會影響測光。
minExposureTargetBias float 一個只讀屬性吼鳞,EV單位支持的最小曝光偏差看蚜。
maxExposureTargetBias float 一個只讀屬性,以EV為單位的最大支持曝光偏差赔桌。
activeMaxExposureDuration CMTime 自動曝光算法中定義的最長曝光持續(xù)時間(以秒為單位)供炎。
adjustingExposure BOOL 一個只讀屬性,指示設(shè)備當(dāng)前是否正在調(diào)整其曝光設(shè)置疾党。
exposureMode AVCaptureExposureMode 設(shè)備的曝光模式音诫。在更改此屬性的值之前,必須調(diào)用-lockForConfiguration:以鎖定AVCaptureDevice雪位;否則竭钝,設(shè)置此屬性的值會引發(fā)異常。完成配置設(shè)備后,請調(diào)用-unlockForConfiguration以釋放鎖定并允許其他設(shè)備配置設(shè)置蜓氨。
exposurePointOfInterestSupported BOOL 一個只讀屬性聋袋,指示設(shè)備是否支持曝光的興趣點。
exposurePointOfInterest CGPoint 曝光的興趣點穴吹。
12.2.1幽勒、關(guān)于activeMaxExposureDuration屬性

AVCaptureSession設(shè)置sessionPreset或在AVCaptureDevice上選擇其他activeFormat時,可以查詢或觀察對activeMaxExposureDuration的更改港令。
可以隨時覆蓋此屬性啥容,以及activeFormat屬性的minExposureDurationmaxExposureDuration范圍中的任何值。會話運行時會立即反映更改顷霹,而不會重建圖形咪惠。
還可以將屬性設(shè)置為kCMTimeInvalid以返回默認(rèn)值。例如淋淀,如果想要比幀速率更短的曝光遥昧,則可以覆蓋自動曝光算法的最大曝光持續(xù)時間。 如果需要通過暴露1/40秒但仍然每秒捕獲30幀來凍結(jié)運動朵纷,則需要手動覆蓋炭臭。

12.2.2、關(guān)于曝光模式AVCaptureExposureMode

AVCaptureExposureMode 用于指定AVCaptureDevice曝光模式的枚舉袍辞。

枚舉值 描述
AVCaptureExposureModeLocked 曝光設(shè)置已鎖定鞋仍。
AVCaptureExposureModeAutoExpose 設(shè)備會自動調(diào)整曝光一次,然后將曝光模式更改為AVCaptureExposureModeLocked
AVCaptureExposureModeContinuousAutoExposure 設(shè)備會持續(xù)監(jiān)控曝光量并在必要時自動曝光搅吁。
AVCaptureExposureModeCustom 設(shè)備應(yīng)僅根據(jù)用戶提供的感光度 ISO 和曝光時間exposureDuration屬性值調(diào)整曝光威创。

我們可以利用下述方法獲得設(shè)備是否支持給定的曝光模式:

- (BOOL)isExposureModeSupported:(AVCaptureExposureMode)exposureMode;
12.2.3、關(guān)于曝光的興趣點exposurePointOfInterest

為此屬性設(shè)置值不會啟動曝光重新平衡操作谎懦。要使用興趣點設(shè)置曝光肚豺,首先設(shè)置此屬性的值,然后將exposureMode屬性設(shè)置為AVCaptureExposureModeAutoExposeAVCaptureExposureModeContinuousAutoExposure党瓮。

此屬性的CGPoint值使用坐標(biāo)系详炬,其中{0,0}是圖片區(qū)域的左上角,{1,1}是右下角寞奸。無論實際的設(shè)備方向如何,此坐標(biāo)系始終相對于橫向設(shè)備方向在跳,主頁按鈕位于右側(cè)枪萄。可以使用AVCaptureVideoPreviewLayer方法在此坐標(biāo)系和視圖坐標(biāo)之間進(jìn)行轉(zhuǎn)換猫妙。

在更改此屬性的值之前瓷翻,必須調(diào)用-lockForConfiguration:以鎖定AVCaptureDevice;否則,設(shè)置此屬性的值會引發(fā)異常齐帚。完成配置設(shè)備后妒牙,請調(diào)用-unlockForConfiguration以釋放鎖定并允許其他設(shè)備配置設(shè)置。

12.3对妄、設(shè)置曝光時間和感光度

我們在上文已經(jīng)了解了如何獲取曝光時間和感光度的屬性湘今,但是它們都是只讀屬性,我們能且唯一可用的就是使用下述方法修改曝光時間與感光度

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

該方法將曝光時間和感光度 ISO 鎖定在指定值剪菱;有三個參數(shù):

  • 參數(shù)CMTime duration :表示曝光時間摩瞎。表示當(dāng)前曝光時間的特殊常量AVCaptureExposureDurationCurrent 將曝光時間鎖定為其當(dāng)前值,即禁用自動曝光孝常。注意旗们,對此屬性的更改可能會導(dǎo)致activeVideoMinFrameDurationactiveVideoMaxFrameDuration發(fā)生更改。

  • 參數(shù)float ISO : 表示感光度构灸。常量AVCaptureISOCurrent的值可用于指示調(diào)用者不希望為ISO指定值上渴,而是應(yīng)將其設(shè)置為其當(dāng)前值。

  • 參數(shù)handler :當(dāng)曝光時間exposureDuration和感光度ISO都已設(shè)置為指定值且曝光模式exposureModeAVCaptureExposureModeCustom時的回調(diào)喜颁。該塊接收與已應(yīng)用所有設(shè)置的第一個緩沖區(qū)匹配的時間戳驰贷。 時間戳與設(shè)備時鐘同步,因此必須先轉(zhuǎn)換為主時鐘洛巢,然后再與通過AVCaptureVideoDataOutput實例傳送的緩沖區(qū)的時間戳進(jìn)行比較括袒。如果不需要知道操作的完成,則為處理程序參數(shù)傳遞nil稿茉。

該方法是設(shè)置曝光時間 exposureDuration 和感光度 ISO 的唯一方法锹锰。
如果將曝光時間exposureDuration或感光度ISO設(shè)置為不支持的級別,則此方法將拋出NSInvalidArgumentException異常漓库。
如果在沒有調(diào)用-lockForConfiguration:鎖定 AVCaptureDevice的情況下調(diào)用此方法恃慧,則拋出NSGenericException異常。

12.4渺蒿、設(shè)置曝光偏差
- (void)setExposureTargetBias:(float)bias completionHandler:(void (^)(CMTime syncTime))handler;

該方法用于設(shè)置要應(yīng)用于目標(biāo)曝光值的偏差痢士。有兩個參數(shù):

  • 參數(shù)bias: 要應(yīng)用于曝光目標(biāo)值的偏差。表示當(dāng)前曝光偏差值的特殊常量AVCaptureExposureTargetBiasCurrent將曝光偏差鎖定為其當(dāng)前值茂装,即禁用自動曝光怠蹂。
  • 參數(shù)handler: 將exposureTargetBias屬性設(shè)置為指定值時的回調(diào)。該塊接收時間戳少态,該時間戳與已應(yīng)用該設(shè)置的第一緩沖區(qū)的時間戳匹配城侧。 時間戳與設(shè)備時鐘同步,因此必須先轉(zhuǎn)換為主時鐘彼妻,然后再與通過AVCaptureVideoDataOutput實例傳送的緩沖區(qū)的時間戳進(jìn)行比較嫌佑。如果不需要知道操作的完成豆茫,則客戶端可以為處理程序參數(shù)傳遞nil。

此方法是設(shè)置exposureTargetBias屬性的唯一方法屋摇。
如果exposureTargetBias設(shè)置為不支持的級別揩魂,則此方法拋出NSInvalidArgumentException異常。
如果在沒有調(diào)用-lockForConfiguration:鎖定 AVCaptureDevice的情況下調(diào)用此方法炮温,則拋出NSGenericException異常火脉。

13、管理低亮度設(shè)置

屬性 類型 描述
lowLightBoostSupported BOOL 指示AVCaptureDevice是否支持在低光照條件下提升圖像的布爾值茅特。只有在此屬性為YES時忘分,才能設(shè)置AVCaptureDevice對象的automaticEnablesLowLightBoostWhenAvailable屬性。
lowLightBoostEnabled BOOL 指示是否啟用AVCaptureDevice的低光增強(qiáng)功能的布爾值白修。當(dāng)該屬性為“是”時妒峦,AVCaptureDevice已切換到特殊模式,在該模式中可以在圖像中感知到更多光兵睛。
automaticallyEnablesLowLightBoostWhenAvailable BOOL 指示AVCaptureDevice是否應(yīng)在必要時自動切換到低光增強(qiáng)模式的布爾值肯骇;默認(rèn)值為NO。

lowLightBoostSupported為YES的AVCaptureDevice對象上祖很,可以使用特殊的低光增強(qiáng)模式來提高圖像質(zhì)量笛丙。當(dāng)automaticEnablesLowLightBoostWhenAvailable屬性設(shè)置為YES時,AVCaptureDevice會在低光照條件下自行切換到特殊的升壓模式假颇。當(dāng)場景變得充足時胚鸯,設(shè)備切換回正常操作。支持此功能的AVCaptureDevice可能僅針對某些源格式或分辨率使用升壓模式笨鸡。

如果lowLightBoostSupported為NO姜钳,則設(shè)置automaticEnablesLowLightBoostWhenAvailable會拋出NSInvalidArgumentException

如果在沒有調(diào)用-lockForConfiguration:鎖定 AVCaptureDevice的情況下設(shè)置automaticEnablesLowLightBoostWhenAvailable形耗,則拋出NSGenericException異常哥桥。

客戶端可以使用鍵值觀察來觀察對lowLightBoostEnabled屬性的更改,以了解升壓模式何時啟用激涤。正常操作和低光增強(qiáng)模式之間的切換可能會丟失一個或多個視頻幀拟糕。

14、管理幀率設(shè)置

14.1倦踢、什么幀率送滞?

工業(yè)相機(jī)的主要參數(shù)包括:分辨率、幀率硼一、像素累澡、像元尺寸、光譜響應(yīng)特性等般贼。
幀率(Frame rate)是用于測量顯示幀數(shù)的量度。所謂的測量單位為每秒顯示幀數(shù)(Frames per Second),簡稱:FPS或“赫茲”(Hz)哼蛆。
由于人類眼睛的特殊生理結(jié)構(gòu)蕊梧,如果所看畫面之幀率高于16fps的時候,就會認(rèn)為是連貫的腮介,此現(xiàn)象稱之為視覺暫留肥矢。這也就是為什么電影膠片是一格一格拍攝出來,然后快速播放的叠洗。
每秒的幀數(shù)(fps)或者說幀率表示圖形處理器處理場時每秒鐘能夠更新的次數(shù)甘改。高的幀率可以得到更流暢、更逼真的動畫灭抑。一般來說30fps就是可以接受的十艾,但是將性能提升至60fps則可以明顯提升交互感和逼真感,但是一般來說超過75fps一般就不容易察覺到有明顯的流暢度提升了腾节。如果幀率超過屏幕刷新率只會浪費圖形處理的能力忘嫉,因為監(jiān)視器不能以這么快的速度更新,這樣超過刷新率的幀率就浪費掉了案腺。
最大幀率(Frame Rate)/行頻(Line Rate):即相機(jī)采集傳輸圖像的速率庆冕,對于面陣相機(jī)一般為每秒采集的幀數(shù)(Frames/Sec.),對于線陣相機(jī)為每秒采集的行數(shù)(Hz)劈榨。

相機(jī)上的圖像采集過程包括兩個截然不同的部分访递。第一部分是曝光。曝光完成后同辣,進(jìn)行第二部分Readout過程即從傳感器的寄存器中讀出數(shù)據(jù)并傳送出去(Readout過程)拷姿。

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

當(dāng)前有效的最小幀持續(xù)時間邑闺。

設(shè)備的最小幀持續(xù)時間是其最大幀速率的倒數(shù)跌前。可以設(shè)置此屬性的值以限制捕獲會話期間的最大幀速率陡舅。AVCaptureDevice 根據(jù)其活動格式activeFormat自動選擇默認(rèn)的最小幀持續(xù)時間抵乓。更改此屬性的值后,可以通過將此屬性的值設(shè)置為kCMTimeInvalid來返回默認(rèn)的最小幀持續(xù)時間靶衍。為 AVCaptureSession設(shè)置sessionPreset也會將此屬性重置為其默認(rèn)值灾炭。

嘗試將此屬性設(shè)置為活動格式的videoSupportedFrameRateRanges數(shù)組中未找到的值會引發(fā)異常NSInvalidArgumentException

如果在沒有調(diào)用-lockForConfiguration:鎖定 AVCaptureDevice的情況下設(shè)置activeVideoMinFrameDuration颅眶,則拋出NSGenericException異常蜈出。

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

設(shè)備的最大幀持續(xù)時間是其最小幀速率的倒數(shù)涛酗。
可以設(shè)置此屬性的值以限制捕獲會話期間的最小幀速率铡原。AVCaptureDevice根據(jù)其活動格式activeFormat自動選擇默認(rèn)的最大幀持續(xù)時間偷厦。更改此屬性的值后,可以通過將此屬性的值設(shè)置為kCMTimeInvalid來返回默認(rèn)的最大幀持續(xù)時間燕刻。為AVCaptureSession設(shè)置sessionPreset也會將此屬性重置為其默認(rèn)值只泼。

嘗試將此屬性設(shè)置為活動格式的videoSupportedFrameRateRanges數(shù)組中未找到的值會引發(fā)異常NSInvalidArgumentException

如果在沒有調(diào)用-lockForConfiguration:鎖定 AVCaptureDevice的情況下設(shè)置activeVideoMaxFrameDuration卵洗,則拋出NSGenericException異常请唱。

下面的代碼示例演示了如何選擇iOS設(shè)備的最高幀率:

- (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 指示設(shè)備是否支持傳輸控制命令过蹂。對于具有傳輸控件的設(shè)備十绑,例如基于AVC磁帶的攝像機(jī)或具有RS422卡座控制的專業(yè)捕獲設(shè)備,此屬性的值為YES酷勺。 如果不支持傳輸控制本橙,則接收器上沒有相關(guān)的傳輸控制方法和屬性。
transportControls PlaybackMode AVCaptureDevice TransportControls PlaybackMode 當(dāng)前的播放模式鸥印;此屬性僅對支持傳輸控制的設(shè)備有效勋功。
transportControlsSpeed AVCaptureDevice TransportControls Speed 目前的播放速度。

AVCaptureDeviceTransportControlsPlaybackMode 表示傳輸控件當(dāng)前播放模式的枚舉库说。

枚舉值 描述
AVCaptureDeviceTransportControlsNotPlayingMode 表示磁帶傳輸沒有穿過播放頭狂鞋。
AVCaptureDeviceTransportControlsPlayingMode 表示磁帶傳輸穿過播放頭。

AVCaptureDeviceTransportControlsSpeed typedef修飾的用于表示播放速度的類別潜的。該值的含義示例:

含義
0.0 停止
1.0 以正常速度前進(jìn)骚揍。
-1.0 以正常速度反轉(zhuǎn)。
2.0 以2x正常速度前進(jìn)啰挪。
設(shè)置播放模式和速度

下述方法用于設(shè)置傳輸控件的播放模式和速度:

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

該方法有兩個參數(shù):

  • 參數(shù) mode: AVCaptureDeviceTransportControlsPlaybackMode常量信不,指示是否應(yīng)將牌組置于播放模式。
  • 參數(shù) speed: AVCaptureDeviceTransportControlsSpeed值亡呵,指示卷繞或播放磁帶的速度抽活。

如果在沒有調(diào)用-lockForConfiguration:鎖定 AVCaptureDevice的情況下調(diào)用此方法,則拋出NSGenericException異常锰什。

16大莫、監(jiān)測主題領(lǐng)域變化

16.1休雌、監(jiān)視更改
@property(nonatomic, getter=isSubjectAreaChangeMonitoringEnabled) BOOL subjectAreaChangeMonitoringEnabled;

此屬性的值指示接收器是否應(yīng)監(jiān)視視頻主題區(qū)域的更改,例如照明更改误辑,實質(zhì)移動等忘蟹。

如果啟用了主題區(qū)域更改監(jiān)視季春,則捕獲設(shè)備對象會在檢測到主題區(qū)域發(fā)生更改時發(fā)送AVCaptureDeviceSubjectAreaDidChangeNotification蜻牢,此時感興趣的客戶端可能希望重新聚焦狭郑,調(diào)整曝光,白平衡等铸题。

在更改此屬性的值之前铡恕,必須調(diào)用-lockForConfiguration:以獲得對設(shè)備配置屬性的訪問權(quán)琢感,否則,設(shè)置此屬性的值將引發(fā)異常没咙;完成設(shè)備配置后猩谊,調(diào)用-unlockForConfiguration釋放鎖并允許其他設(shè)備配置設(shè)置

16.2千劈、更改時的通知
NSString *const AVCaptureDeviceSubjectAreaDidChangeNotification;

當(dāng)AVCaptureDevice實例檢測到視頻主題區(qū)域發(fā)生重大變化時發(fā)送通知祭刚。
客戶端可以觀察AVCaptureDeviceSubjectAreaDidChangeNotification以了解AVCaptureDevice的實例何時檢測到視頻主題區(qū)域的實質(zhì)性變化。

僅當(dāng)subjectAreaChangeMonitoringEnabledYES時才會發(fā)送此通知墙牌。

17涡驮、管理白平衡

17.1、什么是白平衡喜滨?

白平衡捉捅,字面上的理解是白色的平衡。通過它可以解決色彩還原和色調(diào)處理的一系列問題虽风。它是實現(xiàn)攝像機(jī)圖像能精確反映被攝物的色彩狀況棒口,有手動白平衡和自動白平衡等方式。許多人在使用數(shù)碼攝像機(jī)拍攝的時候都會遇到這樣的問題:在日光燈的房間里拍攝的影像會顯得發(fā)綠辜膝,在室內(nèi)鎢絲燈光下拍攝出來的景物就會偏黃无牵,而在日光陰影處拍攝到的照片則莫名其妙地偏藍(lán),其原因就在于白平衡的設(shè)置上厂抖。

我們可以使用以下屬性獲取AVCaptureDevice當(dāng)前是否正在調(diào)整白平衡:

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

我們可以使用該屬性獲取或者設(shè)置目前的白平衡模式;在更改此屬性的值之前忱辅,必須調(diào)用-lockForConfiguration:以獲得對設(shè)備配置屬性的訪問權(quán)七蜘。

AVCaptureWhiteBalanceMode 用于指定捕獲設(shè)備的白平衡模式的枚舉。

枚舉 描述
AVCaptureWhiteBalanceModeLocked 白平衡設(shè)置已鎖定墙懂。
AVCaptureWhiteBalanceModeAutoWhiteBalance 設(shè)備現(xiàn)在執(zhí)行自動白平衡操作橡卤。
AVCaptureWhiteBalanceModeContinuousAutoWhiteBalance 該設(shè)備可持續(xù)監(jiān)控白平衡并在必要時進(jìn)行調(diào)整。

當(dāng)然损搬,我們在設(shè)置白平衡模式AVCaptureWhiteBalanceMode時碧库,需要確定設(shè)備是否支持指定的模式

- (BOOL)isWhiteBalanceModeSupported:(AVCaptureWhiteBalanceMode)whiteBalanceMode;

該方法返回一個布爾值,指示是否支持給定的白平衡模式场躯。如果支持whiteBalanceMode谈为,則為YES,否則為NO踢关。

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

一個只讀屬性,最大的白平衡增益签舞;該值在對象的生命周期內(nèi)不會更改秕脓。

typedef struct {
     float redGain;     //白平衡值的紅色增益分量柒瓣。
     float greenGain;   //白平衡值的綠色增益分量。
     float blueGain;    //白平衡值的藍(lán)色增益分量吠架。
} AVCaptureWhiteBalanceGains

包含RGB白平衡增益值的結(jié)構(gòu)芙贫,對于該結(jié)構(gòu)中的每個成員,僅支持1.0maxWhiteBalanceGain之間的值傍药。如果結(jié)構(gòu)成員設(shè)置為不受支持的值磺平,則此方法拋出NSInvalidArgumentException異常。

@property(nonatomic, readonly) AVCaptureWhiteBalanceGains deviceWhiteBalanceGains;

獲取白平衡增益拐辽。這些值可用于調(diào)整給定場景的色偏拣挪。無論白平衡模式如何,都可以隨時讀取該值俱诸。

我們可以使用下述方利用指定的deviceWhiteBalanceGains值將白平衡設(shè)置為鎖定模式菠劝。

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

該方法有兩個參數(shù):

  • 參數(shù)whiteBalanceGains: 白平衡增加到設(shè)定。表示當(dāng)前白平衡設(shè)置的結(jié)構(gòu)常量AVCaptureWhiteBalanceGainsCurrent將白平衡增益鎖定為其當(dāng)前值睁搭,即禁用自動白平衡赶诊。如果將whiteBalanceGains設(shè)置為不支持的級別,則此方法拋出異常NSInvalidArgumentException园骆。
  • 參數(shù)handler:當(dāng)白平衡增益已設(shè)置為指定值且whiteBalanceMode屬性為AVCaptureWhiteBalanceModeLocked時要調(diào)用的塊舔痪。 該塊接收與已應(yīng)用所有設(shè)置的第一個緩沖區(qū)匹配的時間戳。 時間戳與設(shè)備時鐘同步遇伞,因此必須先轉(zhuǎn)換為主時鐘辙喂,然后再與通過AVCaptureVideoDataOutput實例傳送的緩沖區(qū)的時間戳進(jìn)行比較。如果不需要同步鸠珠,則此參數(shù)可以為nil巍耗。

調(diào)用該方法時,如果lockingWhiteBalanceWithCustomDeviceGainsSupported屬性為NO渐排,使用除AVCaptureWhiteBalanceGainsCurrent之外的白平衡增益值會引發(fā)異常炬太。

在調(diào)用此方法之前,必須調(diào)用-lockForConfiguration:以獲得對設(shè)備配置屬性的訪問權(quán)驯耻。

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

指示設(shè)備是否支持將白平衡鎖定到特定增益值的布爾值亲族。

@property(nonatomic, readonly) AVCaptureWhiteBalanceGains grayWorldDeviceWhiteBalanceGains;

中性灰色白點所需的當(dāng)前設(shè)備特定白平衡值。該屬性指定從當(dāng)前場景派生的當(dāng)前紅色可缚,綠色和藍(lán)色增益值霎迫,以提供白平衡的中性(或灰色世界)白點。
灰色世界值假定中間主體(例如灰卡)已放置在主題區(qū)域的中間并填充幀的中心50%帘靡。 客戶端可以使用-setWhiteBalanceModeLockedWithDeviceWhiteBalanceGains:completionHandler:讀取這些值并將其應(yīng)用于設(shè)備知给。

17.4、CIE 1931色度坐標(biāo)系

包含CIE 1931色度坐標(biāo)的結(jié)構(gòu):

typedef struct {
    float x;//表示與紅色有關(guān)的相對量值,值范圍介于0到0.8之間涩赢。
    float y;//表示與綠色有關(guān)的相對量值戈次,值范圍介于0和0.85之間。
} AVCaptureWhiteBalanceChromaticityValues

使用下述方法將白平衡增益AVCaptureWhiteBalanceGains轉(zhuǎn)換為 CIE 1931色度坐標(biāo)系筒扒,進(jìn)行白平衡色度調(diào)節(jié)

- (AVCaptureWhiteBalanceChromaticityValues)chromaticityValuesForDeviceWhiteBalanceGains:(AVCaptureWhiteBalanceGains)whiteBalanceGains;

該方法的參數(shù)與返回值:

  • 參數(shù)whiteBalanceGains:白平衡增益值怯邪。 可能不使用AVCaptureWhiteBalanceGainsCurrent的值。
  • 返回值:包含CIE 1931色度坐標(biāo)的結(jié)構(gòu)

使用下述方法將 CIE 1931色度坐標(biāo)系轉(zhuǎn)換為白平衡增益AVCaptureWhiteBalanceGains

- (AVCaptureWhiteBalanceGains)deviceWhiteBalanceGainsForChromaticityValues:(AVCaptureWhiteBalanceChromaticityValues)chromaticityValues;

注意:某些 chromaticityValues字段組合產(chǎn)生超出范圍的設(shè)備RGB值花墩,如果直接傳遞給 -setWhiteBalanceModeLockedWithDeviceWhiteBalanceGains:completionHandler:將導(dǎo)致拋出異常悬秉。務(wù)必檢查紅色,綠色和藍(lán)色增益值是否在 [1.0 - maxWhiteBalanceGain]的范圍內(nèi)观游。

17.5搂捧、溫度和色彩度的白平衡調(diào)節(jié)

含有與白平衡色相關(guān)的溫度和色彩值的結(jié)構(gòu)

typedef struct {
     float temperature; //以開爾文表示的白平衡色相關(guān)溫度。
     float tint;        //白平衡色彩值在-150.0到+150.0之間懂缕。
} AVCaptureWhiteBalanceTemperatureAndTintValues

我們可以調(diào)用下述方法獲取當(dāng)前白平衡增益AVCaptureWhiteBalanceGains下的溫度和色彩度

- (AVCaptureWhiteBalanceTemperatureAndTintValues)temperatureAndTintValuesForDeviceWhiteBalanceGains:(AVCaptureWhiteBalanceGains)whiteBalanceGains;

該方法的參數(shù)與返回值:
參數(shù) whiteBalanceGains:包含RGB白平衡增益值的結(jié)構(gòu);可以不使用AVCaptureWhiteBalanceGainsCurrent的值王凑。
返回值: 返回一個含有與白平衡色相關(guān)的溫度和色彩值的結(jié)構(gòu)

18搪柑、管理高動態(tài)范圍視頻

屬性 類型 描述
automaticallyAdjustsVideoHDREnabled BOOL 指示是否允許AVCaptureDevice打開或關(guān)閉高動態(tài)范圍流,默認(rèn)值為YES。
videoHDREnabled BOOL 指示是否允許接收器打開或關(guān)閉高動態(tài)范圍流,默認(rèn)值為YES索烹。

默認(rèn)情況下工碾,當(dāng)客戶端使用activeFormat屬性設(shè)置新格式時,AVCaptureDevice始終將videoHDREnabled設(shè)置為NO百姓。

當(dāng)客戶端使用AVCaptureSession屬性sessionPreset時渊额,AVCaptureDevice會自動打開視頻HDR,如果它非常適合預(yù)設(shè)垒拢⊙#客戶端可以使用videoHDREnabled屬性的鍵值觀察來了解接收器何時自動更改了值。

如果在沒有調(diào)用-lockForConfiguration:鎖定 AVCaptureDevice的情況下設(shè)置此屬性求类,則拋出NSGenericException異常奔垦。

19、管理顏色空間

@property(nonatomic) AVCaptureColorSpace activeColorSpace;

管理色彩空間尸疆,當(dāng)前活動的色彩空間用于捕獲椿猎。

所有設(shè)備和格式都支持sRGB色彩空間中的捕獲。某些設(shè)備和格式也可以在P3色彩空間中捕捉寿弱,其中包括比sRGB色彩空間寬得多的色域犯眠。默認(rèn)情況下,AVCaptureSession會自動為受支持的設(shè)備捕獲寬色域捕獲并捕獲工作流症革;

為獲得最佳效果筐咧,請在AVCaptureSession上調(diào)用-startRunning之前選擇一個顏色空間。在AVCaptureSession運行時更改此屬性需要對捕獲渲染管道進(jìn)行破壞性重新配置地沮,正在進(jìn)行的影片捕獲將立即結(jié)束嗜浮,未實現(xiàn)的照片請求將中止羡亩,并且視頻預(yù)覽將暫時凍結(jié)。

如果在沒有調(diào)用-lockForConfiguration:鎖定 AVCaptureDevice的情況下設(shè)置此屬性危融,則拋出NSGenericException異常畏铆。

AVCaptureColorSpace用于指定用于圖像和視頻捕獲的色域和格式的枚舉,與activeColorSpace屬性一起使用吉殃。默認(rèn)情況下辞居,AVCaptureSession類自動為受支持的設(shè)備和捕獲工作流啟用寬色域捕獲。

枚舉值 描述
AVCaptureColorSpace_sRGB 標(biāo)準(zhǔn)RGB色彩空間蛋勺。
AVCaptureColorSpace_P3_D65 數(shù)字影院標(biāo)準(zhǔn)DCI-P3色彩空間瓦灶,帶有CIE D65標(biāo)準(zhǔn)白點。

20抱完、處理系統(tǒng)壓力變化

20.1贼陶、狀態(tài)信息systemPressureState
@property(nonatomic, readonly) AVCaptureSystemPressureState *systemPressureState;

影響捕獲系統(tǒng)性能和可用性的操作系統(tǒng)和硬件狀態(tài)的當(dāng)前狀態(tài)。當(dāng)前的操作系統(tǒng)和硬件狀態(tài)影響捕獲系統(tǒng)的性能和可用性巧娱。

AVCaptureSystemPressureState 有關(guān)影響捕獲系統(tǒng)性能和可用性的OS和硬件狀態(tài)的信息碉怔。

iOS 設(shè)備上的攝像頭捕獲系統(tǒng)的性能和可用性受到多種外部因素的影響,例如電源使用和設(shè)備溫度禁添。如果在捕獲會話期間總系統(tǒng)壓力達(dá)到過高水平撮胧,則捕獲系統(tǒng)會自動關(guān)閉老翘,從而導(dǎo)致會話中斷芹啥。在較輕的壓力下,系統(tǒng)可以自動降低捕獲質(zhì)量墓怀。

要避免此類中斷啤呼,需要使用KVO來監(jiān)視AVCaptureDevicesystemPressureState屬性的值呢袱,并在系統(tǒng)壓力增加時采取措施降低捕獲會話的性能影響羞福;例如惕蹄,通過降低捕獲幀速率。

20.2、總體水平level
@property(atomic, readonly) AVCaptureSystemPressureLevel level;

捕獲系統(tǒng)性能約束的整體表征卖陵。操作系統(tǒng)和硬件狀態(tài)的幾個方面會影響捕獲系統(tǒng)的性能和可用性遭顶。整體系統(tǒng)壓力水平代表最關(guān)鍵的潛在因素。

typedef NSString *AVCaptureSystemPressureLevel; 表示系統(tǒng)壓力水平的結(jié)構(gòu)

描述
AVCaptureSystemPressureLevelNominal 系統(tǒng)壓力水平正常(未加壓)泪蔫。
AVCaptureSystemPressureLevelFair 系統(tǒng)壓力略有升高棒旗。
AVCaptureSystemPressureLevelSerious 系統(tǒng)壓力大大提高。 捕獲性能可能會受到影響撩荣。 建議采用幀率限制铣揉。
AVCaptureSystemPressureLevelCritical 系統(tǒng)壓力嚴(yán)重升高。 捕獲質(zhì)量和性能受到顯著影響餐曹。 強(qiáng)烈建議使用幀速率限制逛拱。
AVCaptureSystemPressureLevelShutdown 系統(tǒng)壓力超出臨界值,因此捕獲系統(tǒng)已關(guān)閉台猴。當(dāng)系統(tǒng)壓力達(dá)到此水平時朽合,捕獲系統(tǒng)會自動關(guān)閉,從而導(dǎo)致會話中斷卿吐。在中斷通知的userInfo字典中使用AVCaptureSessionInterruptionSystemPressureStateKey來查找導(dǎo)致中斷的系統(tǒng)壓力因素的詳細(xì)信息旁舰。
20.3、影響因素
@property(atomic, readonly) AVCaptureSystemPressureFactors factors;

系統(tǒng)壓力水平的一系列根本原因嗡官。系統(tǒng)壓力水平較高時,可以使用此信息選擇如何緩解問題毯焕。
例如衍腥,在多鏡頭設(shè)備上由于AVCaptureSystemPressureFactorDepthModuleTemperature導(dǎo)致的高系統(tǒng)壓力可以通過限制深度捕獲幀速率來減少。

AVCaptureSystemPressureFactors 影響捕獲系統(tǒng)性能的一組因素纳猫。如果系統(tǒng)壓力級別為AVCaptureSystemPressureLevelNominal(即捕獲系統(tǒng)性能不受其他OS和硬件因素的影響)婆咸,則此值為空集。

描述
AVCaptureSystemPressureFactorNone 系統(tǒng)壓力目前是標(biāo)稱值芜辕。
AVCaptureSystemPressureFactorSystemTemperature 整個系統(tǒng)的熱負(fù)荷都很高尚骄。
AVCaptureSystemPressureFactorPeakPower 系統(tǒng)的峰值功率要求超過了電池的當(dāng)前容量。具有化學(xué)老化電池的設(shè)備不太能夠響應(yīng)總功率使用(CPU和GPU使用侵续,I/O倔丈,相機(jī)系統(tǒng),無線電等)的快速增加状蜗。當(dāng)設(shè)備檢測到這種情況時需五,可能會限制捕獲系統(tǒng)性能,以防止意外的設(shè)備關(guān)閉轧坎。
AVCaptureSystemPressureFactorDepthModuleTemperature 捕獲深度信息的模塊在升高的溫度下操作宏邮。隨著系統(tǒng)壓力的增加,深度質(zhì)量可能會降低。要從此因素降低系統(tǒng)壓力蜜氨,需要降低深度捕獲幀速率械筛。此因素僅適用于多鏡頭設(shè)備。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末飒炎,一起剝皮案震驚了整個濱河市埋哟,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌厌丑,老刑警劉巖定欧,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異怒竿,居然都是意外死亡砍鸠,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進(jìn)店門耕驰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來爷辱,“玉大人,你說我怎么就攤上這事朦肘》构” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵媒抠,是天一觀的道長弟断。 經(jīng)常有香客問我,道長趴生,這世上最難降的妖魔是什么阀趴? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮苍匆,結(jié)果婚禮上刘急,老公的妹妹穿的比我還像新娘。我一直安慰自己浸踩,他們只是感情好叔汁,可當(dāng)我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著检碗,像睡著了一般据块。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上后裸,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天瑰钮,我揣著相機(jī)與錄音,去河邊找鬼微驶。 笑死浪谴,一個胖子當(dāng)著我的面吹牛开睡,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播苟耻,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼篇恒,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了凶杖?” 一聲冷哼從身側(cè)響起胁艰,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎智蝠,沒想到半個月后腾么,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡杈湾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年解虱,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片漆撞。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡殴泰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出浮驳,到底是詐尸還是另有隱情悍汛,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布至会,位于F島的核電站离咐,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏奉件。R本人自食惡果不足惜健霹,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望瓶蚂。 院中可真熱鬧,春花似錦宣吱、人聲如沸窃这。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽杭攻。三九已至,卻和暖如春疤坝,著一層夾襖步出監(jiān)牢的瞬間兆解,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工跑揉, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留锅睛,地道東北人埠巨。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像现拒,于是被迫代替她去往敵國和親辣垒。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,786評論 2 345