1b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgren/*
2b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgren * Copyright (C) 2014 The Android Open Source Project
3b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgren *
4b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgren * Licensed under the Apache License, Version 2.0 (the "License");
5b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgren * you may not use this file except in compliance with the License.
6b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgren * You may obtain a copy of the License at
7b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgren *
8b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgren *      http://www.apache.org/licenses/LICENSE-2.0
9b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgren *
10b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgren * Unless required by applicable law or agreed to in writing, software
11b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgren * distributed under the License is distributed on an "AS IS" BASIS,
12b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgren * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgren * See the License for the specific language governing permissions and
14b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgren * limitations under the License.
15b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgren */
16b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgren
17b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgrenpackage com.android.camera.hardware;
18b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgren
19831347d9cb5c0e3f03db7aadfc89e91b231104e7Angus Kongimport com.android.camera.app.CameraProvider;
20b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgrenimport com.android.camera.util.GcamHelper;
215a344964cb003525727c31d295ca3a592c245606Sol Boucherimport com.android.ex.camera2.portability.CameraCapabilities;
22b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgren
23b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgren/**
24b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgren * HardwareSpecImpl is the default implementation of
25b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgren * {@link com.android.camera.hardware.HardwareSpec} for
26b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgren * a camera device opened using the {@link android.hardware.Camera}
27b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgren * api.
28b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgren */
29b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgrenpublic class HardwareSpecImpl implements HardwareSpec {
30b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgren
31b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgren    private final boolean mIsFrontCameraSupported;
32b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgren    private final boolean mIsHdrSupported;
33b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgren    private final boolean mIsHdrPlusSupported;
34b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgren    private final boolean mIsFlashSupported;
35b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgren
36b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgren    /**
37b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgren     * Compute the supported values for all
38b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgren     * {@link com.android.camera.hardware.HardwareSpec} methods
396607dae6c4d1ee5bbf572695c2042d4d9129a730Angus Kong     */
40831347d9cb5c0e3f03db7aadfc89e91b231104e7Angus Kong    public HardwareSpecImpl(CameraProvider provider, CameraCapabilities capabilities) {
416607dae6c4d1ee5bbf572695c2042d4d9129a730Angus Kong        // Cache whether front camera is supported.
42831347d9cb5c0e3f03db7aadfc89e91b231104e7Angus Kong        mIsFrontCameraSupported = (provider.getFirstFrontCameraId() != -1);
436607dae6c4d1ee5bbf572695c2042d4d9129a730Angus Kong
446607dae6c4d1ee5bbf572695c2042d4d9129a730Angus Kong        // Cache whether hdr is supported.
456607dae6c4d1ee5bbf572695c2042d4d9129a730Angus Kong        mIsHdrSupported = capabilities.supports(CameraCapabilities.SceneMode.HDR);
466607dae6c4d1ee5bbf572695c2042d4d9129a730Angus Kong
476607dae6c4d1ee5bbf572695c2042d4d9129a730Angus Kong        // Cache whether hdr plus is supported.
486607dae6c4d1ee5bbf572695c2042d4d9129a730Angus Kong        mIsHdrPlusSupported = GcamHelper.hasGcamCapture();
496607dae6c4d1ee5bbf572695c2042d4d9129a730Angus Kong
506607dae6c4d1ee5bbf572695c2042d4d9129a730Angus Kong        // Cache whether flash is supported.
51831347d9cb5c0e3f03db7aadfc89e91b231104e7Angus Kong        mIsFlashSupported = isFlashSupported(capabilities);
526607dae6c4d1ee5bbf572695c2042d4d9129a730Angus Kong    }
536607dae6c4d1ee5bbf572695c2042d4d9129a730Angus Kong
54b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgren    @Override
55b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgren    public boolean isFrontCameraSupported() {
56b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgren        return mIsFrontCameraSupported;
57b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgren    }
58b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgren
59b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgren    @Override
60b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgren    public boolean isHdrSupported() {
61b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgren        return mIsHdrSupported;
62b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgren    }
63b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgren
64b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgren    @Override
65b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgren    public boolean isHdrPlusSupported() {
66b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgren        return mIsHdrPlusSupported;
67b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgren    }
68b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgren
69b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgren    @Override
70b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgren    public boolean isFlashSupported() {
71b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgren        return mIsFlashSupported;
72b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgren    }
73b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgren
74b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgren    /**
75b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgren     * Returns whether flash is supported and flash has more than
76b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgren     * one possible value.
77b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgren     */
78831347d9cb5c0e3f03db7aadfc89e91b231104e7Angus Kong    private boolean isFlashSupported(CameraCapabilities capabilities) {
79831347d9cb5c0e3f03db7aadfc89e91b231104e7Angus Kong        return (capabilities.supports(CameraCapabilities.FlashMode.AUTO) || capabilities.supports
80831347d9cb5c0e3f03db7aadfc89e91b231104e7Angus Kong                (CameraCapabilities.FlashMode.ON));
81b1641f5df0cf839b54385ea4d2e43521620fc237Erin Dahlgren    }
826607dae6c4d1ee5bbf572695c2042d4d9129a730Angus Kong}
83