设置自定义模式时,相机的曝光自动更改 - ios,objective-c

时间:2016-04-22 03:22:59

标签: ios objective-c camera avcapturesession avcapturedevice

我正在使用AVCaptureDevice捕获视频帧以进行一些图像处理,并希望通过使用

来控制曝光持续时间,ISO
setExposureModeCustomWithDuration:(CMTime)duration ISO:(float)ISO completionHandler:(void (^)(CMTime syncTime))handler

我认为这将保持曝光水平作为我的设置。

当我将模式设置为AVCaptureExposureModeCustom时,我可以看到当我移动相机捕捉不同位置时预览图像的亮度发生了变化。 (特别是从光明到黑暗的一面)

但是当我将曝光模式更改为AVCaptureExposureModeLocked时,亮度将会固定。

我一直在检查白平衡,焦点,火炬模式被锁定或禁用,isAdjustingExposure保持虚假, 在此问题发生时,曝光持续时间和ISO参数不会发生变化。

- (void) setCameraExposure:(CMTime)exposureDuration ISO:(int)iso
{
    [self.avSession beginConfiguration];

    AVCaptureDevice *videoDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];

    if (videoDevice) {

        [videoDevice lockForConfiguration:nil];

        // Set exposure duration and ISO in custom mode
        if ([videoDevice isExposureModeSupported:AVCaptureExposureModeCustom]) {

            [videoDevice setExposureModeCustomWithDuration:exposureDuration
                                                       ISO:iso
                                         completionHandler:nil];
        }

        // If I use AVCaptureExposureModeLocked, the brightness was fixed
        //if ([videoDevice isExposureModeSupported:AVCaptureExposureModeLocked]) {
        //    [videoDevice setExposureMode:AVCaptureExposureModeLocked];
        //}

        // Lock white balance
        if ([videoDevice isWhiteBalanceModeSupported:AVCaptureWhiteBalanceModeLocked]) {
            [videoDevice setWhiteBalanceMode:AVCaptureWhiteBalanceModeLocked];
        }

        [videoDevice unlockForConfiguration];
    }

    [self.avSession commitConfiguration];
}

我希望相机在使用 AVCaptureExposureModeCustom 时不会改变亮度,是否可能? 我尝试了多种变体,但它们似乎都没有效果。有什么想法吗?

0 个答案:

没有答案