(Приложение iOS Cam) Как настроить режим вспышки, чтобы согласовать поведение вспышки с системным приложением Apple Camera?
Я разрабатываю собственное приложение камеры для iOS 15 и столкнулся с трудностями при работе над механизмом вспышки, чтобы он работал как родное приложение «Камера». Я заметил, что когда я звоню
[_photoOutput capturePhotoWithSettings:photoSettings delegate:self];
У меня может быть несколько настроек фотографий, например:
//prepared setting
_photoOutput.preparedPhotoSettingsArray[0];
//monitoring setting
_photoOutput.photoSettingsForSceneMonitoring;
//capturing setting, actually the resolved setting by checking uniqueID in - (void)captureOutput:(AVCapturePhotoOutput *)output willBeginCaptureForResolvedSettings:(AVCaptureResolvedPhotoSettings *)resolvedSettings
photoSettings;
Каждая настройка фотографии имеет уникальный идентификатор и свойство flashMode. Я предполагаю, что _photoOutput.isFlashScene рассчитывается с помощью photoSettingsForSceneMonitoring.flashMode и isAutoStillImageStabilizationEnabled(SIS), но SIS помечен как устаревший и заменен на photoQualityPrioritization из iOS 13.
Таким образом, существует множество факторов, влияющих на поведение вспышки. У меня нет четкого представления о том, как настроить их для согласования с системной флэш-памятью. В моей ситуации при использовании фронтальной камеры с истинной глубиной я сначала настраиваю photoOutput в сеансе настройки камеры.
_photoOutput = [[AVCapturePhotoOutput alloc] init];
_photoOutput.highResolutionCaptureEnabled = YES;
_photoOutput.maxPhotoQualityPrioritization = AVCapturePhotoQualityPrioritizationQuality;
AVCapturePhotoSettings *settingForMonitoring = [AVCapturePhotoSettings photoSettings];
settingForMonitoring.flashMode = AVCaptureFlashModeAuto;
_photoOutput.photoSettingsForSceneMonitoring = settingForMonitoring;
...other settings
При нажатии кнопки захвата я использую следующие настройки:
...other settings
photoSettings = [AVCapturePhotoSettings photoSettings];
photoSettings.photoQualityPrioritization = AVCapturePhotoQualityPrioritizationQuality;
photoSettings.flashMode = AVCaptureFlashModeAuto;
if (self.inputCamera.exposureTargetBias != 0) {
photoSettings.flashMode = AVCaptureFlashModeOff;
}
...other settings
[_photoOutput capturePhotoWithSettings:photoSettings delegate:self];
Эти коды отлично работают при дневном свете, как и Apple Camera. Однако в сумерках вспышка всегда срабатывает, даже в помещении с включенным светом, что приводит к плохому качеству фотографий (высокое значение ISO и более длительная выдержка). Между тем, камера Apple не использует вспышку и обеспечивает лучшее качество изображения.
Я хочу подавить срабатывание вспышки в сумерках и работу ночью. Может ли кто-нибудь сказать мне, как настроить эти режимы вспышки или какие-либо другие параметры, которые мне могут не хватать? Спасибо!