2013-12-04 4 views
0

Я в замешательстве!AVCaptureDevice exposureMode не поддерживается?

Я пытаюсь вручную настроить экспозицию, чтобы она соответствовала CGPoint в центре предварительного просмотра. Я беру объект устройства и использую setExposureMode и setExposurePointOfInterest, чтобы выполнить манипуляции. Первое, что я делаю, это проверить, поддерживается ли режим экспозиции устройством. Если не поддерживается, верните. Если он поддерживается, установите значения. Моя путаница связана с тем фактом, что значение для устройства isExposureModeSupported: exposureMode возвращает NO. Но это поддерживается! У меня iPhone 5c. Если я игнорирую оператор return, я не получаю никаких ошибок.

- (void)device:(AVCaptureDevice *)device exposureMode:(AVCaptureExposureMode)exposureMode atPoint:(CGPoint)point 
{ 
    BOOL exposureModeSupported = [device isExposureModeSupported:exposureMode]; 
    if (!exposureModeSupported) 
     return; 

    if ([device lockForConfiguration:&error]) { 
     [device setExposureMode:AVCaptureExposureModeContinuousAutoExposure]; 
     [device setExposurePointOfInterest:point]; 

     CALayer *exposeRect = [CALayer layer]; 
     exposeRect.frame = CGRectMake(self.center.x-30, self.center.y-30, 60, 60); 
     exposeRect.borderColor = [UIColor whiteColor].CGColor; 
     exposeRect.borderWidth = 2; 
     exposeRect.name = @"exposeRect"; 
     [self.previewLayer addSublayer:exposeRect]; 
     [NSTimer scheduledTimerWithTimeInterval: 1 
             target: self 
             selector: @selector(dismissExposeRect) 
             userInfo: nil 
             repeats: NO]; 
     [device setExposureMode:AVCaptureExposureModeContinuousAutoExposure]; 
     [device unlockForConfiguration]; 
    } 
} 

Как проверить, поддерживается ли режим экспозиции, если я не могу доверять возвращаемому значению?

Я закончил с проверкой, но я не уверен, что это правильный способ проверить. Состояние теперь выглядит следующим образом:

if (![device isExposurePointOfInterestSupported] && ![device isExposureModeSupported:exposureMode]) 
    return; 

Кто-нибудь еще сталкивался это и кто-нибудь знает, как правильно обращаться с этим?

Заранее спасибо.

ответ

0

Я думаю, никто не хотел звонить в этот. Я закончил И-проверку, но я не уверен, что это правильный способ проверить, но это сработало.

1

Да, вы должны проверить наличие exposurePointOfInterestSupported И isExposureModeSupported:.

В вашем случае вы проверяете, поддерживается ли AVCaptureExposureMode в качестве аргумента в вашей функции, но установите значение AVCaptureExposureModeContinuousAutoExposure, что не обязательно поддерживается.