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; 251bd78b36e275371eff1ec1d07c9c1f93f63f5c39Alan Newbergerimport java.util.Locale; 26c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kongimport java.util.Set; 27c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kongimport java.util.TreeSet; 28c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 298097973089420749dcd1ab4974a629c2466b31ccAngus Kong/** 308097973089420749dcd1ab4974a629c2466b31ccAngus Kong * This class holds all the static information of a camera's capabilities. 318097973089420749dcd1ab4974a629c2466b31ccAngus Kong * <p> 328097973089420749dcd1ab4974a629c2466b31ccAngus Kong * The design of this class is thread-safe and can be passed around regardless 338097973089420749dcd1ab4974a629c2466b31ccAngus Kong * of which thread using it. 348097973089420749dcd1ab4974a629c2466b31ccAngus Kong * </p> 358097973089420749dcd1ab4974a629c2466b31ccAngus Kong */ 36c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kongpublic class CameraCapabilities { 37c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 38a0842b40441db5332a5290f941021636b1182761Sol Boucher private static Log.Tag TAG = new Log.Tag("CamCapabs"); 398097973089420749dcd1ab4974a629c2466b31ccAngus Kong 409d8668449376fa47bc6528c7a61b04d6a0f691b3Sol Boucher /** Zoom ratio used for seeing sensor's full field of view. */ 419d8668449376fa47bc6528c7a61b04d6a0f691b3Sol Boucher protected static final float ZOOM_RATIO_UNZOOMED = 1.0f; 429d8668449376fa47bc6528c7a61b04d6a0f691b3Sol Boucher 438097973089420749dcd1ab4974a629c2466b31ccAngus Kong /* All internal states are declared final and should be thread-safe. */ 44c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 45c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong protected final ArrayList<int[]> mSupportedPreviewFpsRange = new ArrayList<int[]>(); 468097973089420749dcd1ab4974a629c2466b31ccAngus Kong protected final ArrayList<Size> mSupportedPreviewSizes = new ArrayList<Size>(); 47c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong protected final TreeSet<Integer> mSupportedPreviewFormats = new TreeSet<Integer>(); 488097973089420749dcd1ab4974a629c2466b31ccAngus Kong protected final ArrayList<Size> mSupportedVideoSizes = new ArrayList<Size>(); 498097973089420749dcd1ab4974a629c2466b31ccAngus Kong protected final ArrayList<Size> mSupportedPhotoSizes = new ArrayList<Size>(); 508097973089420749dcd1ab4974a629c2466b31ccAngus Kong protected final TreeSet<Integer> mSupportedPhotoFormats = new TreeSet<Integer>(); 51c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong protected final EnumSet<SceneMode> mSupportedSceneModes = EnumSet.noneOf(SceneMode.class); 52c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong protected final EnumSet<FlashMode> mSupportedFlashModes = EnumSet.noneOf(FlashMode.class); 53c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong protected final EnumSet<FocusMode> mSupportedFocusModes = EnumSet.noneOf(FocusMode.class); 54c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong protected final EnumSet<WhiteBalance> mSupportedWhiteBalances = 55c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong EnumSet.noneOf(WhiteBalance.class); 56c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong protected final EnumSet<Feature> mSupportedFeatures = EnumSet.noneOf(Feature.class); 578097973089420749dcd1ab4974a629c2466b31ccAngus Kong protected Size mPreferredPreviewSizeForVideo; 58c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong protected int mMinExposureCompensation; 59c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong protected int mMaxExposureCompensation; 60c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong protected float mExposureCompensationStep; 61c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong protected int mMaxNumOfFacesSupported; 62c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong protected int mMaxNumOfFocusAreas; 63c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong protected int mMaxNumOfMeteringArea; 649d8668449376fa47bc6528c7a61b04d6a0f691b3Sol Boucher protected float mMaxZoomRatio; 6501e7c02174ef268b6d6daaa5a5bb4f752d55964cAngus Kong protected float mHorizontalViewAngle; 6601e7c02174ef268b6d6daaa5a5bb4f752d55964cAngus Kong protected float mVerticalViewAngle; 67c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong private final Stringifier mStringifier; 68c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 698097973089420749dcd1ab4974a629c2466b31ccAngus Kong /** 708097973089420749dcd1ab4974a629c2466b31ccAngus Kong * Focus modes. 718097973089420749dcd1ab4974a629c2466b31ccAngus Kong */ 72c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong public enum FocusMode { 73c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 74c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Continuous auto focus mode intended for taking pictures. 75c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#FOCUS_MODE_AUTO}. 76c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 77c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong AUTO, 78c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 79c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Continuous auto focus mode intended for taking pictures. 80c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#FOCUS_MODE_CONTINUOUS_PICTURE}. 81c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 82c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong CONTINUOUS_PICTURE, 83c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 84c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Continuous auto focus mode intended for video recording. 85c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#FOCUS_MODE_CONTINUOUS_VIDEO}. 86c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 87c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong CONTINUOUS_VIDEO, 88c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 89c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Extended depth of field (EDOF). 90c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#FOCUS_MODE_EDOF}. 91c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 92c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong EXTENDED_DOF, 93c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 94c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Focus is fixed. 95c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#FOCUS_MODE_FIXED}. 96c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 97c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong FIXED, 98c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 99c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Focus is set at infinity. 100c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#FOCUS_MODE_INFINITY}. 101c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 102de48004068f8c16f9a56c60b0ed2485a67687b4bSol Boucher // TODO: Unsupported on API 2 103c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong INFINITY, 104c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 105c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Macro (close-up) focus mode. 106c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#FOCUS_MODE_MACRO}. 107c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 108c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong MACRO, 109c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 110c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 1118097973089420749dcd1ab4974a629c2466b31ccAngus Kong /** 1128097973089420749dcd1ab4974a629c2466b31ccAngus Kong * Flash modes. 1138097973089420749dcd1ab4974a629c2466b31ccAngus Kong */ 114c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong public enum FlashMode { 115c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 1168097973089420749dcd1ab4974a629c2466b31ccAngus Kong * No flash. 1178097973089420749dcd1ab4974a629c2466b31ccAngus Kong */ 1188097973089420749dcd1ab4974a629c2466b31ccAngus Kong NO_FLASH, 1198097973089420749dcd1ab4974a629c2466b31ccAngus Kong /** 120c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Flash will be fired automatically when required. 121c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#FLASH_MODE_OFF}. 122c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 123c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong AUTO, 124c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 125c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Flash will not be fired. 126c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#FLASH_MODE_OFF}. 127c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 128c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong OFF, 129c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 130c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Flash will always be fired during snapshot. 131c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#FLASH_MODE_ON}. 132c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 133c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong ON, 134c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 135c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Constant emission of light during preview, auto-focus and snapshot. 136c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#FLASH_MODE_TORCH}. 137c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 138c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong TORCH, 139c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 140c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Flash will be fired in red-eye reduction mode. 141c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#FLASH_MODE_RED_EYE}. 142c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 143c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong RED_EYE, 144c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 145c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 1468097973089420749dcd1ab4974a629c2466b31ccAngus Kong /** 1478097973089420749dcd1ab4974a629c2466b31ccAngus Kong * Scene modes. 1488097973089420749dcd1ab4974a629c2466b31ccAngus Kong */ 149c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong public enum SceneMode { 150c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 1518097973089420749dcd1ab4974a629c2466b31ccAngus Kong * No supported scene mode. 1528097973089420749dcd1ab4974a629c2466b31ccAngus Kong */ 1538097973089420749dcd1ab4974a629c2466b31ccAngus Kong NO_SCENE_MODE, 1548097973089420749dcd1ab4974a629c2466b31ccAngus Kong /** 155c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Scene mode is off. 156c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_AUTO}. 157c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 158c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong AUTO, 159c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 160c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Take photos of fast moving objects. 161c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_ACTION}. 162c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 163c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong ACTION, 164c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 165c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Applications are looking for a barcode. 166c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_BARCODE}. 167c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 168c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong BARCODE, 169c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 170c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Take pictures on the beach. 171c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_BEACH}. 172c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 173c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong BEACH, 174c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 175c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Capture the naturally warm color of scenes lit by candles. 176c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_CANDLELIGHT}. 177c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 178c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong CANDLELIGHT, 179c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 180c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * For shooting firework displays. 181c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_FIREWORKS}. 182c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 183c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong FIREWORKS, 184c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 185c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Capture a scene using high dynamic range imaging techniques. 186c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_HDR}. 187c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 18854c8f898815a233ba6478630940432ddafdb4314Ruben Brunk // Note: Supported as a vendor tag on the Camera2 API for some LEGACY devices. 189c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong HDR, 190c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 191c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Take pictures on distant objects. 192c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_LANDSCAPE}. 193c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 194c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong LANDSCAPE, 195c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 196c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Take photos at night. 197c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_NIGHT}. 198c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 199c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong NIGHT, 200c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 201c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Take people pictures at night. 202c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_NIGHT_PORTRAIT}. 203c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 204de48004068f8c16f9a56c60b0ed2485a67687b4bSol Boucher // TODO: Unsupported on API 2 205c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong NIGHT_PORTRAIT, 206c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 207c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Take indoor low-light shot. 208c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_PARTY}. 209c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 210c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong PARTY, 211c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 212c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Take people pictures. 213c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_PORTRAIT}. 214c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 215c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong PORTRAIT, 216c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 217c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Take pictures on the snow. 218c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_SNOW}. 219c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 220c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong SNOW, 221c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 222c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Take photos of fast moving objects. 223c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_SPORTS}. 224c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 225c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong SPORTS, 226c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 227c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Avoid blurry pictures (for example, due to hand shake). 228c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_STEADYPHOTO}. 229c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 230c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong STEADYPHOTO, 231c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 232c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Take sunset photos. 233c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_SUNSET}. 234c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 235c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong SUNSET, 236c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 237c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Take photos in a theater. 238c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_THEATRE}. 239c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 240c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong THEATRE, 241c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 242c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 2438097973089420749dcd1ab4974a629c2466b31ccAngus Kong /** 2448097973089420749dcd1ab4974a629c2466b31ccAngus Kong * White blances. 2458097973089420749dcd1ab4974a629c2466b31ccAngus Kong */ 246c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong public enum WhiteBalance { 247c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 248c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#WHITE_BALANCE_AUTO}. 249c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 250c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong AUTO, 251c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 252c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#WHITE_BALANCE_CLOUDY_DAYLIGHT}. 253c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 254c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong CLOUDY_DAYLIGHT, 255c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 256c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#WHITE_BALANCE_DAYLIGHT}. 257c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 258c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong DAYLIGHT, 259c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 260c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#WHITE_BALANCE_FLUORESCENT}. 261c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 262c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong FLUORESCENT, 263c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 264c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#WHITE_BALANCE_INCANDESCENT}. 265c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 266c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong INCANDESCENT, 267c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 268c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#WHITE_BALANCE_SHADE}. 269c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 270c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong SHADE, 271c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 272c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#WHITE_BALANCE_TWILIGHT}. 273c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 274c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong TWILIGHT, 275c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 276c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @see {@link android.hardware.Camera.Parameters#WHITE_BALANCE_WARM_FLUORESCENT}. 277c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 278c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong WARM_FLUORESCENT, 279c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 280c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 2818097973089420749dcd1ab4974a629c2466b31ccAngus Kong /** 2828097973089420749dcd1ab4974a629c2466b31ccAngus Kong * Features. 2838097973089420749dcd1ab4974a629c2466b31ccAngus Kong */ 284c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong public enum Feature { 285c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 286c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Support zoom-related methods. 287c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 288c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong ZOOM, 289c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 290c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Support for photo capturing during video recording. 291c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 292c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong VIDEO_SNAPSHOT, 293c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 294c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Support for focus area settings. 295c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 296c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong FOCUS_AREA, 297c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 298c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Support for metering area settings. 299c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 300c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong METERING_AREA, 301c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 302c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Support for automatic exposure lock. 303c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 304c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong AUTO_EXPOSURE_LOCK, 305c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 306c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Support for automatic white balance lock. 307c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 308c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong AUTO_WHITE_BALANCE_LOCK, 3098097973089420749dcd1ab4974a629c2466b31ccAngus Kong /** 3108097973089420749dcd1ab4974a629c2466b31ccAngus Kong * Support for video stabilization. 3118097973089420749dcd1ab4974a629c2466b31ccAngus Kong */ 3128097973089420749dcd1ab4974a629c2466b31ccAngus Kong VIDEO_STABILIZATION, 313c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 314c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 315c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 316c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * A interface stringifier to convert abstract representations to API 317c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * related string representation. 318c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 319a0842b40441db5332a5290f941021636b1182761Sol Boucher public static class Stringifier { 320a0842b40441db5332a5290f941021636b1182761Sol Boucher /** 321a0842b40441db5332a5290f941021636b1182761Sol Boucher * Converts the string to hyphen-delimited lowercase for compatibility with multiple APIs. 322a0842b40441db5332a5290f941021636b1182761Sol Boucher * 323a0842b40441db5332a5290f941021636b1182761Sol Boucher * @param enumCase The name of an enum constant. 324a0842b40441db5332a5290f941021636b1182761Sol Boucher * @return The converted string. 325a0842b40441db5332a5290f941021636b1182761Sol Boucher */ 326a0842b40441db5332a5290f941021636b1182761Sol Boucher private static String toApiCase(String enumCase) { 3271bd78b36e275371eff1ec1d07c9c1f93f63f5c39Alan Newberger return enumCase.toLowerCase(Locale.US).replaceAll("_", "-"); 328a0842b40441db5332a5290f941021636b1182761Sol Boucher } 329a0842b40441db5332a5290f941021636b1182761Sol Boucher 330a0842b40441db5332a5290f941021636b1182761Sol Boucher /** 3311bd78b36e275371eff1ec1d07c9c1f93f63f5c39Alan Newberger * Converts the string to underscore-delimited uppercase to match the enum constant names. 332a0842b40441db5332a5290f941021636b1182761Sol Boucher * 333a0842b40441db5332a5290f941021636b1182761Sol Boucher * @param apiCase An API-related string representation. 334a0842b40441db5332a5290f941021636b1182761Sol Boucher * @return The converted string. 335a0842b40441db5332a5290f941021636b1182761Sol Boucher */ 336a0842b40441db5332a5290f941021636b1182761Sol Boucher private static String toEnumCase(String apiCase) { 3371bd78b36e275371eff1ec1d07c9c1f93f63f5c39Alan Newberger return apiCase.toUpperCase(Locale.US).replaceAll("-", "_"); 338a0842b40441db5332a5290f941021636b1182761Sol Boucher } 339a0842b40441db5332a5290f941021636b1182761Sol Boucher 340c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 341c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Converts the focus mode to API-related string representation. 342c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * 343c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @param focus The focus mode to convert. 344c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @return The string used by the camera framework API to represent the 345a0842b40441db5332a5290f941021636b1182761Sol Boucher * focus mode. 346c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 347a0842b40441db5332a5290f941021636b1182761Sol Boucher public String stringify(FocusMode focus) { 348a0842b40441db5332a5290f941021636b1182761Sol Boucher return toApiCase(focus.name()); 349a0842b40441db5332a5290f941021636b1182761Sol Boucher } 350c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 351c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 352c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Converts the API-related string representation of the focus mode to the 353c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * abstract representation. 354c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * 355c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @param val The string representation. 356a0842b40441db5332a5290f941021636b1182761Sol Boucher * @return The focus mode represented by the input string, or the focus 357a0842b40441db5332a5290f941021636b1182761Sol Boucher * mode with the lowest ordinal if it cannot be converted. 358a0842b40441db5332a5290f941021636b1182761Sol Boucher */ 359a0842b40441db5332a5290f941021636b1182761Sol Boucher public FocusMode focusModeFromString(String val) { 360a0842b40441db5332a5290f941021636b1182761Sol Boucher if (val == null) { 361a0842b40441db5332a5290f941021636b1182761Sol Boucher return FocusMode.values()[0]; 362a0842b40441db5332a5290f941021636b1182761Sol Boucher } 363a0842b40441db5332a5290f941021636b1182761Sol Boucher try { 364a0842b40441db5332a5290f941021636b1182761Sol Boucher return FocusMode.valueOf(toEnumCase(val)); 365a0842b40441db5332a5290f941021636b1182761Sol Boucher } catch (IllegalArgumentException ex) { 366a0842b40441db5332a5290f941021636b1182761Sol Boucher return FocusMode.values()[0]; 367a0842b40441db5332a5290f941021636b1182761Sol Boucher } 368a0842b40441db5332a5290f941021636b1182761Sol Boucher } 369c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 370c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 371c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Converts the flash mode to API-related string representation. 372c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * 373c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @param flash The focus mode to convert. 374c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @return The string used by the camera framework API to represent the 375a0842b40441db5332a5290f941021636b1182761Sol Boucher * flash mode. 376c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 377a0842b40441db5332a5290f941021636b1182761Sol Boucher public String stringify(FlashMode flash) { 378a0842b40441db5332a5290f941021636b1182761Sol Boucher return toApiCase(flash.name()); 379a0842b40441db5332a5290f941021636b1182761Sol Boucher } 380c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 381c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 382c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Converts the API-related string representation of the flash mode to the 383c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * abstract representation. 384c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * 385c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @param val The string representation. 386a0842b40441db5332a5290f941021636b1182761Sol Boucher * @return The flash mode represented by the input string, or the flash 387a0842b40441db5332a5290f941021636b1182761Sol Boucher * mode with the lowest ordinal if it cannot be converted. 388a0842b40441db5332a5290f941021636b1182761Sol Boucher */ 389a0842b40441db5332a5290f941021636b1182761Sol Boucher public FlashMode flashModeFromString(String val) { 390a0842b40441db5332a5290f941021636b1182761Sol Boucher if (val == null) { 391a0842b40441db5332a5290f941021636b1182761Sol Boucher return FlashMode.values()[0]; 392a0842b40441db5332a5290f941021636b1182761Sol Boucher } 393a0842b40441db5332a5290f941021636b1182761Sol Boucher try { 394a0842b40441db5332a5290f941021636b1182761Sol Boucher return FlashMode.valueOf(toEnumCase(val)); 395a0842b40441db5332a5290f941021636b1182761Sol Boucher } catch (IllegalArgumentException ex) { 396a0842b40441db5332a5290f941021636b1182761Sol Boucher return FlashMode.values()[0]; 397a0842b40441db5332a5290f941021636b1182761Sol Boucher } 398a0842b40441db5332a5290f941021636b1182761Sol Boucher } 399c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 400c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 401c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Converts the scene mode to API-related string representation. 402c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * 403c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @param scene The focus mode to convert. 404c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @return The string used by the camera framework API to represent the 405a0842b40441db5332a5290f941021636b1182761Sol Boucher * scene mode. 406c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 407a0842b40441db5332a5290f941021636b1182761Sol Boucher public String stringify(SceneMode scene) { 408a0842b40441db5332a5290f941021636b1182761Sol Boucher return toApiCase(scene.name()); 409a0842b40441db5332a5290f941021636b1182761Sol Boucher } 410c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 411c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 412c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Converts the API-related string representation of the scene mode to the 413c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * abstract representation. 414c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * 415c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @param val The string representation. 416a0842b40441db5332a5290f941021636b1182761Sol Boucher * @return The scene mode represented by the input string, or the scene 417a0842b40441db5332a5290f941021636b1182761Sol Boucher * mode with the lowest ordinal if it cannot be converted. 418a0842b40441db5332a5290f941021636b1182761Sol Boucher */ 419a0842b40441db5332a5290f941021636b1182761Sol Boucher public SceneMode sceneModeFromString(String val) { 420a0842b40441db5332a5290f941021636b1182761Sol Boucher if (val == null) { 421a0842b40441db5332a5290f941021636b1182761Sol Boucher return SceneMode.values()[0]; 422a0842b40441db5332a5290f941021636b1182761Sol Boucher } 423a0842b40441db5332a5290f941021636b1182761Sol Boucher try { 424a0842b40441db5332a5290f941021636b1182761Sol Boucher return SceneMode.valueOf(toEnumCase(val)); 425a0842b40441db5332a5290f941021636b1182761Sol Boucher } catch (IllegalArgumentException ex) { 426a0842b40441db5332a5290f941021636b1182761Sol Boucher return SceneMode.values()[0]; 427a0842b40441db5332a5290f941021636b1182761Sol Boucher } 428a0842b40441db5332a5290f941021636b1182761Sol Boucher } 429c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 430c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 431c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Converts the white balance to API-related string representation. 432c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * 433c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @param wb The focus mode to convert. 434c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @return The string used by the camera framework API to represent the 435c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * white balance. 436c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 437a0842b40441db5332a5290f941021636b1182761Sol Boucher public String stringify(WhiteBalance wb) { 438a0842b40441db5332a5290f941021636b1182761Sol Boucher return toApiCase(wb.name()); 439a0842b40441db5332a5290f941021636b1182761Sol Boucher } 440c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 441c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 442c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Converts the API-related string representation of the white balance to 443c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * the abstract representation. 444c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * 445c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @param val The string representation. 446a0842b40441db5332a5290f941021636b1182761Sol Boucher * @return The white balance represented by the input string, or the 447a0842b40441db5332a5290f941021636b1182761Sol Boucher * white balance with the lowest ordinal if it cannot be 448a0842b40441db5332a5290f941021636b1182761Sol Boucher * converted. 449a0842b40441db5332a5290f941021636b1182761Sol Boucher */ 450a0842b40441db5332a5290f941021636b1182761Sol Boucher public WhiteBalance whiteBalanceFromString(String val) { 451a0842b40441db5332a5290f941021636b1182761Sol Boucher if (val == null) { 452a0842b40441db5332a5290f941021636b1182761Sol Boucher return WhiteBalance.values()[0]; 453a0842b40441db5332a5290f941021636b1182761Sol Boucher } 454a0842b40441db5332a5290f941021636b1182761Sol Boucher try { 455a0842b40441db5332a5290f941021636b1182761Sol Boucher return WhiteBalance.valueOf(toEnumCase(val)); 456a0842b40441db5332a5290f941021636b1182761Sol Boucher } catch (IllegalArgumentException ex) { 457a0842b40441db5332a5290f941021636b1182761Sol Boucher return WhiteBalance.values()[0]; 458a0842b40441db5332a5290f941021636b1182761Sol Boucher } 459a0842b40441db5332a5290f941021636b1182761Sol Boucher } 460c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 461c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 462c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 4638097973089420749dcd1ab4974a629c2466b31ccAngus Kong * Constructor. 4648097973089420749dcd1ab4974a629c2466b31ccAngus Kong * @param stringifier The API-specific stringifier for this instance. 465c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 4668097973089420749dcd1ab4974a629c2466b31ccAngus Kong CameraCapabilities(Stringifier stringifier) { 4678097973089420749dcd1ab4974a629c2466b31ccAngus Kong mStringifier = stringifier; 468c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 469c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 470c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 471c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * Copy constructor. 472c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @param src The source instance. 473c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 474c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong public CameraCapabilities(CameraCapabilities src) { 475c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedPreviewFpsRange.addAll(src.mSupportedPreviewFpsRange); 476c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedPreviewSizes.addAll(src.mSupportedPreviewSizes); 477c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedPreviewFormats.addAll(src.mSupportedPreviewFormats); 478c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedVideoSizes.addAll(src.mSupportedVideoSizes); 4798097973089420749dcd1ab4974a629c2466b31ccAngus Kong mSupportedPhotoSizes.addAll(src.mSupportedPhotoSizes); 4808097973089420749dcd1ab4974a629c2466b31ccAngus Kong mSupportedPhotoFormats.addAll(src.mSupportedPhotoFormats); 481c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedSceneModes.addAll(src.mSupportedSceneModes); 482c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedFlashModes.addAll(src.mSupportedFlashModes); 483c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedFocusModes.addAll(src.mSupportedFocusModes); 484c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedWhiteBalances.addAll(src.mSupportedWhiteBalances); 485c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedFeatures.addAll(src.mSupportedFeatures); 4868097973089420749dcd1ab4974a629c2466b31ccAngus Kong mPreferredPreviewSizeForVideo = src.mPreferredPreviewSizeForVideo; 487c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mMaxExposureCompensation = src.mMaxExposureCompensation; 488c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mMinExposureCompensation = src.mMinExposureCompensation; 489c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mExposureCompensationStep = src.mExposureCompensationStep; 490c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mMaxNumOfFacesSupported = src.mMaxNumOfFacesSupported; 491c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mMaxNumOfFocusAreas = src.mMaxNumOfFocusAreas; 4928097973089420749dcd1ab4974a629c2466b31ccAngus Kong mMaxNumOfMeteringArea = src.mMaxNumOfMeteringArea; 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 /** 639c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @return The min exposure compensation index. The EV is the compensation 640c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * index multiplied by the step value. If unsupported, both this method and 641c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * {@link #getMaxExposureCompensation()} return 0. 642c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 643c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong public final int getMinExposureCompensation() { 644c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return mMinExposureCompensation; 645c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 646c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 647c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 648c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @return The max exposure compensation index. The EV is the compensation 649c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * index multiplied by the step value. If unsupported, both this method and 650c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * {@link #getMinExposureCompensation()} return 0. 651c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 652c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong public final int getMaxExposureCompensation() { 653c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return mMaxExposureCompensation; 654c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 655c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 656c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 657c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @return The exposure compensation step. The EV is the compensation index 658c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * multiplied by the step value. 659c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 660c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong public final float getExposureCompensationStep() { 661c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return mExposureCompensationStep; 662c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 663c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 664c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 665c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @return The max number of faces supported by the face detection. 0 if 666c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * unsupported. 667c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 668c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong public final int getMaxNumOfFacesSupported() { 669c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return mMaxNumOfFacesSupported; 670c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 671c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 672c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong /** 673c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * @return The stringifier used by this instance. 674c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 675c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong public Stringifier getStringifier() { 676c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return mStringifier; 677c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 6788097973089420749dcd1ab4974a629c2466b31ccAngus Kong 6798097973089420749dcd1ab4974a629c2466b31ccAngus Kong private boolean zoomCheck(final CameraSettings settings) { 6808097973089420749dcd1ab4974a629c2466b31ccAngus Kong final float ratio = settings.getCurrentZoomRatio(); 6818097973089420749dcd1ab4974a629c2466b31ccAngus Kong if (!supports(Feature.ZOOM)) { 6829d8668449376fa47bc6528c7a61b04d6a0f691b3Sol Boucher if (ratio != ZOOM_RATIO_UNZOOMED) { 6838097973089420749dcd1ab4974a629c2466b31ccAngus Kong Log.v(TAG, "Zoom is not supported"); 6848097973089420749dcd1ab4974a629c2466b31ccAngus Kong return false; 6858097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 6868097973089420749dcd1ab4974a629c2466b31ccAngus Kong } else { 6879d8668449376fa47bc6528c7a61b04d6a0f691b3Sol Boucher if (settings.getCurrentZoomRatio() > getMaxZoomRatio()) { 6888097973089420749dcd1ab4974a629c2466b31ccAngus Kong Log.v(TAG, "Zoom ratio is not supported: ratio = " + 6899d8668449376fa47bc6528c7a61b04d6a0f691b3Sol Boucher settings.getCurrentZoomRatio()); 6908097973089420749dcd1ab4974a629c2466b31ccAngus Kong return false; 6918097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 6928097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 6938097973089420749dcd1ab4974a629c2466b31ccAngus Kong return true; 6948097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 6958097973089420749dcd1ab4974a629c2466b31ccAngus Kong 6968097973089420749dcd1ab4974a629c2466b31ccAngus Kong private boolean exposureCheck(final CameraSettings settings) { 6978097973089420749dcd1ab4974a629c2466b31ccAngus Kong final int index = settings.getExposureCompensationIndex(); 6988097973089420749dcd1ab4974a629c2466b31ccAngus Kong if (index > getMaxExposureCompensation() || index < getMinExposureCompensation()) { 6998097973089420749dcd1ab4974a629c2466b31ccAngus Kong Log.v(TAG, "Exposure compensation index is not supported. Min = " + 7008097973089420749dcd1ab4974a629c2466b31ccAngus Kong getMinExposureCompensation() + ", max = " + getMaxExposureCompensation() + "," + 7018097973089420749dcd1ab4974a629c2466b31ccAngus Kong " setting = " + index); 7028097973089420749dcd1ab4974a629c2466b31ccAngus Kong return false; 7038097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 7048097973089420749dcd1ab4974a629c2466b31ccAngus Kong return true; 7058097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 7068097973089420749dcd1ab4974a629c2466b31ccAngus Kong 7078097973089420749dcd1ab4974a629c2466b31ccAngus Kong private boolean focusCheck(final CameraSettings settings) { 7088097973089420749dcd1ab4974a629c2466b31ccAngus Kong FocusMode focusMode = settings.getCurrentFocusMode(); 7098097973089420749dcd1ab4974a629c2466b31ccAngus Kong if (!supports(focusMode)) { 710f2b5a976bb1c30f83682a996ce9289a973c88784Sol Boucher if (supports(FocusMode.FIXED)) { 711f2b5a976bb1c30f83682a996ce9289a973c88784Sol Boucher // Workaround for devices whose templates define defaults they don't really support 712f2b5a976bb1c30f83682a996ce9289a973c88784Sol Boucher // TODO: Remove workaround (b/17177436) 713f2b5a976bb1c30f83682a996ce9289a973c88784Sol Boucher Log.w(TAG, "Focus mode not supported... trying FIXED"); 714f2b5a976bb1c30f83682a996ce9289a973c88784Sol Boucher settings.setFocusMode(FocusMode.FIXED); 715f2b5a976bb1c30f83682a996ce9289a973c88784Sol Boucher } else { 716f2b5a976bb1c30f83682a996ce9289a973c88784Sol Boucher Log.v(TAG, "Focus mode not supported:" + 717f2b5a976bb1c30f83682a996ce9289a973c88784Sol Boucher (focusMode != null ? focusMode.name() : "null")); 718f2b5a976bb1c30f83682a996ce9289a973c88784Sol Boucher return false; 719f2b5a976bb1c30f83682a996ce9289a973c88784Sol Boucher } 7208097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 7218097973089420749dcd1ab4974a629c2466b31ccAngus Kong return true; 7228097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 7238097973089420749dcd1ab4974a629c2466b31ccAngus Kong 7248097973089420749dcd1ab4974a629c2466b31ccAngus Kong private boolean flashCheck(final CameraSettings settings) { 7258097973089420749dcd1ab4974a629c2466b31ccAngus Kong FlashMode flashMode = settings.getCurrentFlashMode(); 7268097973089420749dcd1ab4974a629c2466b31ccAngus Kong if (!supports(flashMode)) { 7278097973089420749dcd1ab4974a629c2466b31ccAngus Kong Log.v(TAG, 7288097973089420749dcd1ab4974a629c2466b31ccAngus Kong "Flash mode not supported:" + (flashMode != null ? flashMode.name() : "null")); 7298097973089420749dcd1ab4974a629c2466b31ccAngus Kong return false; 7308097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 7318097973089420749dcd1ab4974a629c2466b31ccAngus Kong return true; 7328097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 7338097973089420749dcd1ab4974a629c2466b31ccAngus Kong 7348097973089420749dcd1ab4974a629c2466b31ccAngus Kong private boolean photoSizeCheck(final CameraSettings settings) { 7358097973089420749dcd1ab4974a629c2466b31ccAngus Kong Size photoSize = settings.getCurrentPhotoSize(); 7368097973089420749dcd1ab4974a629c2466b31ccAngus Kong if (mSupportedPhotoSizes.contains(photoSize)) { 7378097973089420749dcd1ab4974a629c2466b31ccAngus Kong return true; 7388097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 7398097973089420749dcd1ab4974a629c2466b31ccAngus Kong Log.v(TAG, "Unsupported photo size:" + photoSize); 7408097973089420749dcd1ab4974a629c2466b31ccAngus Kong return false; 7418097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 7428097973089420749dcd1ab4974a629c2466b31ccAngus Kong 7438097973089420749dcd1ab4974a629c2466b31ccAngus Kong private boolean previewSizeCheck(final CameraSettings settings) { 7448097973089420749dcd1ab4974a629c2466b31ccAngus Kong final Size previewSize = settings.getCurrentPreviewSize(); 7458097973089420749dcd1ab4974a629c2466b31ccAngus Kong if (mSupportedPreviewSizes.contains(previewSize)) { 7468097973089420749dcd1ab4974a629c2466b31ccAngus Kong return true; 7478097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 7488097973089420749dcd1ab4974a629c2466b31ccAngus Kong Log.v(TAG, "Unsupported preview size:" + previewSize); 7498097973089420749dcd1ab4974a629c2466b31ccAngus Kong return false; 7508097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 7518097973089420749dcd1ab4974a629c2466b31ccAngus Kong 7528097973089420749dcd1ab4974a629c2466b31ccAngus Kong private boolean videoStabilizationCheck(final CameraSettings settings) { 7538097973089420749dcd1ab4974a629c2466b31ccAngus Kong if (!settings.isVideoStabilizationEnabled() || supports(Feature.VIDEO_STABILIZATION)) { 7548097973089420749dcd1ab4974a629c2466b31ccAngus Kong return true; 7558097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 7568097973089420749dcd1ab4974a629c2466b31ccAngus Kong Log.v(TAG, "Video stabilization is not supported"); 7578097973089420749dcd1ab4974a629c2466b31ccAngus Kong return false; 7588097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 759c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong} 760