Вспышка Camera2: как управлять настройками вспышки при выключенной автоматической экспозиции (CONTROL_AE_MODE_OFF) - PullRequest
0 голосов
/ 22 октября 2018

Я работаю на камеру2, где пользователь может включить / выключить автоэкспозицию.Пользователь также может переключаться между различными режимами вспышки (Вкл, Выкл, Авто).Ниже приведен код для обработки того же

public void updateBuilder(@NonNull CaptureRequest.Builder requestBuilder) {
        if (mIsFlashSupported) {
            switch (mFlashMode) {
            case FLASH_ON:
                requestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CameraMetadata.CONTROL_AE_MODE_ON_ALWAYS_FLASH);
                requestBuilder.set(CaptureRequest.FLASH_MODE, CameraMetadata.FLASH_MODE_OFF);
                break;
            case FLASH_OFF:
                requestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CameraMetadata.CONTROL_AE_MODE_ON);
                requestBuilder.set(CaptureRequest.FLASH_MODE, CameraMetadata.FLASH_MODE_OFF);
                break;
            case FLASH_AUTO:
                requestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CameraMetadata.CONTROL_AE_MODE_ON_AUTO_FLASH);
                requestBuilder.set(CaptureRequest.FLASH_MODE, CameraMetadata.FLASH_MODE_OFF);
                break;
            case TORCH:
                requestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CameraMetadata.CONTROL_AE_MODE_ON);
                requestBuilder.set(CaptureRequest.FLASH_MODE, CameraMetadata.FLASH_MODE_TORCH);
                break;
            }
        } else {
            requestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CameraMetadata.CONTROL_AE_MODE_ON);
            requestBuilder.set(CaptureRequest.FLASH_MODE, CameraMetadata.FLASH_MODE_OFF);
        }

        if (!mAutoExposure) {
            requestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CameraMetadata.CONTROL_AE_MODE_OFF);
            requestBuilder.set(CaptureRequest.SENSOR_EXPOSURE_TIME, (long) (mShutterSpeed * 1000000000L));
            requestBuilder.set(CaptureRequest.SENSOR_SENSITIVITY, mIso);
            requestBuilder.set(CaptureRequest.SENSOR_FRAME_DURATION, mFrameDuration);
        }
}

Проблема в том, что для mAutoExposure установлено значение False (когда автоматическая экспозиция отключена).Вспышка перестает работать, возможно, из-за этой строки во втором блоке if

requestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CameraMetadata.CONTROL_AE_MODE_OFF);

Может кто-нибудь дать мне знать, как включить управление вспышкой даже при выключенной автоматической экспозиции

...