AVFoundation Focus Mode iPad2 - PullRequest
       7

AVFoundation Focus Mode iPad2

2 голосов
/ 02 февраля 2012

Я пытаюсь заставить автофокус работать в моем приложении, протестированном в iPad2.Моя проблема в том, что когда я вызывал методы проверки, такие как isFocusModeSupported:AVCaptureFocusModeContinuousAutoFocus, он всегда возвращал NO.Тем не менее, я могу нажать, чтобы сфокусироваться с другими приложениями камеры на моем устройстве

devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo];
for (AVCaptureDevice *tempDevice in devices) {
    [tempDevice lockForConfiguration:nil];
    if ([tempDevice isFocusModeSupported:AVCaptureFocusModeAutoFocus]) {
        NSLog(@"Here");
    }

    if ([tempDevice isFocusModeSupported:AVCaptureFocusModeContinuousAutoFocus]) {
        NSLog(@"Here");
    }

    if ([tempDevice isFocusModeSupported:AVCaptureFocusModeLocked]) {
        NSLog(@"Here");
    }

    if ([tempDevice isFocusPointOfInterestSupported]) {
        NSLog(@"Here");
    }
    [tempDevice unlockForConfiguration];
}

1 Ответ

7 голосов
/ 01 мая 2012

Я просто смотрел на это сегодня вечером. Из того, что я понял, iPad 2 не делает фокусировки - он делает регулировку экспозиции - так что в приложении «Камера» по умолчанию нажатие на экран приводит к появлению прямоугольника в месте касания с указанием области настройка точки белого вкл.

Возможно, я ошибаюсь, но это то, что я обнаружил, и, кажется, это подтверждается вашими API (isFocusModeSupported:AVCaptureFocusModeContinuousAutoFocus возвращающими НЕТ) тестами.

Камеры в iPad 2 довольно слабые - особенно передняя. Я удивлен, что Apple отправила это.

ОБНОВЛЕНИЕ: Это код из более свежего образца Apple AVCamDemo, который обрабатывает фокусировку + экспозицию + белую точку. Я не думаю, что это в примере AVCam. AVCamDemo может быть доступен только для загрузки пакета кода .dmg WWDC из центра разработчиков, а не для отдельной загрузки из Интернета. На моем iPad 2 код экспозиции никогда не вызывается. // - от AVCamDemo:

- (BOOL) hasExposure
 {
AVCaptureDevice *device = [[self videoInput] device];

return  [device isExposureModeSupported:AVCaptureExposureModeLocked] ||
        [device isExposureModeSupported:AVCaptureExposureModeAutoExpose] ||
        [device isExposureModeSupported:AVCaptureExposureModeContinuousAutoExposure];
}

- (AVCaptureExposureMode) exposureMode
{
return [[[self videoInput] device] exposureMode];
}

- (void) setExposureMode:(AVCaptureExposureMode)exposureMode
{
if (exposureMode == 1) {
    exposureMode = 2;
}
AVCaptureDevice *device = [[self videoInput] device];
if ([device isExposureModeSupported:exposureMode] && [device exposureMode] != exposureMode) {
    NSError *error;
    if ([device lockForConfiguration:&error]) {
        [device setExposureMode:exposureMode];
        [device unlockForConfiguration];
    } else {
        id delegate = [self delegate];
        if ([delegate respondsToSelector:@selector(acquiringDeviceLockFailedWithError:)]) {
            [delegate acquiringDeviceLockFailedWithError:error];
        }
    }
}
}

- (BOOL) hasWhiteBalance
{
AVCaptureDevice *device = [[self videoInput] device];

return  [device isWhiteBalanceModeSupported:AVCaptureWhiteBalanceModeLocked] ||
        [device isWhiteBalanceModeSupported:AVCaptureWhiteBalanceModeAutoWhiteBalance];
}

- (AVCaptureWhiteBalanceMode) whiteBalanceMode
{
return [[[self videoInput] device] whiteBalanceMode];
}

- (void) setWhiteBalanceMode:(AVCaptureWhiteBalanceMode)whiteBalanceMode
{
if (whiteBalanceMode == 1) {
    whiteBalanceMode = 2;
}    
AVCaptureDevice *device = [[self videoInput] device];
if ([device isWhiteBalanceModeSupported:whiteBalanceMode] && [device whiteBalanceMode] != whiteBalanceMode) {
    NSError *error;
    if ([device lockForConfiguration:&error]) {
        [device setWhiteBalanceMode:whiteBalanceMode];
        [device unlockForConfiguration];
    } else {
        id delegate = [self delegate];
        if ([delegate respondsToSelector:@selector(acquiringDeviceLockFailedWithError:)]) {
            [delegate acquiringDeviceLockFailedWithError:error];
        }
    }
}
}

- (BOOL) hasFocus
{
AVCaptureDevice *device = [[self videoInput] device];

return  [device isFocusModeSupported:AVCaptureFocusModeLocked] ||
        [device isFocusModeSupported:AVCaptureFocusModeAutoFocus] ||
        [device isFocusModeSupported:AVCaptureFocusModeContinuousAutoFocus];
}

- (AVCaptureFocusMode) focusMode
{
return [[[self videoInput] device] focusMode];
}

- (void) setFocusMode:(AVCaptureFocusMode)focusMode
{


AVCaptureDevice *device = [[self videoInput] device];
if ([device isFocusModeSupported:focusMode] && [device focusMode] != focusMode) {
    NSError *error;

      printf(" setFocusMode    \n");
    if ([device lockForConfiguration:&error]) {
        [device setFocusMode:focusMode];
        [device unlockForConfiguration];
    } else {
        id delegate = [self delegate];
        if ([delegate respondsToSelector:@selector(acquiringDeviceLockFailedWithError:)]) {
            [delegate acquiringDeviceLockFailedWithError:error];
        }
    }    
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...