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