19c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall/*
29c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall * Copyright (C) 2014 The Android Open Source Project
39c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall *
49c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall * Licensed under the Apache License, Version 2.0 (the "License");
59c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall * you may not use this file except in compliance with the License.
69c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall * You may obtain a copy of the License at
79c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall *
89c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall *      http://www.apache.org/licenses/LICENSE-2.0
99c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall *
109c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall * Unless required by applicable law or agreed to in writing, software
119c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall * distributed under the License is distributed on an "AS IS" BASIS,
129c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall * See the License for the specific language governing permissions and
149c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall * limitations under the License.
159c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall */
169c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall
179c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lallpackage com.android.camera.one.v2.common;
189c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall
199c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lallimport android.hardware.camera2.CaptureRequest;
209c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall
219c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lallimport com.android.camera.one.OneCamera;
229ad0984f36ff9cd133c61c4e979032988b77a995Puneet Lallimport com.google.common.base.Supplier;
239c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall
249c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall/**
259ad0984f36ff9cd133c61c4e979032988b77a995Puneet Lall * Computes the current AE Mode to use based on the current flash state.
269c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall */
279ad0984f36ff9cd133c61c4e979032988b77a995Puneet Lallpublic class FlashBasedAEMode implements Supplier<Integer> {
289ad0984f36ff9cd133c61c4e979032988b77a995Puneet Lall    private final Supplier<OneCamera.PhotoCaptureParameters.Flash> mFlash;
290db8a2fd5cc02753d42f34a1c858b980c6c277bbPaul Rohde    private final Supplier<Boolean> mHdrSceneMode;
309c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall
310db8a2fd5cc02753d42f34a1c858b980c6c277bbPaul Rohde    public FlashBasedAEMode(
320db8a2fd5cc02753d42f34a1c858b980c6c277bbPaul Rohde          Supplier<OneCamera.PhotoCaptureParameters.Flash> flash,
330db8a2fd5cc02753d42f34a1c858b980c6c277bbPaul Rohde          Supplier<Boolean> hdrSceneMode) {
349ad0984f36ff9cd133c61c4e979032988b77a995Puneet Lall        mFlash = flash;
350db8a2fd5cc02753d42f34a1c858b980c6c277bbPaul Rohde        mHdrSceneMode = hdrSceneMode;
369c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall    }
379c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall
389c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall    @Override
399ad0984f36ff9cd133c61c4e979032988b77a995Puneet Lall    public Integer get() {
400db8a2fd5cc02753d42f34a1c858b980c6c277bbPaul Rohde        // In the case that hdr scene mode is on, disable flash.
410db8a2fd5cc02753d42f34a1c858b980c6c277bbPaul Rohde        if (mHdrSceneMode.get()) {
420db8a2fd5cc02753d42f34a1c858b980c6c277bbPaul Rohde            return CaptureRequest.CONTROL_AE_MODE_ON;
430db8a2fd5cc02753d42f34a1c858b980c6c277bbPaul Rohde        }
440db8a2fd5cc02753d42f34a1c858b980c6c277bbPaul Rohde
459ad0984f36ff9cd133c61c4e979032988b77a995Puneet Lall        switch (mFlash.get()) {
469c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall            case AUTO:
479c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall                return CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH;
489c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall            case ON:
499c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall                return CaptureRequest.CONTROL_AE_MODE_ON_ALWAYS_FLASH;
509c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall            case OFF:
519c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall                return CaptureRequest.CONTROL_AE_MODE_ON;
529c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall            default:
539c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall                return CaptureRequest.CONTROL_AE_MODE_ON;
549c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall        }
559c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall    }
569c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall}
57