Режим экспозиции AVCaptureDevice не поддерживается?

Я в замешательстве!

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

- (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;

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

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


person Patricia    schedule 04.12.2013    source источник


Ответы (2)


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

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

person HHK    schedule 25.04.2016

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

person Patricia    schedule 28.12.2013