CameraCapabilities.java revision f2b5a976bb1c30f83682a996ce9289a973c88784
1c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong/* 2c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Copyright (C) 2014 The Android Open Source Project 3c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * 4c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Licensed under the Apache License, Version 2.0 (the "License"); 5c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * you may not use this file except in compliance with the License. 6c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * You may obtain a copy of the License at 7c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * 8c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * http://www.apache.org/licenses/LICENSE-2.0 9c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * 10c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Unless required by applicable law or agreed to in writing, software 11c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * distributed under the License is distributed on an "AS IS" BASIS, 12c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * See the License for the specific language governing permissions and 14c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * limitations under the License. 15c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 16c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 17c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kongpackage com.android.ex.camera2.portability; 18c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 19c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kongimport com.android.ex.camera2.portability.debug.Log; 20c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 21c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kongimport java.util.ArrayList; 22c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kongimport java.util.EnumSet; 23c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kongimport java.util.HashSet; 24c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kongimport java.util.List; 25c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kongimport java.util.Set; 26c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kongimport java.util.TreeSet; 27c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 288097973089420749dcd1ab4974a629c2466b31ccAngus Kong/** 298097973089420749dcd1ab4974a629c2466b31ccAngus Kong * This class holds all the static information of a camera's capabilities. 308097973089420749dcd1ab4974a629c2466b31ccAngus Kong * <p> 318097973089420749dcd1ab4974a629c2466b31ccAngus Kong * The design of this class is thread-safe and can be passed around regardless 328097973089420749dcd1ab4974a629c2466b31ccAngus Kong * of which thread using it. 338097973089420749dcd1ab4974a629c2466b31ccAngus Kong * </p> 348097973089420749dcd1ab4974a629c2466b31ccAngus Kong */ 35c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kongpublic class CameraCapabilities { 36c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 37a0842b40441db5332a5290f941021636b1182761Sol Boucher private static Log.Tag TAG = new Log.Tag("CamCapabs"); 388097973089420749dcd1ab4974a629c2466b31ccAngus Kong 398097973089420749dcd1ab4974a629c2466b31ccAngus Kong /* All internal states are declared final and should be thread-safe. */ 40c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 41c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong protected final ArrayList<int[]> mSupportedPreviewFpsRange = new ArrayList<int[]>(); 428097973089420749dcd1ab4974a629c2466b31ccAngus Kong protected final ArrayList<Size> mSupportedPreviewSizes = new ArrayList<Size>(); 43c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong protected final TreeSet<Integer> mSupportedPreviewFormats = new TreeSet<Integer>(); 448097973089420749dcd1ab4974a629c2466b31ccAngus Kong protected final ArrayList<Size> mSupportedVideoSizes = new ArrayList<Size>(); 458097973089420749dcd1ab4974a629c2466b31ccAngus Kong protected final ArrayList<Size> mSupportedPhotoSizes = new ArrayList<Size>(); 468097973089420749dcd1ab4974a629c2466b31ccAngus Kong protected final TreeSet<Integer> mSupportedPhotoFormats = new TreeSet<Integer>(); 47c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong protected final EnumSet<SceneMode> mSupportedSceneModes = EnumSet.noneOf(SceneMode.class); 48c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong protected final EnumSet<FlashMode> mSupportedFlashModes = EnumSet.noneOf(FlashMode.class); 49c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong protected final EnumSet<FocusMode> mSupportedFocusModes = EnumSet.noneOf(FocusMode.class); 50c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong protected final EnumSet<WhiteBalance> mSupportedWhiteBalances = 51c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong EnumSet.noneOf(WhiteBalance.class); 52c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong protected final EnumSet<Feature> mSupportedFeatures = EnumSet.noneOf(Feature.class); 538097973089420749dcd1ab4974a629c2466b31ccAngus Kong protected Size mPreferredPreviewSizeForVideo; 54c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong protected int mMinExposureCompensation; 55c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong protected int mMaxExposureCompensation; 56c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong protected float mExposureCompensationStep; 57c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong protected int mMaxNumOfFacesSupported; 58c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong protected int mMaxNumOfFocusAreas; 59c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong protected int mMaxNumOfMeteringArea; 608097973089420749dcd1ab4974a629c2466b31ccAngus Kong protected int mMaxZoomRatio; 6101e7c02174ef268b6d6daaa5a5bb4f752d55964cAngus Kong protected float mHorizontalViewAngle; 6201e7c02174ef268b6d6daaa5a5bb4f752d55964cAngus Kong protected float mVerticalViewAngle; 63c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong private final Stringifier mStringifier; 648097973089420749dcd1ab4974a629c2466b31ccAngus Kong protected final ArrayList<Integer> mZoomRatioList = new ArrayList<Integer>(); 658097973089420749dcd1ab4974a629c2466b31ccAngus Kong protected int mMaxZoomIndex; 66c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 678097973089420749dcd1ab4974a629c2466b31ccAngus Kong /** 688097973089420749dcd1ab4974a629c2466b31ccAngus Kong * Focus modes. 698097973089420749dcd1ab4974a629c2466b31ccAngus Kong */ 70c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong public enum FocusMode { 71c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 72c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Continuous auto focus mode intended for taking pictures. 73c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#FOCUS_MODE_AUTO}. 74c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 75c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong AUTO, 76c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 77c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Continuous auto focus mode intended for taking pictures. 78c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#FOCUS_MODE_CONTINUOUS_PICTURE}. 79c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 80c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong CONTINUOUS_PICTURE, 81c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 82c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Continuous auto focus mode intended for video recording. 83c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#FOCUS_MODE_CONTINUOUS_VIDEO}. 84c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 85c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong CONTINUOUS_VIDEO, 86c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 87c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Extended depth of field (EDOF). 88c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#FOCUS_MODE_EDOF}. 89c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 90c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong EXTENDED_DOF, 91c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 92c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Focus is fixed. 93c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#FOCUS_MODE_FIXED}. 94c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 95c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong FIXED, 96c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 97c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Focus is set at infinity. 98c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#FOCUS_MODE_INFINITY}. 99c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 100de48004068f8c16f9a56c60b0ed2485a67687b4bSol Boucher // TODO: Unsupported on API 2 101c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong INFINITY, 102c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 103c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Macro (close-up) focus mode. 104c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#FOCUS_MODE_MACRO}. 105c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 106c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong MACRO, 107c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 108c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 1098097973089420749dcd1ab4974a629c2466b31ccAngus Kong /** 1108097973089420749dcd1ab4974a629c2466b31ccAngus Kong * Flash modes. 1118097973089420749dcd1ab4974a629c2466b31ccAngus Kong */ 112c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong public enum FlashMode { 113c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 1148097973089420749dcd1ab4974a629c2466b31ccAngus Kong * No flash. 1158097973089420749dcd1ab4974a629c2466b31ccAngus Kong */ 1168097973089420749dcd1ab4974a629c2466b31ccAngus Kong NO_FLASH, 1178097973089420749dcd1ab4974a629c2466b31ccAngus Kong /** 118c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Flash will be fired automatically when required. 119c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#FLASH_MODE_OFF}. 120c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 121c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong AUTO, 122c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 123c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Flash will not be fired. 124c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#FLASH_MODE_OFF}. 125c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 126c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong OFF, 127c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 128c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Flash will always be fired during snapshot. 129c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#FLASH_MODE_ON}. 130c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 131c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong ON, 132c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 133c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Constant emission of light during preview, auto-focus and snapshot. 134c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#FLASH_MODE_TORCH}. 135c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 136c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong TORCH, 137c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 138c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Flash will be fired in red-eye reduction mode. 139c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#FLASH_MODE_RED_EYE}. 140c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 141c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong RED_EYE, 142c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 143c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 1448097973089420749dcd1ab4974a629c2466b31ccAngus Kong /** 1458097973089420749dcd1ab4974a629c2466b31ccAngus Kong * Scene modes. 1468097973089420749dcd1ab4974a629c2466b31ccAngus Kong */ 147c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong public enum SceneMode { 148c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 1498097973089420749dcd1ab4974a629c2466b31ccAngus Kong * No supported scene mode. 1508097973089420749dcd1ab4974a629c2466b31ccAngus Kong */ 1518097973089420749dcd1ab4974a629c2466b31ccAngus Kong NO_SCENE_MODE, 1528097973089420749dcd1ab4974a629c2466b31ccAngus Kong /** 153c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Scene mode is off. 154c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_AUTO}. 155c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 156c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong AUTO, 157c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 158c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Take photos of fast moving objects. 159c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_ACTION}. 160c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 161c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong ACTION, 162c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 163c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Applications are looking for a barcode. 164c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_BARCODE}. 165c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 166c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong BARCODE, 167c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 168c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Take pictures on the beach. 169c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_BEACH}. 170c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 171c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong BEACH, 172c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 173c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Capture the naturally warm color of scenes lit by candles. 174c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_CANDLELIGHT}. 175c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 176c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong CANDLELIGHT, 177c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 178c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * For shooting firework displays. 179c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_FIREWORKS}. 180c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 181c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong FIREWORKS, 182c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 183c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Capture a scene using high dynamic range imaging techniques. 184c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_HDR}. 185c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 186de48004068f8c16f9a56c60b0ed2485a67687b4bSol Boucher // TODO: Unsupported on API 2 187c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong HDR, 188c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 189c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Take pictures on distant objects. 190c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_LANDSCAPE}. 191c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 192c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong LANDSCAPE, 193c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 194c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Take photos at night. 195c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_NIGHT}. 196c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 197c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong NIGHT, 198c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 199c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Take people pictures at night. 200c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_NIGHT_PORTRAIT}. 201c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 202de48004068f8c16f9a56c60b0ed2485a67687b4bSol Boucher // TODO: Unsupported on API 2 203c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong NIGHT_PORTRAIT, 204c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 205c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Take indoor low-light shot. 206c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_PARTY}. 207c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 208c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong PARTY, 209c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 210c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Take people pictures. 211c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_PORTRAIT}. 212c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 213c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong PORTRAIT, 214c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 215c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Take pictures on the snow. 216c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_SNOW}. 217c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 218c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong SNOW, 219c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 220c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Take photos of fast moving objects. 221c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_SPORTS}. 222c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 223c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong SPORTS, 224c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 225c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Avoid blurry pictures (for example, due to hand shake). 226c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_STEADYPHOTO}. 227c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 228c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong STEADYPHOTO, 229c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 230c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Take sunset photos. 231c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_SUNSET}. 232c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 233c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong SUNSET, 234c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 235c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Take photos in a theater. 236c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_THEATRE}. 237c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 238c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong THEATRE, 239c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 240c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 2418097973089420749dcd1ab4974a629c2466b31ccAngus Kong /** 2428097973089420749dcd1ab4974a629c2466b31ccAngus Kong * White blances. 2438097973089420749dcd1ab4974a629c2466b31ccAngus Kong */ 244c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong public enum WhiteBalance { 245c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 246c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#WHITE_BALANCE_AUTO}. 247c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 248c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong AUTO, 249c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 250c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#WHITE_BALANCE_CLOUDY_DAYLIGHT}. 251c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 252c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong CLOUDY_DAYLIGHT, 253c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 254c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#WHITE_BALANCE_DAYLIGHT}. 255c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 256c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong DAYLIGHT, 257c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 258c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#WHITE_BALANCE_FLUORESCENT}. 259c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 260c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong FLUORESCENT, 261c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 262c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#WHITE_BALANCE_INCANDESCENT}. 263c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 264c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong INCANDESCENT, 265c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 266c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#WHITE_BALANCE_SHADE}. 267c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 268c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong SHADE, 269c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 270c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#WHITE_BALANCE_TWILIGHT}. 271c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 272c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong TWILIGHT, 273c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 274c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#WHITE_BALANCE_WARM_FLUORESCENT}. 275c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 276c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong WARM_FLUORESCENT, 277c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 278c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 2798097973089420749dcd1ab4974a629c2466b31ccAngus Kong /** 2808097973089420749dcd1ab4974a629c2466b31ccAngus Kong * Features. 2818097973089420749dcd1ab4974a629c2466b31ccAngus Kong */ 282c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong public enum Feature { 283c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 284c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Support zoom-related methods. 285c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 286c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong ZOOM, 287c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 288c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Support for photo capturing during video recording. 289c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 290c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong VIDEO_SNAPSHOT, 291c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 292c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Support for focus area settings. 293c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 294c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong FOCUS_AREA, 295c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 296c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Support for metering area settings. 297c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 298c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong METERING_AREA, 299c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 300c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Support for automatic exposure lock. 301c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 302c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong AUTO_EXPOSURE_LOCK, 303c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 304c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Support for automatic white balance lock. 305c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 306c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong AUTO_WHITE_BALANCE_LOCK, 3078097973089420749dcd1ab4974a629c2466b31ccAngus Kong /** 3088097973089420749dcd1ab4974a629c2466b31ccAngus Kong * Support for video stabilization. 3098097973089420749dcd1ab4974a629c2466b31ccAngus Kong */ 3108097973089420749dcd1ab4974a629c2466b31ccAngus Kong VIDEO_STABILIZATION, 311c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 312c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 313c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 314c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * A interface stringifier to convert abstract representations to API 315c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * related string representation. 316c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 317a0842b40441db5332a5290f941021636b1182761Sol Boucher public static class Stringifier { 318a0842b40441db5332a5290f941021636b1182761Sol Boucher /** 319a0842b40441db5332a5290f941021636b1182761Sol Boucher * Converts the string to hyphen-delimited lowercase for compatibility with multiple APIs. 320a0842b40441db5332a5290f941021636b1182761Sol Boucher * 321a0842b40441db5332a5290f941021636b1182761Sol Boucher * @param enumCase The name of an enum constant. 322a0842b40441db5332a5290f941021636b1182761Sol Boucher * @return The converted string. 323a0842b40441db5332a5290f941021636b1182761Sol Boucher */ 324a0842b40441db5332a5290f941021636b1182761Sol Boucher private static String toApiCase(String enumCase) { 325a0842b40441db5332a5290f941021636b1182761Sol Boucher return enumCase.toLowerCase().replaceAll("_", "-"); 326a0842b40441db5332a5290f941021636b1182761Sol Boucher } 327a0842b40441db5332a5290f941021636b1182761Sol Boucher 328a0842b40441db5332a5290f941021636b1182761Sol Boucher /** 329a0842b40441db5332a5290f941021636b1182761Sol Boucher * Conerts the string to underscore-delimited uppercase to match the enum constant names. 330a0842b40441db5332a5290f941021636b1182761Sol Boucher * 331a0842b40441db5332a5290f941021636b1182761Sol Boucher * @param apiCase An API-related string representation. 332a0842b40441db5332a5290f941021636b1182761Sol Boucher * @return The converted string. 333a0842b40441db5332a5290f941021636b1182761Sol Boucher */ 334a0842b40441db5332a5290f941021636b1182761Sol Boucher private static String toEnumCase(String apiCase) { 335a0842b40441db5332a5290f941021636b1182761Sol Boucher return apiCase.toUpperCase().replaceAll("-", "_"); 336a0842b40441db5332a5290f941021636b1182761Sol Boucher } 337a0842b40441db5332a5290f941021636b1182761Sol Boucher 338c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 339c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Converts the focus mode to API-related string representation. 340c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * 341c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @param focus The focus mode to convert. 342c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @return The string used by the camera framework API to represent the 343a0842b40441db5332a5290f941021636b1182761Sol Boucher * focus mode. 344c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 345a0842b40441db5332a5290f941021636b1182761Sol Boucher public String stringify(FocusMode focus) { 346a0842b40441db5332a5290f941021636b1182761Sol Boucher return toApiCase(focus.name()); 347a0842b40441db5332a5290f941021636b1182761Sol Boucher } 348c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 349c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 350c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Converts the API-related string representation of the focus mode to the 351c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * abstract representation. 352c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * 353c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @param val The string representation. 354a0842b40441db5332a5290f941021636b1182761Sol Boucher * @return The focus mode represented by the input string, or the focus 355a0842b40441db5332a5290f941021636b1182761Sol Boucher * mode with the lowest ordinal if it cannot be converted. 356a0842b40441db5332a5290f941021636b1182761Sol Boucher */ 357a0842b40441db5332a5290f941021636b1182761Sol Boucher public FocusMode focusModeFromString(String val) { 358a0842b40441db5332a5290f941021636b1182761Sol Boucher if (val == null) { 359a0842b40441db5332a5290f941021636b1182761Sol Boucher return FocusMode.values()[0]; 360a0842b40441db5332a5290f941021636b1182761Sol Boucher } 361a0842b40441db5332a5290f941021636b1182761Sol Boucher try { 362a0842b40441db5332a5290f941021636b1182761Sol Boucher return FocusMode.valueOf(toEnumCase(val)); 363a0842b40441db5332a5290f941021636b1182761Sol Boucher } catch (IllegalArgumentException ex) { 364a0842b40441db5332a5290f941021636b1182761Sol Boucher return FocusMode.values()[0]; 365a0842b40441db5332a5290f941021636b1182761Sol Boucher } 366a0842b40441db5332a5290f941021636b1182761Sol Boucher } 367c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 368c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 369c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Converts the flash mode to API-related string representation. 370c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * 371c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @param flash The focus mode to convert. 372c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @return The string used by the camera framework API to represent the 373a0842b40441db5332a5290f941021636b1182761Sol Boucher * flash mode. 374c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 375a0842b40441db5332a5290f941021636b1182761Sol Boucher public String stringify(FlashMode flash) { 376a0842b40441db5332a5290f941021636b1182761Sol Boucher return toApiCase(flash.name()); 377a0842b40441db5332a5290f941021636b1182761Sol Boucher } 378c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 379c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 380c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Converts the API-related string representation of the flash mode to the 381c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * abstract representation. 382c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * 383c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @param val The string representation. 384a0842b40441db5332a5290f941021636b1182761Sol Boucher * @return The flash mode represented by the input string, or the flash 385a0842b40441db5332a5290f941021636b1182761Sol Boucher * mode with the lowest ordinal if it cannot be converted. 386a0842b40441db5332a5290f941021636b1182761Sol Boucher */ 387a0842b40441db5332a5290f941021636b1182761Sol Boucher public FlashMode flashModeFromString(String val) { 388a0842b40441db5332a5290f941021636b1182761Sol Boucher if (val == null) { 389a0842b40441db5332a5290f941021636b1182761Sol Boucher return FlashMode.values()[0]; 390a0842b40441db5332a5290f941021636b1182761Sol Boucher } 391a0842b40441db5332a5290f941021636b1182761Sol Boucher try { 392a0842b40441db5332a5290f941021636b1182761Sol Boucher return FlashMode.valueOf(toEnumCase(val)); 393a0842b40441db5332a5290f941021636b1182761Sol Boucher } catch (IllegalArgumentException ex) { 394a0842b40441db5332a5290f941021636b1182761Sol Boucher return FlashMode.values()[0]; 395a0842b40441db5332a5290f941021636b1182761Sol Boucher } 396a0842b40441db5332a5290f941021636b1182761Sol Boucher } 397c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 398c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 399c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Converts the scene mode to API-related string representation. 400c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * 401c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @param scene The focus mode to convert. 402c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @return The string used by the camera framework API to represent the 403a0842b40441db5332a5290f941021636b1182761Sol Boucher * scene mode. 404c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 405a0842b40441db5332a5290f941021636b1182761Sol Boucher public String stringify(SceneMode scene) { 406a0842b40441db5332a5290f941021636b1182761Sol Boucher return toApiCase(scene.name()); 407a0842b40441db5332a5290f941021636b1182761Sol Boucher } 408c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 409c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 410c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Converts the API-related string representation of the scene mode to the 411c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * abstract representation. 412c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * 413c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @param val The string representation. 414a0842b40441db5332a5290f941021636b1182761Sol Boucher * @return The scene mode represented by the input string, or the scene 415a0842b40441db5332a5290f941021636b1182761Sol Boucher * mode with the lowest ordinal if it cannot be converted. 416a0842b40441db5332a5290f941021636b1182761Sol Boucher */ 417a0842b40441db5332a5290f941021636b1182761Sol Boucher public SceneMode sceneModeFromString(String val) { 418a0842b40441db5332a5290f941021636b1182761Sol Boucher if (val == null) { 419a0842b40441db5332a5290f941021636b1182761Sol Boucher return SceneMode.values()[0]; 420a0842b40441db5332a5290f941021636b1182761Sol Boucher } 421a0842b40441db5332a5290f941021636b1182761Sol Boucher try { 422a0842b40441db5332a5290f941021636b1182761Sol Boucher return SceneMode.valueOf(toEnumCase(val)); 423a0842b40441db5332a5290f941021636b1182761Sol Boucher } catch (IllegalArgumentException ex) { 424a0842b40441db5332a5290f941021636b1182761Sol Boucher return SceneMode.values()[0]; 425a0842b40441db5332a5290f941021636b1182761Sol Boucher } 426a0842b40441db5332a5290f941021636b1182761Sol Boucher } 427c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 428c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 429c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Converts the white balance to API-related string representation. 430c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * 431c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @param wb The focus mode to convert. 432c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @return The string used by the camera framework API to represent the 433c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * white balance. 434c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 435a0842b40441db5332a5290f941021636b1182761Sol Boucher public String stringify(WhiteBalance wb) { 436a0842b40441db5332a5290f941021636b1182761Sol Boucher return toApiCase(wb.name()); 437a0842b40441db5332a5290f941021636b1182761Sol Boucher } 438c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 439c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 440c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Converts the API-related string representation of the white balance to 441c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * the abstract representation. 442c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * 443c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @param val The string representation. 444a0842b40441db5332a5290f941021636b1182761Sol Boucher * @return The white balance represented by the input string, or the 445a0842b40441db5332a5290f941021636b1182761Sol Boucher * white balance with the lowest ordinal if it cannot be 446a0842b40441db5332a5290f941021636b1182761Sol Boucher * converted. 447a0842b40441db5332a5290f941021636b1182761Sol Boucher */ 448a0842b40441db5332a5290f941021636b1182761Sol Boucher public WhiteBalance whiteBalanceFromString(String val) { 449a0842b40441db5332a5290f941021636b1182761Sol Boucher if (val == null) { 450a0842b40441db5332a5290f941021636b1182761Sol Boucher return WhiteBalance.values()[0]; 451a0842b40441db5332a5290f941021636b1182761Sol Boucher } 452a0842b40441db5332a5290f941021636b1182761Sol Boucher try { 453a0842b40441db5332a5290f941021636b1182761Sol Boucher return WhiteBalance.valueOf(toEnumCase(val)); 454a0842b40441db5332a5290f941021636b1182761Sol Boucher } catch (IllegalArgumentException ex) { 455a0842b40441db5332a5290f941021636b1182761Sol Boucher return WhiteBalance.values()[0]; 456a0842b40441db5332a5290f941021636b1182761Sol Boucher } 457a0842b40441db5332a5290f941021636b1182761Sol Boucher } 458c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 459c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 460c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 4618097973089420749dcd1ab4974a629c2466b31ccAngus Kong * Constructor. 4628097973089420749dcd1ab4974a629c2466b31ccAngus Kong * @param stringifier The API-specific stringifier for this instance. 463c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 4648097973089420749dcd1ab4974a629c2466b31ccAngus Kong CameraCapabilities(Stringifier stringifier) { 4658097973089420749dcd1ab4974a629c2466b31ccAngus Kong mStringifier = stringifier; 466c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 467c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 468c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 469c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Copy constructor. 470c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @param src The source instance. 471c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 472c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong public CameraCapabilities(CameraCapabilities src) { 473c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedPreviewFpsRange.addAll(src.mSupportedPreviewFpsRange); 474c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedPreviewSizes.addAll(src.mSupportedPreviewSizes); 475c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedPreviewFormats.addAll(src.mSupportedPreviewFormats); 476c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedVideoSizes.addAll(src.mSupportedVideoSizes); 4778097973089420749dcd1ab4974a629c2466b31ccAngus Kong mSupportedPhotoSizes.addAll(src.mSupportedPhotoSizes); 4788097973089420749dcd1ab4974a629c2466b31ccAngus Kong mSupportedPhotoFormats.addAll(src.mSupportedPhotoFormats); 479c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedSceneModes.addAll(src.mSupportedSceneModes); 480c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedFlashModes.addAll(src.mSupportedFlashModes); 481c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedFocusModes.addAll(src.mSupportedFocusModes); 482c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedWhiteBalances.addAll(src.mSupportedWhiteBalances); 483c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedFeatures.addAll(src.mSupportedFeatures); 4848097973089420749dcd1ab4974a629c2466b31ccAngus Kong mPreferredPreviewSizeForVideo = src.mPreferredPreviewSizeForVideo; 485c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mMaxExposureCompensation = src.mMaxExposureCompensation; 486c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mMinExposureCompensation = src.mMinExposureCompensation; 487c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mExposureCompensationStep = src.mExposureCompensationStep; 488c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mMaxNumOfFacesSupported = src.mMaxNumOfFacesSupported; 489c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mMaxNumOfFocusAreas = src.mMaxNumOfFocusAreas; 4908097973089420749dcd1ab4974a629c2466b31ccAngus Kong mMaxNumOfMeteringArea = src.mMaxNumOfMeteringArea; 4914ecb0ad6d1d5dc6b12f998bf694877df06a77890Alan Newberger mMaxZoomIndex = src.mMaxZoomIndex; 4924ecb0ad6d1d5dc6b12f998bf694877df06a77890Alan Newberger mZoomRatioList.addAll(src.mZoomRatioList); 4938097973089420749dcd1ab4974a629c2466b31ccAngus Kong mMaxZoomRatio = src.mMaxZoomRatio; 49401e7c02174ef268b6d6daaa5a5bb4f752d55964cAngus Kong mHorizontalViewAngle = src.mHorizontalViewAngle; 49501e7c02174ef268b6d6daaa5a5bb4f752d55964cAngus Kong mVerticalViewAngle = src.mVerticalViewAngle; 496c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mStringifier = src.mStringifier; 497c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 498c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 49901e7c02174ef268b6d6daaa5a5bb4f752d55964cAngus Kong public float getHorizontalViewAngle() { 50001e7c02174ef268b6d6daaa5a5bb4f752d55964cAngus Kong return mHorizontalViewAngle; 50101e7c02174ef268b6d6daaa5a5bb4f752d55964cAngus Kong } 50201e7c02174ef268b6d6daaa5a5bb4f752d55964cAngus Kong 50301e7c02174ef268b6d6daaa5a5bb4f752d55964cAngus Kong public float getVerticalViewAngle() { 50401e7c02174ef268b6d6daaa5a5bb4f752d55964cAngus Kong return mVerticalViewAngle; 50501e7c02174ef268b6d6daaa5a5bb4f752d55964cAngus Kong } 50601e7c02174ef268b6d6daaa5a5bb4f752d55964cAngus Kong 507c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 508c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @return the supported picture formats. See {@link android.graphics.ImageFormat}. 509c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 5108097973089420749dcd1ab4974a629c2466b31ccAngus Kong public Set<Integer> getSupportedPhotoFormats() { 5118097973089420749dcd1ab4974a629c2466b31ccAngus Kong return new TreeSet<Integer>(mSupportedPhotoFormats); 512c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 513c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 514c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 515c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Gets the supported preview formats. 516c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @return The supported preview {@link android.graphics.ImageFormat}s. 517c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 518c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong public Set<Integer> getSupportedPreviewFormats() { 519c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return new TreeSet<Integer>(mSupportedPreviewFormats); 520c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 521c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 522c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 523c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Gets the supported picture sizes. 524c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 5258097973089420749dcd1ab4974a629c2466b31ccAngus Kong public List<Size> getSupportedPhotoSizes() { 5268097973089420749dcd1ab4974a629c2466b31ccAngus Kong return new ArrayList<Size>(mSupportedPhotoSizes); 527c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 528c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 529c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 530c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @return The supported preview fps (frame-per-second) ranges. The returned 531c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * list is sorted by maximum fps then minimum fps in a descending order. 532c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * The values are multiplied by 1000. 533c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 534c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong public final List<int[]> getSupportedPreviewFpsRange() { 535c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return new ArrayList<int[]>(mSupportedPreviewFpsRange); 536c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 537c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 538c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 5398097973089420749dcd1ab4974a629c2466b31ccAngus Kong * @return The supported preview sizes. The list is sorted by width then 540c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * height in a descending order. 541c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 5428097973089420749dcd1ab4974a629c2466b31ccAngus Kong public final List<Size> getSupportedPreviewSizes() { 5438097973089420749dcd1ab4974a629c2466b31ccAngus Kong return new ArrayList<Size>(mSupportedPreviewSizes); 5448097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 5458097973089420749dcd1ab4974a629c2466b31ccAngus Kong 5468097973089420749dcd1ab4974a629c2466b31ccAngus Kong public final Size getPreferredPreviewSizeForVideo() { 5478097973089420749dcd1ab4974a629c2466b31ccAngus Kong return new Size(mPreferredPreviewSizeForVideo); 548c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 549c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 550c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 551c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @return The supported video frame sizes that can be used by MediaRecorder. 5528097973089420749dcd1ab4974a629c2466b31ccAngus Kong * The list is sorted by width then height in a descending order. 553c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 5548097973089420749dcd1ab4974a629c2466b31ccAngus Kong public final List<Size> getSupportedVideoSizes() { 5558097973089420749dcd1ab4974a629c2466b31ccAngus Kong return new ArrayList<Size>(mSupportedVideoSizes); 556c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 557c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 558c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 559c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @return The supported scene modes. 560c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 561c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong public final Set<SceneMode> getSupportedSceneModes() { 562c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return new HashSet<SceneMode>(mSupportedSceneModes); 563c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 564c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 565c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 566c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @return Whether the scene mode is supported. 567c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 568c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong public final boolean supports(SceneMode scene) { 569c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return (scene != null && mSupportedSceneModes.contains(scene)); 570c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 571c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 5728097973089420749dcd1ab4974a629c2466b31ccAngus Kong public boolean supports(final CameraSettings settings) { 5738097973089420749dcd1ab4974a629c2466b31ccAngus Kong if (zoomCheck(settings) && exposureCheck(settings) && focusCheck(settings) && 5748097973089420749dcd1ab4974a629c2466b31ccAngus Kong flashCheck(settings) && photoSizeCheck(settings) && previewSizeCheck(settings) && 5758097973089420749dcd1ab4974a629c2466b31ccAngus Kong videoStabilizationCheck(settings)) { 5768097973089420749dcd1ab4974a629c2466b31ccAngus Kong return true; 5778097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 5788097973089420749dcd1ab4974a629c2466b31ccAngus Kong return false; 5798097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 5808097973089420749dcd1ab4974a629c2466b31ccAngus Kong 581c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 582c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @return The supported flash modes. 583c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 584c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong public final Set<FlashMode> getSupportedFlashModes() { 585c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return new HashSet<FlashMode>(mSupportedFlashModes); 586c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 587c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 588c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 589c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @return Whether the flash mode is supported. 590c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 591c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong public final boolean supports(FlashMode flash) { 592c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return (flash != null && mSupportedFlashModes.contains(flash)); 593c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 594c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 595c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 596c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @return The supported focus modes. 597c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 598c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong public final Set<FocusMode> getSupportedFocusModes() { 599c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return new HashSet<FocusMode>(mSupportedFocusModes); 600c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 601c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 602c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 603c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @return Whether the focus mode is supported. 604c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 605c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong public final boolean supports(FocusMode focus) { 606c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return (focus != null && mSupportedFocusModes.contains(focus)); 607c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 608c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 609c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 610c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @return The supported white balanceas. 611c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 612c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong public final Set<WhiteBalance> getSupportedWhiteBalance() { 613c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return new HashSet<WhiteBalance>(mSupportedWhiteBalances); 614c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 615c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 616c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 617c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @return Whether the white balance is supported. 618c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 619c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong public boolean supports(WhiteBalance wb) { 620c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return (wb != null && mSupportedWhiteBalances.contains(wb)); 621c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 622c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 623c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong public final Set<Feature> getSupportedFeature() { 624c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return new HashSet<Feature>(mSupportedFeatures); 625c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 626c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 627c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong public boolean supports(Feature ft) { 628c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return (ft != null && mSupportedFeatures.contains(ft)); 629c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 630c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 631c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 6328097973089420749dcd1ab4974a629c2466b31ccAngus Kong * @return The maximal supported zoom ratio. 6338097973089420749dcd1ab4974a629c2466b31ccAngus Kong */ 6348097973089420749dcd1ab4974a629c2466b31ccAngus Kong public float getMaxZoomRatio() { 6358097973089420749dcd1ab4974a629c2466b31ccAngus Kong return mMaxZoomRatio; 6368097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 6378097973089420749dcd1ab4974a629c2466b31ccAngus Kong 6388097973089420749dcd1ab4974a629c2466b31ccAngus Kong // We'll replace these old style methods with new ones. 6398097973089420749dcd1ab4974a629c2466b31ccAngus Kong @Deprecated 6408097973089420749dcd1ab4974a629c2466b31ccAngus Kong public int getMaxZoomIndex() { 6418097973089420749dcd1ab4974a629c2466b31ccAngus Kong return mMaxZoomIndex; 6428097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 6438097973089420749dcd1ab4974a629c2466b31ccAngus Kong 6448097973089420749dcd1ab4974a629c2466b31ccAngus Kong @Deprecated 6458097973089420749dcd1ab4974a629c2466b31ccAngus Kong public List<Integer> getZoomRatioList() { 6468097973089420749dcd1ab4974a629c2466b31ccAngus Kong return new ArrayList<Integer>(mZoomRatioList); 6478097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 6488097973089420749dcd1ab4974a629c2466b31ccAngus Kong 6498097973089420749dcd1ab4974a629c2466b31ccAngus Kong /** 650c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @return The min exposure compensation index. The EV is the compensation 651c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * index multiplied by the step value. If unsupported, both this method and 652c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * {@link #getMaxExposureCompensation()} return 0. 653c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 654c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong public final int getMinExposureCompensation() { 655c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return mMinExposureCompensation; 656c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 657c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 658c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 659c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @return The max exposure compensation index. The EV is the compensation 660c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * index multiplied by the step value. If unsupported, both this method and 661c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * {@link #getMinExposureCompensation()} return 0. 662c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 663c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong public final int getMaxExposureCompensation() { 664c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return mMaxExposureCompensation; 665c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 666c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 667c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 668c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @return The exposure compensation step. The EV is the compensation index 669c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * multiplied by the step value. 670c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 671c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong public final float getExposureCompensationStep() { 672c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return mExposureCompensationStep; 673c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 674c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 675c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 676c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @return The max number of faces supported by the face detection. 0 if 677c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * unsupported. 678c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 679c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong public final int getMaxNumOfFacesSupported() { 680c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return mMaxNumOfFacesSupported; 681c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 682c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 683c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 684c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @return The stringifier used by this instance. 685c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 686c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong public Stringifier getStringifier() { 687c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return mStringifier; 688c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 6898097973089420749dcd1ab4974a629c2466b31ccAngus Kong 6908097973089420749dcd1ab4974a629c2466b31ccAngus Kong private boolean zoomCheck(final CameraSettings settings) { 6918097973089420749dcd1ab4974a629c2466b31ccAngus Kong final float ratio = settings.getCurrentZoomRatio(); 6928097973089420749dcd1ab4974a629c2466b31ccAngus Kong final int index = settings.getCurrentZoomIndex(); 6938097973089420749dcd1ab4974a629c2466b31ccAngus Kong if (!supports(Feature.ZOOM)) { 6948097973089420749dcd1ab4974a629c2466b31ccAngus Kong if (ratio != 1.0f || index != 0) { 6958097973089420749dcd1ab4974a629c2466b31ccAngus Kong Log.v(TAG, "Zoom is not supported"); 6968097973089420749dcd1ab4974a629c2466b31ccAngus Kong return false; 6978097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 6988097973089420749dcd1ab4974a629c2466b31ccAngus Kong } else { 6998097973089420749dcd1ab4974a629c2466b31ccAngus Kong if (settings.getCurrentZoomRatio() > getMaxZoomRatio() || 7008097973089420749dcd1ab4974a629c2466b31ccAngus Kong index > getMaxZoomIndex()) { 7018097973089420749dcd1ab4974a629c2466b31ccAngus Kong Log.v(TAG, "Zoom ratio is not supported: ratio = " + 7028097973089420749dcd1ab4974a629c2466b31ccAngus Kong settings.getCurrentZoomRatio() + ", index = " + index); 7038097973089420749dcd1ab4974a629c2466b31ccAngus Kong return false; 7048097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 7058097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 7068097973089420749dcd1ab4974a629c2466b31ccAngus Kong return true; 7078097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 7088097973089420749dcd1ab4974a629c2466b31ccAngus Kong 7098097973089420749dcd1ab4974a629c2466b31ccAngus Kong private boolean exposureCheck(final CameraSettings settings) { 7108097973089420749dcd1ab4974a629c2466b31ccAngus Kong final int index = settings.getExposureCompensationIndex(); 7118097973089420749dcd1ab4974a629c2466b31ccAngus Kong if (index > getMaxExposureCompensation() || index < getMinExposureCompensation()) { 7128097973089420749dcd1ab4974a629c2466b31ccAngus Kong Log.v(TAG, "Exposure compensation index is not supported. Min = " + 7138097973089420749dcd1ab4974a629c2466b31ccAngus Kong getMinExposureCompensation() + ", max = " + getMaxExposureCompensation() + "," + 7148097973089420749dcd1ab4974a629c2466b31ccAngus Kong " setting = " + index); 7158097973089420749dcd1ab4974a629c2466b31ccAngus Kong return false; 7168097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 7178097973089420749dcd1ab4974a629c2466b31ccAngus Kong return true; 7188097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 7198097973089420749dcd1ab4974a629c2466b31ccAngus Kong 7208097973089420749dcd1ab4974a629c2466b31ccAngus Kong private boolean focusCheck(final CameraSettings settings) { 7218097973089420749dcd1ab4974a629c2466b31ccAngus Kong FocusMode focusMode = settings.getCurrentFocusMode(); 7228097973089420749dcd1ab4974a629c2466b31ccAngus Kong if (!supports(focusMode)) { 723f2b5a976bb1c30f83682a996ce9289a973c88784Sol Boucher if (supports(FocusMode.FIXED)) { 724f2b5a976bb1c30f83682a996ce9289a973c88784Sol Boucher // Workaround for devices whose templates define defaults they don't really support 725f2b5a976bb1c30f83682a996ce9289a973c88784Sol Boucher // TODO: Remove workaround (b/17177436) 726f2b5a976bb1c30f83682a996ce9289a973c88784Sol Boucher Log.w(TAG, "Focus mode not supported... trying FIXED"); 727f2b5a976bb1c30f83682a996ce9289a973c88784Sol Boucher settings.setFocusMode(FocusMode.FIXED); 728f2b5a976bb1c30f83682a996ce9289a973c88784Sol Boucher } else { 729f2b5a976bb1c30f83682a996ce9289a973c88784Sol Boucher Log.v(TAG, "Focus mode not supported:" + 730f2b5a976bb1c30f83682a996ce9289a973c88784Sol Boucher (focusMode != null ? focusMode.name() : "null")); 731f2b5a976bb1c30f83682a996ce9289a973c88784Sol Boucher return false; 732f2b5a976bb1c30f83682a996ce9289a973c88784Sol Boucher } 7338097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 7348097973089420749dcd1ab4974a629c2466b31ccAngus Kong return true; 7358097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 7368097973089420749dcd1ab4974a629c2466b31ccAngus Kong 7378097973089420749dcd1ab4974a629c2466b31ccAngus Kong private boolean flashCheck(final CameraSettings settings) { 7388097973089420749dcd1ab4974a629c2466b31ccAngus Kong FlashMode flashMode = settings.getCurrentFlashMode(); 7398097973089420749dcd1ab4974a629c2466b31ccAngus Kong if (!supports(flashMode)) { 7408097973089420749dcd1ab4974a629c2466b31ccAngus Kong Log.v(TAG, 7418097973089420749dcd1ab4974a629c2466b31ccAngus Kong "Flash mode not supported:" + (flashMode != null ? flashMode.name() : "null")); 7428097973089420749dcd1ab4974a629c2466b31ccAngus Kong return false; 7438097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 7448097973089420749dcd1ab4974a629c2466b31ccAngus Kong return true; 7458097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 7468097973089420749dcd1ab4974a629c2466b31ccAngus Kong 7478097973089420749dcd1ab4974a629c2466b31ccAngus Kong private boolean photoSizeCheck(final CameraSettings settings) { 7488097973089420749dcd1ab4974a629c2466b31ccAngus Kong Size photoSize = settings.getCurrentPhotoSize(); 7498097973089420749dcd1ab4974a629c2466b31ccAngus Kong if (mSupportedPhotoSizes.contains(photoSize)) { 7508097973089420749dcd1ab4974a629c2466b31ccAngus Kong return true; 7518097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 7528097973089420749dcd1ab4974a629c2466b31ccAngus Kong Log.v(TAG, "Unsupported photo size:" + photoSize); 7538097973089420749dcd1ab4974a629c2466b31ccAngus Kong return false; 7548097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 7558097973089420749dcd1ab4974a629c2466b31ccAngus Kong 7568097973089420749dcd1ab4974a629c2466b31ccAngus Kong private boolean previewSizeCheck(final CameraSettings settings) { 7578097973089420749dcd1ab4974a629c2466b31ccAngus Kong final Size previewSize = settings.getCurrentPreviewSize(); 7588097973089420749dcd1ab4974a629c2466b31ccAngus Kong if (mSupportedPreviewSizes.contains(previewSize)) { 7598097973089420749dcd1ab4974a629c2466b31ccAngus Kong return true; 7608097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 7618097973089420749dcd1ab4974a629c2466b31ccAngus Kong Log.v(TAG, "Unsupported preview size:" + previewSize); 7628097973089420749dcd1ab4974a629c2466b31ccAngus Kong return false; 7638097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 7648097973089420749dcd1ab4974a629c2466b31ccAngus Kong 7658097973089420749dcd1ab4974a629c2466b31ccAngus Kong private boolean videoStabilizationCheck(final CameraSettings settings) { 7668097973089420749dcd1ab4974a629c2466b31ccAngus Kong if (!settings.isVideoStabilizationEnabled() || supports(Feature.VIDEO_STABILIZATION)) { 7678097973089420749dcd1ab4974a629c2466b31ccAngus Kong return true; 7688097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 7698097973089420749dcd1ab4974a629c2466b31ccAngus Kong Log.v(TAG, "Video stabilization is not supported"); 7708097973089420749dcd1ab4974a629c2466b31ccAngus Kong return false; 7718097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 772c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong} 773