CameraCapabilities.java revision 54c8f898815a233ba6478630940432ddafdb4314
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 399d8668449376fa47bc6528c7a61b04d6a0f691b3Sol Boucher /** Zoom ratio used for seeing sensor's full field of view. */ 409d8668449376fa47bc6528c7a61b04d6a0f691b3Sol Boucher protected static final float ZOOM_RATIO_UNZOOMED = 1.0f; 419d8668449376fa47bc6528c7a61b04d6a0f691b3Sol Boucher 428097973089420749dcd1ab4974a629c2466b31ccAngus Kong /* All internal states are declared final and should be thread-safe. */ 43c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 44c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong protected final ArrayList<int[]> mSupportedPreviewFpsRange = new ArrayList<int[]>(); 458097973089420749dcd1ab4974a629c2466b31ccAngus Kong protected final ArrayList<Size> mSupportedPreviewSizes = new ArrayList<Size>(); 46c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong protected final TreeSet<Integer> mSupportedPreviewFormats = new TreeSet<Integer>(); 478097973089420749dcd1ab4974a629c2466b31ccAngus Kong protected final ArrayList<Size> mSupportedVideoSizes = new ArrayList<Size>(); 488097973089420749dcd1ab4974a629c2466b31ccAngus Kong protected final ArrayList<Size> mSupportedPhotoSizes = new ArrayList<Size>(); 498097973089420749dcd1ab4974a629c2466b31ccAngus Kong protected final TreeSet<Integer> mSupportedPhotoFormats = new TreeSet<Integer>(); 50c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong protected final EnumSet<SceneMode> mSupportedSceneModes = EnumSet.noneOf(SceneMode.class); 51c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong protected final EnumSet<FlashMode> mSupportedFlashModes = EnumSet.noneOf(FlashMode.class); 52c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong protected final EnumSet<FocusMode> mSupportedFocusModes = EnumSet.noneOf(FocusMode.class); 53c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong protected final EnumSet<WhiteBalance> mSupportedWhiteBalances = 54c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong EnumSet.noneOf(WhiteBalance.class); 55c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong protected final EnumSet<Feature> mSupportedFeatures = EnumSet.noneOf(Feature.class); 568097973089420749dcd1ab4974a629c2466b31ccAngus Kong protected Size mPreferredPreviewSizeForVideo; 57c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong protected int mMinExposureCompensation; 58c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong protected int mMaxExposureCompensation; 59c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong protected float mExposureCompensationStep; 60c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong protected int mMaxNumOfFacesSupported; 61c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong protected int mMaxNumOfFocusAreas; 62c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong protected int mMaxNumOfMeteringArea; 639d8668449376fa47bc6528c7a61b04d6a0f691b3Sol Boucher protected float mMaxZoomRatio; 6401e7c02174ef268b6d6daaa5a5bb4f752d55964cAngus Kong protected float mHorizontalViewAngle; 6501e7c02174ef268b6d6daaa5a5bb4f752d55964cAngus Kong protected float mVerticalViewAngle; 66c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong private final Stringifier mStringifier; 67c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 688097973089420749dcd1ab4974a629c2466b31ccAngus Kong /** 698097973089420749dcd1ab4974a629c2466b31ccAngus Kong * Focus modes. 708097973089420749dcd1ab4974a629c2466b31ccAngus Kong */ 71c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong public enum FocusMode { 72c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 73c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Continuous auto focus mode intended for taking pictures. 74c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#FOCUS_MODE_AUTO}. 75c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 76c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong AUTO, 77c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 78c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Continuous auto focus mode intended for taking pictures. 79c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#FOCUS_MODE_CONTINUOUS_PICTURE}. 80c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 81c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong CONTINUOUS_PICTURE, 82c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 83c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Continuous auto focus mode intended for video recording. 84c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#FOCUS_MODE_CONTINUOUS_VIDEO}. 85c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 86c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong CONTINUOUS_VIDEO, 87c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 88c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Extended depth of field (EDOF). 89c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#FOCUS_MODE_EDOF}. 90c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 91c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong EXTENDED_DOF, 92c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 93c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Focus is fixed. 94c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#FOCUS_MODE_FIXED}. 95c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 96c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong FIXED, 97c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 98c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Focus is set at infinity. 99c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#FOCUS_MODE_INFINITY}. 100c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 101de48004068f8c16f9a56c60b0ed2485a67687b4bSol Boucher // TODO: Unsupported on API 2 102c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong INFINITY, 103c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 104c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Macro (close-up) focus mode. 105c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#FOCUS_MODE_MACRO}. 106c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 107c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong MACRO, 108c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 109c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 1108097973089420749dcd1ab4974a629c2466b31ccAngus Kong /** 1118097973089420749dcd1ab4974a629c2466b31ccAngus Kong * Flash modes. 1128097973089420749dcd1ab4974a629c2466b31ccAngus Kong */ 113c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong public enum FlashMode { 114c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 1158097973089420749dcd1ab4974a629c2466b31ccAngus Kong * No flash. 1168097973089420749dcd1ab4974a629c2466b31ccAngus Kong */ 1178097973089420749dcd1ab4974a629c2466b31ccAngus Kong NO_FLASH, 1188097973089420749dcd1ab4974a629c2466b31ccAngus Kong /** 119c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Flash will be fired automatically when required. 120c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#FLASH_MODE_OFF}. 121c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 122c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong AUTO, 123c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 124c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Flash will not be fired. 125c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#FLASH_MODE_OFF}. 126c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 127c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong OFF, 128c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 129c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Flash will always be fired during snapshot. 130c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#FLASH_MODE_ON}. 131c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 132c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong ON, 133c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 134c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Constant emission of light during preview, auto-focus and snapshot. 135c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#FLASH_MODE_TORCH}. 136c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 137c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong TORCH, 138c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 139c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Flash will be fired in red-eye reduction mode. 140c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#FLASH_MODE_RED_EYE}. 141c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 142c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong RED_EYE, 143c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 144c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 1458097973089420749dcd1ab4974a629c2466b31ccAngus Kong /** 1468097973089420749dcd1ab4974a629c2466b31ccAngus Kong * Scene modes. 1478097973089420749dcd1ab4974a629c2466b31ccAngus Kong */ 148c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong public enum SceneMode { 149c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 1508097973089420749dcd1ab4974a629c2466b31ccAngus Kong * No supported scene mode. 1518097973089420749dcd1ab4974a629c2466b31ccAngus Kong */ 1528097973089420749dcd1ab4974a629c2466b31ccAngus Kong NO_SCENE_MODE, 1538097973089420749dcd1ab4974a629c2466b31ccAngus Kong /** 154c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Scene mode is off. 155c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_AUTO}. 156c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 157c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong AUTO, 158c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 159c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Take photos of fast moving objects. 160c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_ACTION}. 161c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 162c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong ACTION, 163c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 164c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Applications are looking for a barcode. 165c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_BARCODE}. 166c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 167c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong BARCODE, 168c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 169c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Take pictures on the beach. 170c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_BEACH}. 171c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 172c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong BEACH, 173c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 174c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Capture the naturally warm color of scenes lit by candles. 175c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_CANDLELIGHT}. 176c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 177c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong CANDLELIGHT, 178c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 179c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * For shooting firework displays. 180c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_FIREWORKS}. 181c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 182c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong FIREWORKS, 183c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 184c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Capture a scene using high dynamic range imaging techniques. 185c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_HDR}. 186c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 18754c8f898815a233ba6478630940432ddafdb4314Ruben Brunk // Note: Supported as a vendor tag on the Camera2 API for some LEGACY devices. 188c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong HDR, 189c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 190c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Take pictures on distant objects. 191c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_LANDSCAPE}. 192c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 193c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong LANDSCAPE, 194c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 195c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Take photos at night. 196c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_NIGHT}. 197c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 198c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong NIGHT, 199c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 200c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Take people pictures at night. 201c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_NIGHT_PORTRAIT}. 202c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 203de48004068f8c16f9a56c60b0ed2485a67687b4bSol Boucher // TODO: Unsupported on API 2 204c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong NIGHT_PORTRAIT, 205c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 206c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Take indoor low-light shot. 207c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_PARTY}. 208c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 209c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong PARTY, 210c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 211c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Take people pictures. 212c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_PORTRAIT}. 213c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 214c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong PORTRAIT, 215c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 216c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Take pictures on the snow. 217c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_SNOW}. 218c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 219c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong SNOW, 220c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 221c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Take photos of fast moving objects. 222c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_SPORTS}. 223c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 224c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong SPORTS, 225c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 226c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Avoid blurry pictures (for example, due to hand shake). 227c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_STEADYPHOTO}. 228c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 229c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong STEADYPHOTO, 230c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 231c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Take sunset photos. 232c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_SUNSET}. 233c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 234c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong SUNSET, 235c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 236c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Take photos in a theater. 237c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_THEATRE}. 238c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 239c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong THEATRE, 240c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 241c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 2428097973089420749dcd1ab4974a629c2466b31ccAngus Kong /** 2438097973089420749dcd1ab4974a629c2466b31ccAngus Kong * White blances. 2448097973089420749dcd1ab4974a629c2466b31ccAngus Kong */ 245c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong public enum WhiteBalance { 246c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 247c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#WHITE_BALANCE_AUTO}. 248c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 249c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong AUTO, 250c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 251c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#WHITE_BALANCE_CLOUDY_DAYLIGHT}. 252c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 253c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong CLOUDY_DAYLIGHT, 254c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 255c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#WHITE_BALANCE_DAYLIGHT}. 256c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 257c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong DAYLIGHT, 258c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 259c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#WHITE_BALANCE_FLUORESCENT}. 260c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 261c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong FLUORESCENT, 262c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 263c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#WHITE_BALANCE_INCANDESCENT}. 264c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 265c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong INCANDESCENT, 266c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 267c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#WHITE_BALANCE_SHADE}. 268c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 269c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong SHADE, 270c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 271c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#WHITE_BALANCE_TWILIGHT}. 272c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 273c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong TWILIGHT, 274c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 275c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#WHITE_BALANCE_WARM_FLUORESCENT}. 276c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 277c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong WARM_FLUORESCENT, 278c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 279c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 2808097973089420749dcd1ab4974a629c2466b31ccAngus Kong /** 2818097973089420749dcd1ab4974a629c2466b31ccAngus Kong * Features. 2828097973089420749dcd1ab4974a629c2466b31ccAngus Kong */ 283c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong public enum Feature { 284c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 285c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Support zoom-related methods. 286c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 287c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong ZOOM, 288c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 289c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Support for photo capturing during video recording. 290c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 291c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong VIDEO_SNAPSHOT, 292c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 293c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Support for focus area settings. 294c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 295c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong FOCUS_AREA, 296c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 297c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Support for metering area settings. 298c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 299c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong METERING_AREA, 300c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 301c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Support for automatic exposure lock. 302c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 303c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong AUTO_EXPOSURE_LOCK, 304c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 305c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Support for automatic white balance lock. 306c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 307c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong AUTO_WHITE_BALANCE_LOCK, 3088097973089420749dcd1ab4974a629c2466b31ccAngus Kong /** 3098097973089420749dcd1ab4974a629c2466b31ccAngus Kong * Support for video stabilization. 3108097973089420749dcd1ab4974a629c2466b31ccAngus Kong */ 3118097973089420749dcd1ab4974a629c2466b31ccAngus Kong VIDEO_STABILIZATION, 312c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 313c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 314c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 315c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * A interface stringifier to convert abstract representations to API 316c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * related string representation. 317c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 318a0842b40441db5332a5290f941021636b1182761Sol Boucher public static class Stringifier { 319a0842b40441db5332a5290f941021636b1182761Sol Boucher /** 320a0842b40441db5332a5290f941021636b1182761Sol Boucher * Converts the string to hyphen-delimited lowercase for compatibility with multiple APIs. 321a0842b40441db5332a5290f941021636b1182761Sol Boucher * 322a0842b40441db5332a5290f941021636b1182761Sol Boucher * @param enumCase The name of an enum constant. 323a0842b40441db5332a5290f941021636b1182761Sol Boucher * @return The converted string. 324a0842b40441db5332a5290f941021636b1182761Sol Boucher */ 325a0842b40441db5332a5290f941021636b1182761Sol Boucher private static String toApiCase(String enumCase) { 326a0842b40441db5332a5290f941021636b1182761Sol Boucher return enumCase.toLowerCase().replaceAll("_", "-"); 327a0842b40441db5332a5290f941021636b1182761Sol Boucher } 328a0842b40441db5332a5290f941021636b1182761Sol Boucher 329a0842b40441db5332a5290f941021636b1182761Sol Boucher /** 330a0842b40441db5332a5290f941021636b1182761Sol Boucher * Conerts the string to underscore-delimited uppercase to match the enum constant names. 331a0842b40441db5332a5290f941021636b1182761Sol Boucher * 332a0842b40441db5332a5290f941021636b1182761Sol Boucher * @param apiCase An API-related string representation. 333a0842b40441db5332a5290f941021636b1182761Sol Boucher * @return The converted string. 334a0842b40441db5332a5290f941021636b1182761Sol Boucher */ 335a0842b40441db5332a5290f941021636b1182761Sol Boucher private static String toEnumCase(String apiCase) { 336a0842b40441db5332a5290f941021636b1182761Sol Boucher return apiCase.toUpperCase().replaceAll("-", "_"); 337a0842b40441db5332a5290f941021636b1182761Sol Boucher } 338a0842b40441db5332a5290f941021636b1182761Sol Boucher 339c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 340c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Converts the focus mode to API-related string representation. 341c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * 342c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @param focus The focus mode to convert. 343c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @return The string used by the camera framework API to represent the 344a0842b40441db5332a5290f941021636b1182761Sol Boucher * focus mode. 345c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 346a0842b40441db5332a5290f941021636b1182761Sol Boucher public String stringify(FocusMode focus) { 347a0842b40441db5332a5290f941021636b1182761Sol Boucher return toApiCase(focus.name()); 348a0842b40441db5332a5290f941021636b1182761Sol Boucher } 349c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 350c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 351c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Converts the API-related string representation of the focus mode to the 352c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * abstract representation. 353c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * 354c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @param val The string representation. 355a0842b40441db5332a5290f941021636b1182761Sol Boucher * @return The focus mode represented by the input string, or the focus 356a0842b40441db5332a5290f941021636b1182761Sol Boucher * mode with the lowest ordinal if it cannot be converted. 357a0842b40441db5332a5290f941021636b1182761Sol Boucher */ 358a0842b40441db5332a5290f941021636b1182761Sol Boucher public FocusMode focusModeFromString(String val) { 359a0842b40441db5332a5290f941021636b1182761Sol Boucher if (val == null) { 360a0842b40441db5332a5290f941021636b1182761Sol Boucher return FocusMode.values()[0]; 361a0842b40441db5332a5290f941021636b1182761Sol Boucher } 362a0842b40441db5332a5290f941021636b1182761Sol Boucher try { 363a0842b40441db5332a5290f941021636b1182761Sol Boucher return FocusMode.valueOf(toEnumCase(val)); 364a0842b40441db5332a5290f941021636b1182761Sol Boucher } catch (IllegalArgumentException ex) { 365a0842b40441db5332a5290f941021636b1182761Sol Boucher return FocusMode.values()[0]; 366a0842b40441db5332a5290f941021636b1182761Sol Boucher } 367a0842b40441db5332a5290f941021636b1182761Sol Boucher } 368c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 369c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 370c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Converts the flash mode to API-related string representation. 371c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * 372c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @param flash The focus mode to convert. 373c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @return The string used by the camera framework API to represent the 374a0842b40441db5332a5290f941021636b1182761Sol Boucher * flash mode. 375c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 376a0842b40441db5332a5290f941021636b1182761Sol Boucher public String stringify(FlashMode flash) { 377a0842b40441db5332a5290f941021636b1182761Sol Boucher return toApiCase(flash.name()); 378a0842b40441db5332a5290f941021636b1182761Sol Boucher } 379c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 380c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 381c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Converts the API-related string representation of the flash mode to the 382c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * abstract representation. 383c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * 384c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @param val The string representation. 385a0842b40441db5332a5290f941021636b1182761Sol Boucher * @return The flash mode represented by the input string, or the flash 386a0842b40441db5332a5290f941021636b1182761Sol Boucher * mode with the lowest ordinal if it cannot be converted. 387a0842b40441db5332a5290f941021636b1182761Sol Boucher */ 388a0842b40441db5332a5290f941021636b1182761Sol Boucher public FlashMode flashModeFromString(String val) { 389a0842b40441db5332a5290f941021636b1182761Sol Boucher if (val == null) { 390a0842b40441db5332a5290f941021636b1182761Sol Boucher return FlashMode.values()[0]; 391a0842b40441db5332a5290f941021636b1182761Sol Boucher } 392a0842b40441db5332a5290f941021636b1182761Sol Boucher try { 393a0842b40441db5332a5290f941021636b1182761Sol Boucher return FlashMode.valueOf(toEnumCase(val)); 394a0842b40441db5332a5290f941021636b1182761Sol Boucher } catch (IllegalArgumentException ex) { 395a0842b40441db5332a5290f941021636b1182761Sol Boucher return FlashMode.values()[0]; 396a0842b40441db5332a5290f941021636b1182761Sol Boucher } 397a0842b40441db5332a5290f941021636b1182761Sol Boucher } 398c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 399c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 400c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Converts the scene mode to API-related string representation. 401c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * 402c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @param scene The focus mode to convert. 403c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @return The string used by the camera framework API to represent the 404a0842b40441db5332a5290f941021636b1182761Sol Boucher * scene mode. 405c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 406a0842b40441db5332a5290f941021636b1182761Sol Boucher public String stringify(SceneMode scene) { 407a0842b40441db5332a5290f941021636b1182761Sol Boucher return toApiCase(scene.name()); 408a0842b40441db5332a5290f941021636b1182761Sol Boucher } 409c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 410c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 411c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Converts the API-related string representation of the scene mode to the 412c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * abstract representation. 413c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * 414c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @param val The string representation. 415a0842b40441db5332a5290f941021636b1182761Sol Boucher * @return The scene mode represented by the input string, or the scene 416a0842b40441db5332a5290f941021636b1182761Sol Boucher * mode with the lowest ordinal if it cannot be converted. 417a0842b40441db5332a5290f941021636b1182761Sol Boucher */ 418a0842b40441db5332a5290f941021636b1182761Sol Boucher public SceneMode sceneModeFromString(String val) { 419a0842b40441db5332a5290f941021636b1182761Sol Boucher if (val == null) { 420a0842b40441db5332a5290f941021636b1182761Sol Boucher return SceneMode.values()[0]; 421a0842b40441db5332a5290f941021636b1182761Sol Boucher } 422a0842b40441db5332a5290f941021636b1182761Sol Boucher try { 423a0842b40441db5332a5290f941021636b1182761Sol Boucher return SceneMode.valueOf(toEnumCase(val)); 424a0842b40441db5332a5290f941021636b1182761Sol Boucher } catch (IllegalArgumentException ex) { 425a0842b40441db5332a5290f941021636b1182761Sol Boucher return SceneMode.values()[0]; 426a0842b40441db5332a5290f941021636b1182761Sol Boucher } 427a0842b40441db5332a5290f941021636b1182761Sol Boucher } 428c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 429c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 430c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Converts the white balance to API-related string representation. 431c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * 432c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @param wb The focus mode to convert. 433c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @return The string used by the camera framework API to represent the 434c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * white balance. 435c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 436a0842b40441db5332a5290f941021636b1182761Sol Boucher public String stringify(WhiteBalance wb) { 437a0842b40441db5332a5290f941021636b1182761Sol Boucher return toApiCase(wb.name()); 438a0842b40441db5332a5290f941021636b1182761Sol Boucher } 439c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 440c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 441c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Converts the API-related string representation of the white balance to 442c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * the abstract representation. 443c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * 444c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @param val The string representation. 445a0842b40441db5332a5290f941021636b1182761Sol Boucher * @return The white balance represented by the input string, or the 446a0842b40441db5332a5290f941021636b1182761Sol Boucher * white balance with the lowest ordinal if it cannot be 447a0842b40441db5332a5290f941021636b1182761Sol Boucher * converted. 448a0842b40441db5332a5290f941021636b1182761Sol Boucher */ 449a0842b40441db5332a5290f941021636b1182761Sol Boucher public WhiteBalance whiteBalanceFromString(String val) { 450a0842b40441db5332a5290f941021636b1182761Sol Boucher if (val == null) { 451a0842b40441db5332a5290f941021636b1182761Sol Boucher return WhiteBalance.values()[0]; 452a0842b40441db5332a5290f941021636b1182761Sol Boucher } 453a0842b40441db5332a5290f941021636b1182761Sol Boucher try { 454a0842b40441db5332a5290f941021636b1182761Sol Boucher return WhiteBalance.valueOf(toEnumCase(val)); 455a0842b40441db5332a5290f941021636b1182761Sol Boucher } catch (IllegalArgumentException ex) { 456a0842b40441db5332a5290f941021636b1182761Sol Boucher return WhiteBalance.values()[0]; 457a0842b40441db5332a5290f941021636b1182761Sol Boucher } 458a0842b40441db5332a5290f941021636b1182761Sol Boucher } 459c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 460c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 461c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 4628097973089420749dcd1ab4974a629c2466b31ccAngus Kong * Constructor. 4638097973089420749dcd1ab4974a629c2466b31ccAngus Kong * @param stringifier The API-specific stringifier for this instance. 464c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 4658097973089420749dcd1ab4974a629c2466b31ccAngus Kong CameraCapabilities(Stringifier stringifier) { 4668097973089420749dcd1ab4974a629c2466b31ccAngus Kong mStringifier = stringifier; 467c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 468c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 469c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 470c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Copy constructor. 471c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @param src The source instance. 472c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 473c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong public CameraCapabilities(CameraCapabilities src) { 474c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedPreviewFpsRange.addAll(src.mSupportedPreviewFpsRange); 475c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedPreviewSizes.addAll(src.mSupportedPreviewSizes); 476c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedPreviewFormats.addAll(src.mSupportedPreviewFormats); 477c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedVideoSizes.addAll(src.mSupportedVideoSizes); 4788097973089420749dcd1ab4974a629c2466b31ccAngus Kong mSupportedPhotoSizes.addAll(src.mSupportedPhotoSizes); 4798097973089420749dcd1ab4974a629c2466b31ccAngus Kong mSupportedPhotoFormats.addAll(src.mSupportedPhotoFormats); 480c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedSceneModes.addAll(src.mSupportedSceneModes); 481c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedFlashModes.addAll(src.mSupportedFlashModes); 482c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedFocusModes.addAll(src.mSupportedFocusModes); 483c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedWhiteBalances.addAll(src.mSupportedWhiteBalances); 484c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedFeatures.addAll(src.mSupportedFeatures); 4858097973089420749dcd1ab4974a629c2466b31ccAngus Kong mPreferredPreviewSizeForVideo = src.mPreferredPreviewSizeForVideo; 486c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mMaxExposureCompensation = src.mMaxExposureCompensation; 487c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mMinExposureCompensation = src.mMinExposureCompensation; 488c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mExposureCompensationStep = src.mExposureCompensationStep; 489c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mMaxNumOfFacesSupported = src.mMaxNumOfFacesSupported; 490c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mMaxNumOfFocusAreas = src.mMaxNumOfFocusAreas; 4918097973089420749dcd1ab4974a629c2466b31ccAngus Kong mMaxNumOfMeteringArea = src.mMaxNumOfMeteringArea; 4928097973089420749dcd1ab4974a629c2466b31ccAngus Kong mMaxZoomRatio = src.mMaxZoomRatio; 49301e7c02174ef268b6d6daaa5a5bb4f752d55964cAngus Kong mHorizontalViewAngle = src.mHorizontalViewAngle; 49401e7c02174ef268b6d6daaa5a5bb4f752d55964cAngus Kong mVerticalViewAngle = src.mVerticalViewAngle; 495c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mStringifier = src.mStringifier; 496c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 497c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 49801e7c02174ef268b6d6daaa5a5bb4f752d55964cAngus Kong public float getHorizontalViewAngle() { 49901e7c02174ef268b6d6daaa5a5bb4f752d55964cAngus Kong return mHorizontalViewAngle; 50001e7c02174ef268b6d6daaa5a5bb4f752d55964cAngus Kong } 50101e7c02174ef268b6d6daaa5a5bb4f752d55964cAngus Kong 50201e7c02174ef268b6d6daaa5a5bb4f752d55964cAngus Kong public float getVerticalViewAngle() { 50301e7c02174ef268b6d6daaa5a5bb4f752d55964cAngus Kong return mVerticalViewAngle; 50401e7c02174ef268b6d6daaa5a5bb4f752d55964cAngus Kong } 50501e7c02174ef268b6d6daaa5a5bb4f752d55964cAngus Kong 506c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 507c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @return the supported picture formats. See {@link android.graphics.ImageFormat}. 508c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 5098097973089420749dcd1ab4974a629c2466b31ccAngus Kong public Set<Integer> getSupportedPhotoFormats() { 5108097973089420749dcd1ab4974a629c2466b31ccAngus Kong return new TreeSet<Integer>(mSupportedPhotoFormats); 511c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 512c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 513c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 514c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Gets the supported preview formats. 515c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @return The supported preview {@link android.graphics.ImageFormat}s. 516c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 517c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong public Set<Integer> getSupportedPreviewFormats() { 518c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return new TreeSet<Integer>(mSupportedPreviewFormats); 519c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 520c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 521c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 522c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Gets the supported picture sizes. 523c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 5248097973089420749dcd1ab4974a629c2466b31ccAngus Kong public List<Size> getSupportedPhotoSizes() { 5258097973089420749dcd1ab4974a629c2466b31ccAngus Kong return new ArrayList<Size>(mSupportedPhotoSizes); 526c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 527c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 528c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 529c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @return The supported preview fps (frame-per-second) ranges. The returned 530c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * list is sorted by maximum fps then minimum fps in a descending order. 531c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * The values are multiplied by 1000. 532c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 533c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong public final List<int[]> getSupportedPreviewFpsRange() { 534c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return new ArrayList<int[]>(mSupportedPreviewFpsRange); 535c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 536c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 537c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 5388097973089420749dcd1ab4974a629c2466b31ccAngus Kong * @return The supported preview sizes. The list is sorted by width then 539c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * height in a descending order. 540c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 5418097973089420749dcd1ab4974a629c2466b31ccAngus Kong public final List<Size> getSupportedPreviewSizes() { 5428097973089420749dcd1ab4974a629c2466b31ccAngus Kong return new ArrayList<Size>(mSupportedPreviewSizes); 5438097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 5448097973089420749dcd1ab4974a629c2466b31ccAngus Kong 5458097973089420749dcd1ab4974a629c2466b31ccAngus Kong public final Size getPreferredPreviewSizeForVideo() { 5468097973089420749dcd1ab4974a629c2466b31ccAngus Kong return new Size(mPreferredPreviewSizeForVideo); 547c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 548c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 549c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 550c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @return The supported video frame sizes that can be used by MediaRecorder. 5518097973089420749dcd1ab4974a629c2466b31ccAngus Kong * The list is sorted by width then height in a descending order. 552c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 5538097973089420749dcd1ab4974a629c2466b31ccAngus Kong public final List<Size> getSupportedVideoSizes() { 5548097973089420749dcd1ab4974a629c2466b31ccAngus Kong return new ArrayList<Size>(mSupportedVideoSizes); 555c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 556c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 557c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 558c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @return The supported scene modes. 559c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 560c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong public final Set<SceneMode> getSupportedSceneModes() { 561c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return new HashSet<SceneMode>(mSupportedSceneModes); 562c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 563c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 564c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 565c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @return Whether the scene mode is supported. 566c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 567c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong public final boolean supports(SceneMode scene) { 568c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return (scene != null && mSupportedSceneModes.contains(scene)); 569c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 570c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 5718097973089420749dcd1ab4974a629c2466b31ccAngus Kong public boolean supports(final CameraSettings settings) { 5728097973089420749dcd1ab4974a629c2466b31ccAngus Kong if (zoomCheck(settings) && exposureCheck(settings) && focusCheck(settings) && 5738097973089420749dcd1ab4974a629c2466b31ccAngus Kong flashCheck(settings) && photoSizeCheck(settings) && previewSizeCheck(settings) && 5748097973089420749dcd1ab4974a629c2466b31ccAngus Kong videoStabilizationCheck(settings)) { 5758097973089420749dcd1ab4974a629c2466b31ccAngus Kong return true; 5768097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 5778097973089420749dcd1ab4974a629c2466b31ccAngus Kong return false; 5788097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 5798097973089420749dcd1ab4974a629c2466b31ccAngus Kong 580c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 581c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @return The supported flash modes. 582c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 583c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong public final Set<FlashMode> getSupportedFlashModes() { 584c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return new HashSet<FlashMode>(mSupportedFlashModes); 585c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 586c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 587c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 588c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @return Whether the flash mode is supported. 589c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 590c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong public final boolean supports(FlashMode flash) { 591c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return (flash != null && mSupportedFlashModes.contains(flash)); 592c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 593c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 594c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 595c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @return The supported focus modes. 596c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 597c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong public final Set<FocusMode> getSupportedFocusModes() { 598c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return new HashSet<FocusMode>(mSupportedFocusModes); 599c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 600c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 601c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 602c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @return Whether the focus mode is supported. 603c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 604c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong public final boolean supports(FocusMode focus) { 605c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return (focus != null && mSupportedFocusModes.contains(focus)); 606c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 607c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 608c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 609c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @return The supported white balanceas. 610c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 611c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong public final Set<WhiteBalance> getSupportedWhiteBalance() { 612c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return new HashSet<WhiteBalance>(mSupportedWhiteBalances); 613c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 614c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 615c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 616c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @return Whether the white balance is supported. 617c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 618c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong public boolean supports(WhiteBalance wb) { 619c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return (wb != null && mSupportedWhiteBalances.contains(wb)); 620c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 621c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 622c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong public final Set<Feature> getSupportedFeature() { 623c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return new HashSet<Feature>(mSupportedFeatures); 624c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 625c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 626c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong public boolean supports(Feature ft) { 627c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return (ft != null && mSupportedFeatures.contains(ft)); 628c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 629c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 630c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 6318097973089420749dcd1ab4974a629c2466b31ccAngus Kong * @return The maximal supported zoom ratio. 6328097973089420749dcd1ab4974a629c2466b31ccAngus Kong */ 6338097973089420749dcd1ab4974a629c2466b31ccAngus Kong public float getMaxZoomRatio() { 6348097973089420749dcd1ab4974a629c2466b31ccAngus Kong return mMaxZoomRatio; 6358097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 6368097973089420749dcd1ab4974a629c2466b31ccAngus Kong 6378097973089420749dcd1ab4974a629c2466b31ccAngus Kong /** 638c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @return The min exposure compensation index. The EV is the compensation 639c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * index multiplied by the step value. If unsupported, both this method and 640c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * {@link #getMaxExposureCompensation()} return 0. 641c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 642c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong public final int getMinExposureCompensation() { 643c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return mMinExposureCompensation; 644c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 645c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 646c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 647c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @return The max exposure compensation index. The EV is the compensation 648c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * index multiplied by the step value. If unsupported, both this method and 649c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * {@link #getMinExposureCompensation()} return 0. 650c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 651c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong public final int getMaxExposureCompensation() { 652c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return mMaxExposureCompensation; 653c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 654c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 655c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 656c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @return The exposure compensation step. The EV is the compensation index 657c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * multiplied by the step value. 658c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 659c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong public final float getExposureCompensationStep() { 660c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return mExposureCompensationStep; 661c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 662c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 663c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 664c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @return The max number of faces supported by the face detection. 0 if 665c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * unsupported. 666c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 667c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong public final int getMaxNumOfFacesSupported() { 668c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return mMaxNumOfFacesSupported; 669c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 670c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 671c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 672c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @return The stringifier used by this instance. 673c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 674c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong public Stringifier getStringifier() { 675c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return mStringifier; 676c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 6778097973089420749dcd1ab4974a629c2466b31ccAngus Kong 6788097973089420749dcd1ab4974a629c2466b31ccAngus Kong private boolean zoomCheck(final CameraSettings settings) { 6798097973089420749dcd1ab4974a629c2466b31ccAngus Kong final float ratio = settings.getCurrentZoomRatio(); 6808097973089420749dcd1ab4974a629c2466b31ccAngus Kong if (!supports(Feature.ZOOM)) { 6819d8668449376fa47bc6528c7a61b04d6a0f691b3Sol Boucher if (ratio != ZOOM_RATIO_UNZOOMED) { 6828097973089420749dcd1ab4974a629c2466b31ccAngus Kong Log.v(TAG, "Zoom is not supported"); 6838097973089420749dcd1ab4974a629c2466b31ccAngus Kong return false; 6848097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 6858097973089420749dcd1ab4974a629c2466b31ccAngus Kong } else { 6869d8668449376fa47bc6528c7a61b04d6a0f691b3Sol Boucher if (settings.getCurrentZoomRatio() > getMaxZoomRatio()) { 6878097973089420749dcd1ab4974a629c2466b31ccAngus Kong Log.v(TAG, "Zoom ratio is not supported: ratio = " + 6889d8668449376fa47bc6528c7a61b04d6a0f691b3Sol Boucher settings.getCurrentZoomRatio()); 6898097973089420749dcd1ab4974a629c2466b31ccAngus Kong return false; 6908097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 6918097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 6928097973089420749dcd1ab4974a629c2466b31ccAngus Kong return true; 6938097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 6948097973089420749dcd1ab4974a629c2466b31ccAngus Kong 6958097973089420749dcd1ab4974a629c2466b31ccAngus Kong private boolean exposureCheck(final CameraSettings settings) { 6968097973089420749dcd1ab4974a629c2466b31ccAngus Kong final int index = settings.getExposureCompensationIndex(); 6978097973089420749dcd1ab4974a629c2466b31ccAngus Kong if (index > getMaxExposureCompensation() || index < getMinExposureCompensation()) { 6988097973089420749dcd1ab4974a629c2466b31ccAngus Kong Log.v(TAG, "Exposure compensation index is not supported. Min = " + 6998097973089420749dcd1ab4974a629c2466b31ccAngus Kong getMinExposureCompensation() + ", max = " + getMaxExposureCompensation() + "," + 7008097973089420749dcd1ab4974a629c2466b31ccAngus Kong " setting = " + index); 7018097973089420749dcd1ab4974a629c2466b31ccAngus Kong return false; 7028097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 7038097973089420749dcd1ab4974a629c2466b31ccAngus Kong return true; 7048097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 7058097973089420749dcd1ab4974a629c2466b31ccAngus Kong 7068097973089420749dcd1ab4974a629c2466b31ccAngus Kong private boolean focusCheck(final CameraSettings settings) { 7078097973089420749dcd1ab4974a629c2466b31ccAngus Kong FocusMode focusMode = settings.getCurrentFocusMode(); 7088097973089420749dcd1ab4974a629c2466b31ccAngus Kong if (!supports(focusMode)) { 709f2b5a976bb1c30f83682a996ce9289a973c88784Sol Boucher if (supports(FocusMode.FIXED)) { 710f2b5a976bb1c30f83682a996ce9289a973c88784Sol Boucher // Workaround for devices whose templates define defaults they don't really support 711f2b5a976bb1c30f83682a996ce9289a973c88784Sol Boucher // TODO: Remove workaround (b/17177436) 712f2b5a976bb1c30f83682a996ce9289a973c88784Sol Boucher Log.w(TAG, "Focus mode not supported... trying FIXED"); 713f2b5a976bb1c30f83682a996ce9289a973c88784Sol Boucher settings.setFocusMode(FocusMode.FIXED); 714f2b5a976bb1c30f83682a996ce9289a973c88784Sol Boucher } else { 715f2b5a976bb1c30f83682a996ce9289a973c88784Sol Boucher Log.v(TAG, "Focus mode not supported:" + 716f2b5a976bb1c30f83682a996ce9289a973c88784Sol Boucher (focusMode != null ? focusMode.name() : "null")); 717f2b5a976bb1c30f83682a996ce9289a973c88784Sol Boucher return false; 718f2b5a976bb1c30f83682a996ce9289a973c88784Sol Boucher } 7198097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 7208097973089420749dcd1ab4974a629c2466b31ccAngus Kong return true; 7218097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 7228097973089420749dcd1ab4974a629c2466b31ccAngus Kong 7238097973089420749dcd1ab4974a629c2466b31ccAngus Kong private boolean flashCheck(final CameraSettings settings) { 7248097973089420749dcd1ab4974a629c2466b31ccAngus Kong FlashMode flashMode = settings.getCurrentFlashMode(); 7258097973089420749dcd1ab4974a629c2466b31ccAngus Kong if (!supports(flashMode)) { 7268097973089420749dcd1ab4974a629c2466b31ccAngus Kong Log.v(TAG, 7278097973089420749dcd1ab4974a629c2466b31ccAngus Kong "Flash mode not supported:" + (flashMode != null ? flashMode.name() : "null")); 7288097973089420749dcd1ab4974a629c2466b31ccAngus Kong return false; 7298097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 7308097973089420749dcd1ab4974a629c2466b31ccAngus Kong return true; 7318097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 7328097973089420749dcd1ab4974a629c2466b31ccAngus Kong 7338097973089420749dcd1ab4974a629c2466b31ccAngus Kong private boolean photoSizeCheck(final CameraSettings settings) { 7348097973089420749dcd1ab4974a629c2466b31ccAngus Kong Size photoSize = settings.getCurrentPhotoSize(); 7358097973089420749dcd1ab4974a629c2466b31ccAngus Kong if (mSupportedPhotoSizes.contains(photoSize)) { 7368097973089420749dcd1ab4974a629c2466b31ccAngus Kong return true; 7378097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 7388097973089420749dcd1ab4974a629c2466b31ccAngus Kong Log.v(TAG, "Unsupported photo size:" + photoSize); 7398097973089420749dcd1ab4974a629c2466b31ccAngus Kong return false; 7408097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 7418097973089420749dcd1ab4974a629c2466b31ccAngus Kong 7428097973089420749dcd1ab4974a629c2466b31ccAngus Kong private boolean previewSizeCheck(final CameraSettings settings) { 7438097973089420749dcd1ab4974a629c2466b31ccAngus Kong final Size previewSize = settings.getCurrentPreviewSize(); 7448097973089420749dcd1ab4974a629c2466b31ccAngus Kong if (mSupportedPreviewSizes.contains(previewSize)) { 7458097973089420749dcd1ab4974a629c2466b31ccAngus Kong return true; 7468097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 7478097973089420749dcd1ab4974a629c2466b31ccAngus Kong Log.v(TAG, "Unsupported preview size:" + previewSize); 7488097973089420749dcd1ab4974a629c2466b31ccAngus Kong return false; 7498097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 7508097973089420749dcd1ab4974a629c2466b31ccAngus Kong 7518097973089420749dcd1ab4974a629c2466b31ccAngus Kong private boolean videoStabilizationCheck(final CameraSettings settings) { 7528097973089420749dcd1ab4974a629c2466b31ccAngus Kong if (!settings.isVideoStabilizationEnabled() || supports(Feature.VIDEO_STABILIZATION)) { 7538097973089420749dcd1ab4974a629c2466b31ccAngus Kong return true; 7548097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 7558097973089420749dcd1ab4974a629c2466b31ccAngus Kong Log.v(TAG, "Video stabilization is not supported"); 7568097973089420749dcd1ab4974a629c2466b31ccAngus Kong return false; 7578097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 758c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong} 759