17db6d1eb6f124496a4fbc10733741c62d97d29d2Paul Rohde/*
27db6d1eb6f124496a4fbc10733741c62d97d29d2Paul Rohde * Copyright (C) 2015 The Android Open Source Project
37db6d1eb6f124496a4fbc10733741c62d97d29d2Paul Rohde *
47db6d1eb6f124496a4fbc10733741c62d97d29d2Paul Rohde * Licensed under the Apache License, Version 2.0 (the "License");
57db6d1eb6f124496a4fbc10733741c62d97d29d2Paul Rohde * you may not use this file except in compliance with the License.
67db6d1eb6f124496a4fbc10733741c62d97d29d2Paul Rohde * You may obtain a copy of the License at
77db6d1eb6f124496a4fbc10733741c62d97d29d2Paul Rohde *
87db6d1eb6f124496a4fbc10733741c62d97d29d2Paul Rohde *      http://www.apache.org/licenses/LICENSE-2.0
97db6d1eb6f124496a4fbc10733741c62d97d29d2Paul Rohde *
107db6d1eb6f124496a4fbc10733741c62d97d29d2Paul Rohde * Unless required by applicable law or agreed to in writing, software
117db6d1eb6f124496a4fbc10733741c62d97d29d2Paul Rohde * distributed under the License is distributed on an "AS IS" BASIS,
127db6d1eb6f124496a4fbc10733741c62d97d29d2Paul Rohde * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137db6d1eb6f124496a4fbc10733741c62d97d29d2Paul Rohde * See the License for the specific language governing permissions and
147db6d1eb6f124496a4fbc10733741c62d97d29d2Paul Rohde * limitations under the License.
157db6d1eb6f124496a4fbc10733741c62d97d29d2Paul Rohde */
167db6d1eb6f124496a4fbc10733741c62d97d29d2Paul Rohde
177db6d1eb6f124496a4fbc10733741c62d97d29d2Paul Rohdepackage com.android.camera.one.v2.common;
187db6d1eb6f124496a4fbc10733741c62d97d29d2Paul Rohde
197db6d1eb6f124496a4fbc10733741c62d97d29d2Paul Rohdeimport android.hardware.camera2.CaptureRequest;
207db6d1eb6f124496a4fbc10733741c62d97d29d2Paul Rohde
21bb27cc628ee84737c72b0368b8b27a5bf8609b56Paul Rohdeimport com.android.camera.one.OneCameraCharacteristics.FaceDetectMode;
227db6d1eb6f124496a4fbc10733741c62d97d29d2Paul Rohdeimport com.android.camera.one.OneCameraCharacteristics.SupportedHardwareLevel;
237db6d1eb6f124496a4fbc10733741c62d97d29d2Paul Rohdeimport com.google.common.base.Supplier;
247db6d1eb6f124496a4fbc10733741c62d97d29d2Paul Rohde
257db6d1eb6f124496a4fbc10733741c62d97d29d2Paul Rohde/**
26bb27cc628ee84737c72b0368b8b27a5bf8609b56Paul Rohde * Select a control mode based on the HdrSettings and face detection modes.
277db6d1eb6f124496a4fbc10733741c62d97d29d2Paul Rohde */
28bb27cc628ee84737c72b0368b8b27a5bf8609b56Paul Rohdepublic class ControlModeSelector implements Supplier<Integer> {
297db6d1eb6f124496a4fbc10733741c62d97d29d2Paul Rohde    private final Supplier<Boolean> mHdrSetting;
30bb27cc628ee84737c72b0368b8b27a5bf8609b56Paul Rohde    private final Supplier<FaceDetectMode> mFaceDetectMode;
317db6d1eb6f124496a4fbc10733741c62d97d29d2Paul Rohde    private final SupportedHardwareLevel mSupportedHardwareLevel;
327db6d1eb6f124496a4fbc10733741c62d97d29d2Paul Rohde
33bb27cc628ee84737c72b0368b8b27a5bf8609b56Paul Rohde    public ControlModeSelector(
34bb27cc628ee84737c72b0368b8b27a5bf8609b56Paul Rohde          Supplier<Boolean> hdrSetting,
35bb27cc628ee84737c72b0368b8b27a5bf8609b56Paul Rohde          Supplier<FaceDetectMode> faceDetectMode,
36bb27cc628ee84737c72b0368b8b27a5bf8609b56Paul Rohde          SupportedHardwareLevel supportedHardwareLevel) {
377db6d1eb6f124496a4fbc10733741c62d97d29d2Paul Rohde        mHdrSetting = hdrSetting;
38bb27cc628ee84737c72b0368b8b27a5bf8609b56Paul Rohde        mFaceDetectMode = faceDetectMode;
397db6d1eb6f124496a4fbc10733741c62d97d29d2Paul Rohde        mSupportedHardwareLevel = supportedHardwareLevel;
407db6d1eb6f124496a4fbc10733741c62d97d29d2Paul Rohde    }
417db6d1eb6f124496a4fbc10733741c62d97d29d2Paul Rohde
427db6d1eb6f124496a4fbc10733741c62d97d29d2Paul Rohde    @Override
437db6d1eb6f124496a4fbc10733741c62d97d29d2Paul Rohde    public Integer get() {
447db6d1eb6f124496a4fbc10733741c62d97d29d2Paul Rohde        if (mSupportedHardwareLevel == SupportedHardwareLevel.LEGACY) {
457db6d1eb6f124496a4fbc10733741c62d97d29d2Paul Rohde            if (mHdrSetting.get()) {
467db6d1eb6f124496a4fbc10733741c62d97d29d2Paul Rohde                return CaptureRequest.CONTROL_MODE_USE_SCENE_MODE;
477db6d1eb6f124496a4fbc10733741c62d97d29d2Paul Rohde            }
487db6d1eb6f124496a4fbc10733741c62d97d29d2Paul Rohde        }
497db6d1eb6f124496a4fbc10733741c62d97d29d2Paul Rohde
50bb27cc628ee84737c72b0368b8b27a5bf8609b56Paul Rohde        if (mFaceDetectMode.get() == FaceDetectMode.FULL ||
51bb27cc628ee84737c72b0368b8b27a5bf8609b56Paul Rohde              mFaceDetectMode.get() == FaceDetectMode.SIMPLE) {
52bb27cc628ee84737c72b0368b8b27a5bf8609b56Paul Rohde            return CaptureRequest.CONTROL_MODE_USE_SCENE_MODE;
53bb27cc628ee84737c72b0368b8b27a5bf8609b56Paul Rohde        }
54bb27cc628ee84737c72b0368b8b27a5bf8609b56Paul Rohde
55bb27cc628ee84737c72b0368b8b27a5bf8609b56Paul Rohde        return CaptureRequest.CONTROL_MODE_AUTO;
567db6d1eb6f124496a4fbc10733741c62d97d29d2Paul Rohde    }
577db6d1eb6f124496a4fbc10733741c62d97d29d2Paul Rohde}
58