xie
2024-11-23 3fdfdea0721fe7a36f6aaa509075f01a194f6748
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
/*
 * Copyright (C) 2015 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
 
package com.android.camera.one;
 
import com.android.camera.async.Observable;
import com.android.camera.async.Observables;
import com.android.camera.device.CameraId;
import com.android.camera.hardware.HardwareSpec;
import com.android.camera.one.OneCamera.Facing;
import com.android.camera.settings.Keys;
import com.android.camera.settings.ResolutionSetting;
import com.android.camera.settings.SettingObserver;
import com.android.camera.settings.SettingsManager;
import com.android.camera.util.Size;
import com.google.common.base.Function;
 
/**
 * Contains related settings to configure a camera for a particular type of
 * capture.
 */
public class OneCameraCaptureSetting {
    private final Size mCaptureSize;
    private final Observable<OneCamera.PhotoCaptureParameters.Flash> mFlashSetting;
    private final Observable<Integer> mExposureSetting;
    private final Observable<Boolean> mHdrSceneSetting;
    private final boolean mIsHdrPlusEnabled;
 
    public static OneCameraCaptureSetting create(
            Size pictureSize,
            SettingsManager settingsManager,
            final HardwareSpec hardwareSpec,
            String cameraSettingScope,
            boolean isHdrPlusEnabled) {
        Observable<OneCamera.PhotoCaptureParameters.Flash> flashSetting;
        if (hardwareSpec.isFlashSupported()) {
            flashSetting = new FlashSetting(SettingObserver.ofString(
                        settingsManager, cameraSettingScope, Keys.KEY_FLASH_MODE));
        } else {
            flashSetting = new FlashSetting(Observables.of("off"));
        }
        Observable<Integer> exposureSetting = SettingObserver.ofInteger(
                settingsManager, cameraSettingScope, Keys.KEY_EXPOSURE);
        Observable<Boolean> hdrSceneSetting;
        if (hardwareSpec.isHdrSupported()) {
            hdrSceneSetting = SettingObserver.ofBoolean(settingsManager,
                    SettingsManager.SCOPE_GLOBAL, Keys.KEY_CAMERA_HDR);
        } else {
            hdrSceneSetting = Observables.of(false);
        }
        return new OneCameraCaptureSetting(
                pictureSize,
                flashSetting,
                exposureSetting,
                hdrSceneSetting,
                isHdrPlusEnabled);
    }
 
    private OneCameraCaptureSetting(
            Size captureSize,
            Observable<OneCamera.PhotoCaptureParameters.Flash> flashSetting,
            Observable<Integer> exposureSetting,
            Observable<Boolean> hdrSceneSetting,
            boolean isHdrPlusEnabled) {
        mCaptureSize = captureSize;
        mFlashSetting = flashSetting;
        mExposureSetting = exposureSetting;
        mHdrSceneSetting = hdrSceneSetting;
        mIsHdrPlusEnabled = isHdrPlusEnabled;
    }
 
    public Size getCaptureSize() {
        return mCaptureSize;
    }
 
    public Observable<OneCamera.PhotoCaptureParameters.Flash> getFlashSetting() {
        return mFlashSetting;
    }
 
    public Observable<Integer> getExposureSetting() {
        return mExposureSetting;
    }
 
    public Observable<Boolean> getHdrSceneSetting() {
        return mHdrSceneSetting;
    }
 
    public boolean isHdrPlusEnabled() {
        return mIsHdrPlusEnabled;
    }
}