CameraCapabilities.java revision 8097973089420749dcd1ab4974a629c2466b31cc
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
378097973089420749dcd1ab4974a629c2466b31ccAngus Kong    private static Log.Tag TAG = new Log.Tag("CamCapabilities");
388097973089420749dcd1ab4974a629c2466b31ccAngus Kong
398097973089420749dcd1ab4974a629c2466b31ccAngus Kong    /* All internal states are declared final and should be thread-safe. */
40c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
41c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    protected final ArrayList<int[]> mSupportedPreviewFpsRange = new ArrayList<int[]>();
428097973089420749dcd1ab4974a629c2466b31ccAngus Kong    protected final ArrayList<Size> mSupportedPreviewSizes = new ArrayList<Size>();
43c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    protected final TreeSet<Integer> mSupportedPreviewFormats = new TreeSet<Integer>();
448097973089420749dcd1ab4974a629c2466b31ccAngus Kong    protected final ArrayList<Size> mSupportedVideoSizes = new ArrayList<Size>();
458097973089420749dcd1ab4974a629c2466b31ccAngus Kong    protected final ArrayList<Size> mSupportedPhotoSizes = new ArrayList<Size>();
468097973089420749dcd1ab4974a629c2466b31ccAngus Kong    protected final TreeSet<Integer> mSupportedPhotoFormats = new TreeSet<Integer>();
47c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    protected final EnumSet<SceneMode> mSupportedSceneModes = EnumSet.noneOf(SceneMode.class);
48c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    protected final EnumSet<FlashMode> mSupportedFlashModes = EnumSet.noneOf(FlashMode.class);
49c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    protected final EnumSet<FocusMode> mSupportedFocusModes = EnumSet.noneOf(FocusMode.class);
50c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    protected final EnumSet<WhiteBalance> mSupportedWhiteBalances =
51c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong            EnumSet.noneOf(WhiteBalance.class);
52c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    protected final EnumSet<Feature> mSupportedFeatures = EnumSet.noneOf(Feature.class);
538097973089420749dcd1ab4974a629c2466b31ccAngus Kong    protected Size mPreferredPreviewSizeForVideo;
54c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    protected int mMinExposureCompensation;
55c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    protected int mMaxExposureCompensation;
56c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    protected float mExposureCompensationStep;
57c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    protected int mMaxNumOfFacesSupported;
58c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    protected int mMaxNumOfFocusAreas;
59c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    protected int mMaxNumOfMeteringArea;
608097973089420749dcd1ab4974a629c2466b31ccAngus Kong    protected int mMaxZoomRatio;
61c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    private final Stringifier mStringifier;
628097973089420749dcd1ab4974a629c2466b31ccAngus Kong    protected final ArrayList<Integer> mZoomRatioList = new ArrayList<Integer>();
638097973089420749dcd1ab4974a629c2466b31ccAngus Kong    protected int mMaxZoomIndex;
64c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
658097973089420749dcd1ab4974a629c2466b31ccAngus Kong    /**
668097973089420749dcd1ab4974a629c2466b31ccAngus Kong     * Focus modes.
678097973089420749dcd1ab4974a629c2466b31ccAngus Kong     */
68c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    public enum FocusMode {
69c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
70c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Continuous auto focus mode intended for taking pictures.
71c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#FOCUS_MODE_AUTO}.
72c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
73c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        AUTO,
74c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
75c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Continuous auto focus mode intended for taking pictures.
76c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#FOCUS_MODE_CONTINUOUS_PICTURE}.
77c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
78c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        CONTINUOUS_PICTURE,
79c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
80c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Continuous auto focus mode intended for video recording.
81c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#FOCUS_MODE_CONTINUOUS_VIDEO}.
82c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
83c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        CONTINUOUS_VIDEO,
84c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
85c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Extended depth of field (EDOF).
86c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#FOCUS_MODE_EDOF}.
87c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
88c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        EXTENDED_DOF,
89c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
90c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Focus is fixed.
91c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#FOCUS_MODE_FIXED}.
92c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
93c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        FIXED,
94c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
95c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Focus is set at infinity.
96c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#FOCUS_MODE_INFINITY}.
97c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
98c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        INFINITY,
99c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
100c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Macro (close-up) focus mode.
101c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#FOCUS_MODE_MACRO}.
102c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
103c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        MACRO,
104c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    }
105c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
1068097973089420749dcd1ab4974a629c2466b31ccAngus Kong    /**
1078097973089420749dcd1ab4974a629c2466b31ccAngus Kong     * Flash modes.
1088097973089420749dcd1ab4974a629c2466b31ccAngus Kong     */
109c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    public enum FlashMode {
110c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
1118097973089420749dcd1ab4974a629c2466b31ccAngus Kong         * No flash.
1128097973089420749dcd1ab4974a629c2466b31ccAngus Kong         */
1138097973089420749dcd1ab4974a629c2466b31ccAngus Kong        NO_FLASH,
1148097973089420749dcd1ab4974a629c2466b31ccAngus Kong        /**
115c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Flash will be fired automatically when required.
116c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#FLASH_MODE_OFF}.
117c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
118c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        AUTO,
119c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
120c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Flash will not be fired.
121c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#FLASH_MODE_OFF}.
122c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
123c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        OFF,
124c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
125c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Flash will always be fired during snapshot.
126c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#FLASH_MODE_ON}.
127c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
128c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        ON,
129c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
130c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Constant emission of light during preview, auto-focus and snapshot.
131c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#FLASH_MODE_TORCH}.
132c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
133c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        TORCH,
134c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
135c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Flash will be fired in red-eye reduction mode.
136c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#FLASH_MODE_RED_EYE}.
137c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
138c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        RED_EYE,
139c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    }
140c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
1418097973089420749dcd1ab4974a629c2466b31ccAngus Kong    /**
1428097973089420749dcd1ab4974a629c2466b31ccAngus Kong     * Scene modes.
1438097973089420749dcd1ab4974a629c2466b31ccAngus Kong     */
144c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    public enum SceneMode {
145c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
1468097973089420749dcd1ab4974a629c2466b31ccAngus Kong         * No supported scene mode.
1478097973089420749dcd1ab4974a629c2466b31ccAngus Kong         */
1488097973089420749dcd1ab4974a629c2466b31ccAngus Kong        NO_SCENE_MODE,
1498097973089420749dcd1ab4974a629c2466b31ccAngus Kong        /**
150c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Scene mode is off.
151c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_AUTO}.
152c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
153c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        AUTO,
154c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
155c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Take photos of fast moving objects.
156c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_ACTION}.
157c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
158c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        ACTION,
159c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
160c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Applications are looking for a barcode.
161c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_BARCODE}.
162c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
163c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        BARCODE,
164c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
165c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Take pictures on the beach.
166c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_BEACH}.
167c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
168c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        BEACH,
169c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
170c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Capture the naturally warm color of scenes lit by candles.
171c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_CANDLELIGHT}.
172c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
173c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        CANDLELIGHT,
174c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
175c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * For shooting firework displays.
176c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_FIREWORKS}.
177c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
178c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        FIREWORKS,
179c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
180c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Capture a scene using high dynamic range imaging techniques.
181c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_HDR}.
182c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
183c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        HDR,
184c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
185c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Take pictures on distant objects.
186c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_LANDSCAPE}.
187c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
188c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        LANDSCAPE,
189c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
190c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Take photos at night.
191c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_NIGHT}.
192c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
193c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        NIGHT,
194c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
195c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Take people pictures at night.
196c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_NIGHT_PORTRAIT}.
197c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
198c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        NIGHT_PORTRAIT,
199c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
200c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Take indoor low-light shot.
201c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_PARTY}.
202c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
203c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        PARTY,
204c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
205c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Take people pictures.
206c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_PORTRAIT}.
207c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
208c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        PORTRAIT,
209c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
210c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Take pictures on the snow.
211c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_SNOW}.
212c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
213c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        SNOW,
214c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
215c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Take photos of fast moving objects.
216c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_SPORTS}.
217c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
218c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        SPORTS,
219c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
220c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Avoid blurry pictures (for example, due to hand shake).
221c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_STEADYPHOTO}.
222c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
223c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        STEADYPHOTO,
224c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
225c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Take sunset photos.
226c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_SUNSET}.
227c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
228c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        SUNSET,
229c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
230c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Take photos in a theater.
231c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_THEATRE}.
232c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
233c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        THEATRE,
234c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    }
235c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
2368097973089420749dcd1ab4974a629c2466b31ccAngus Kong    /**
2378097973089420749dcd1ab4974a629c2466b31ccAngus Kong     * White blances.
2388097973089420749dcd1ab4974a629c2466b31ccAngus Kong     */
239c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    public enum WhiteBalance {
240c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
241c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#WHITE_BALANCE_AUTO}.
242c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
243c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        AUTO,
244c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
245c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#WHITE_BALANCE_CLOUDY_DAYLIGHT}.
246c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
247c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        CLOUDY_DAYLIGHT,
248c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
249c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#WHITE_BALANCE_DAYLIGHT}.
250c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
251c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        DAYLIGHT,
252c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
253c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#WHITE_BALANCE_FLUORESCENT}.
254c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
255c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        FLUORESCENT,
256c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
257c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#WHITE_BALANCE_INCANDESCENT}.
258c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
259c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        INCANDESCENT,
260c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
261c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#WHITE_BALANCE_SHADE}.
262c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
263c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        SHADE,
264c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
265c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#WHITE_BALANCE_TWILIGHT}.
266c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
267c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        TWILIGHT,
268c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
269c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#WHITE_BALANCE_WARM_FLUORESCENT}.
270c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
271c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        WARM_FLUORESCENT,
272c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    }
273c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
2748097973089420749dcd1ab4974a629c2466b31ccAngus Kong    /**
2758097973089420749dcd1ab4974a629c2466b31ccAngus Kong     * Features.
2768097973089420749dcd1ab4974a629c2466b31ccAngus Kong     */
277c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    public enum Feature {
278c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
279c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Support zoom-related methods.
280c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
281c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        ZOOM,
282c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
283c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Support for photo capturing during video recording.
284c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
285c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        VIDEO_SNAPSHOT,
286c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
287c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Support for focus area settings.
288c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
289c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        FOCUS_AREA,
290c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
291c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Support for metering area settings.
292c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
293c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        METERING_AREA,
294c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
295c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Support for automatic exposure lock.
296c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
297c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        AUTO_EXPOSURE_LOCK,
298c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
299c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Support for automatic white balance lock.
300c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
301c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        AUTO_WHITE_BALANCE_LOCK,
3028097973089420749dcd1ab4974a629c2466b31ccAngus Kong        /**
3038097973089420749dcd1ab4974a629c2466b31ccAngus Kong         * Support for video stabilization.
3048097973089420749dcd1ab4974a629c2466b31ccAngus Kong         */
3058097973089420749dcd1ab4974a629c2466b31ccAngus Kong        VIDEO_STABILIZATION,
306c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    }
307c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
308c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    /**
309c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     * A interface stringifier to convert abstract representations to API
310c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     * related string representation.
311c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     */
312c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    public interface Stringifier {
313c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
314c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Converts the focus mode to API-related string representation.
315c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         *
316c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @param focus The focus mode to convert.
317c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @return The string used by the camera framework API to represent the
318c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * focus mode.
319c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
320c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        String stringify(FocusMode focus);
321c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
322c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
323c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Converts the API-related string representation of the focus mode to the
324c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * abstract representation.
325c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         *
326c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @param val The string representation.
327c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @return The focus mode represented by the input string.
328c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
329c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        FocusMode focusModeFromString(String val);
330c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
331c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
332c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Converts the flash mode to API-related string representation.
333c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         *
334c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @param flash The focus mode to convert.
335c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @return The string used by the camera framework API to represent the
336c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * flash mode.
337c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
338c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        String stringify(FlashMode flash);
339c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
340c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
341c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Converts the API-related string representation of the flash mode to the
342c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * abstract representation.
343c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         *
344c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @param val The string representation.
3458097973089420749dcd1ab4974a629c2466b31ccAngus Kong         * @return The flash mode represented by the input string. Can be
3468097973089420749dcd1ab4974a629c2466b31ccAngus Kong         *         {@code null}.
347c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
348c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        FlashMode flashModeFromString(String val);
349c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
350c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
351c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Converts the scene mode to API-related string representation.
352c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         *
353c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @param scene The focus mode to convert.
354c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @return The string used by the camera framework API to represent the
355c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * scene mode.
356c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
357c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        String stringify(SceneMode scene);
358c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
359c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
360c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Converts the API-related string representation of the scene mode to the
361c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * abstract representation.
362c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         *
363c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @param val The string representation.
364c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @return The scene mode represented by the input string.
365c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
366c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        SceneMode sceneModeFromString(String val);
367c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
368c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
369c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Converts the white balance to API-related string representation.
370c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         *
371c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @param wb The focus mode to convert.
372c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @return The string used by the camera framework API to represent the
373c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * white balance.
374c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
375c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        String stringify(WhiteBalance wb);
376c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
377c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
378c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Converts the API-related string representation of the white balance to
379c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * the abstract representation.
380c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         *
381c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @param val The string representation.
382c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @return The white balance represented by the input string.
383c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
384c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        WhiteBalance whiteBalanceFromString(String val);
385c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    }
386c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
387c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    /**
3888097973089420749dcd1ab4974a629c2466b31ccAngus Kong     * Constructor.
3898097973089420749dcd1ab4974a629c2466b31ccAngus Kong     * @param stringifier The API-specific stringifier for this instance.
390c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     */
3918097973089420749dcd1ab4974a629c2466b31ccAngus Kong    CameraCapabilities(Stringifier stringifier) {
3928097973089420749dcd1ab4974a629c2466b31ccAngus Kong        mStringifier = stringifier;
393c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    }
394c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
395c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    /**
396c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     * Copy constructor.
397c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     * @param src The source instance.
398c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     */
399c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    public CameraCapabilities(CameraCapabilities src) {
400c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        mSupportedPreviewFpsRange.addAll(src.mSupportedPreviewFpsRange);
401c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        mSupportedPreviewSizes.addAll(src.mSupportedPreviewSizes);
402c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        mSupportedPreviewFormats.addAll(src.mSupportedPreviewFormats);
403c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        mSupportedVideoSizes.addAll(src.mSupportedVideoSizes);
4048097973089420749dcd1ab4974a629c2466b31ccAngus Kong        mSupportedPhotoSizes.addAll(src.mSupportedPhotoSizes);
4058097973089420749dcd1ab4974a629c2466b31ccAngus Kong        mSupportedPhotoFormats.addAll(src.mSupportedPhotoFormats);
406c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        mSupportedSceneModes.addAll(src.mSupportedSceneModes);
407c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        mSupportedFlashModes.addAll(src.mSupportedFlashModes);
408c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        mSupportedFocusModes.addAll(src.mSupportedFocusModes);
409c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        mSupportedWhiteBalances.addAll(src.mSupportedWhiteBalances);
410c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        mSupportedFeatures.addAll(src.mSupportedFeatures);
4118097973089420749dcd1ab4974a629c2466b31ccAngus Kong        mPreferredPreviewSizeForVideo = src.mPreferredPreviewSizeForVideo;
412c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        mMaxExposureCompensation = src.mMaxExposureCompensation;
413c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        mMinExposureCompensation = src.mMinExposureCompensation;
414c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        mExposureCompensationStep = src.mExposureCompensationStep;
415c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        mMaxNumOfFacesSupported = src.mMaxNumOfFacesSupported;
416c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        mMaxNumOfFocusAreas = src.mMaxNumOfFocusAreas;
4178097973089420749dcd1ab4974a629c2466b31ccAngus Kong        mMaxNumOfMeteringArea = src.mMaxNumOfMeteringArea;
4188097973089420749dcd1ab4974a629c2466b31ccAngus Kong        mMaxZoomRatio = src.mMaxZoomRatio;
419c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        mStringifier = src.mStringifier;
420c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    }
421c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
422c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    /**
423c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     * @return the supported picture formats. See {@link android.graphics.ImageFormat}.
424c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     */
4258097973089420749dcd1ab4974a629c2466b31ccAngus Kong    public Set<Integer> getSupportedPhotoFormats() {
4268097973089420749dcd1ab4974a629c2466b31ccAngus Kong        return new TreeSet<Integer>(mSupportedPhotoFormats);
427c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    }
428c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
429c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    /**
430c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     * Gets the supported preview formats.
431c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     * @return The supported preview {@link android.graphics.ImageFormat}s.
432c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     */
433c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    public Set<Integer> getSupportedPreviewFormats() {
434c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        return new TreeSet<Integer>(mSupportedPreviewFormats);
435c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    }
436c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
437c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    /**
438c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     * Gets the supported picture sizes.
439c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     */
4408097973089420749dcd1ab4974a629c2466b31ccAngus Kong    public List<Size> getSupportedPhotoSizes() {
4418097973089420749dcd1ab4974a629c2466b31ccAngus Kong        return new ArrayList<Size>(mSupportedPhotoSizes);
442c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    }
443c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
444c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
445c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    /**
446c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     * @return The supported preview fps (frame-per-second) ranges. The returned
447c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     * list is sorted by maximum fps then minimum fps in a descending order.
448c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     * The values are multiplied by 1000.
449c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     */
450c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    public final List<int[]> getSupportedPreviewFpsRange() {
451c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        return new ArrayList<int[]>(mSupportedPreviewFpsRange);
452c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    }
453c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
454c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    /**
4558097973089420749dcd1ab4974a629c2466b31ccAngus Kong     * @return The supported preview sizes. The list is sorted by width then
456c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     * height in a descending order.
457c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     */
4588097973089420749dcd1ab4974a629c2466b31ccAngus Kong    public final List<Size> getSupportedPreviewSizes() {
4598097973089420749dcd1ab4974a629c2466b31ccAngus Kong        return new ArrayList<Size>(mSupportedPreviewSizes);
4608097973089420749dcd1ab4974a629c2466b31ccAngus Kong    }
4618097973089420749dcd1ab4974a629c2466b31ccAngus Kong
4628097973089420749dcd1ab4974a629c2466b31ccAngus Kong    public final Size getPreferredPreviewSizeForVideo() {
4638097973089420749dcd1ab4974a629c2466b31ccAngus Kong        return new Size(mPreferredPreviewSizeForVideo);
464c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    }
465c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
466c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    /**
467c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     * @return The supported video frame sizes that can be used by MediaRecorder.
4688097973089420749dcd1ab4974a629c2466b31ccAngus Kong     *         The list is sorted by width then height in a descending order.
469c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     */
4708097973089420749dcd1ab4974a629c2466b31ccAngus Kong    public final List<Size> getSupportedVideoSizes() {
4718097973089420749dcd1ab4974a629c2466b31ccAngus Kong        return new ArrayList<Size>(mSupportedVideoSizes);
472c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    }
473c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
474c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    /**
475c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     * @return The supported scene modes.
476c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     */
477c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    public final Set<SceneMode> getSupportedSceneModes() {
478c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        return new HashSet<SceneMode>(mSupportedSceneModes);
479c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    }
480c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
481c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    /**
482c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     * @return Whether the scene mode is supported.
483c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     */
484c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    public final boolean supports(SceneMode scene) {
485c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        return (scene != null && mSupportedSceneModes.contains(scene));
486c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    }
487c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
4888097973089420749dcd1ab4974a629c2466b31ccAngus Kong    public boolean supports(final CameraSettings settings) {
4898097973089420749dcd1ab4974a629c2466b31ccAngus Kong        if (zoomCheck(settings) && exposureCheck(settings) && focusCheck(settings) &&
4908097973089420749dcd1ab4974a629c2466b31ccAngus Kong                flashCheck(settings) && photoSizeCheck(settings) && previewSizeCheck(settings) &&
4918097973089420749dcd1ab4974a629c2466b31ccAngus Kong                videoStabilizationCheck(settings)) {
4928097973089420749dcd1ab4974a629c2466b31ccAngus Kong            return true;
4938097973089420749dcd1ab4974a629c2466b31ccAngus Kong        }
4948097973089420749dcd1ab4974a629c2466b31ccAngus Kong        return false;
4958097973089420749dcd1ab4974a629c2466b31ccAngus Kong    }
4968097973089420749dcd1ab4974a629c2466b31ccAngus Kong
497c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    /**
498c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     * @return The supported flash modes.
499c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     */
500c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    public final Set<FlashMode> getSupportedFlashModes() {
501c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        return new HashSet<FlashMode>(mSupportedFlashModes);
502c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    }
503c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
504c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    /**
505c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     * @return Whether the flash mode is supported.
506c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     */
507c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    public final boolean supports(FlashMode flash) {
508c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        return (flash != null && mSupportedFlashModes.contains(flash));
509c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    }
510c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
511c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    /**
512c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     * @return The supported focus modes.
513c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     */
514c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    public final Set<FocusMode> getSupportedFocusModes() {
515c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        return new HashSet<FocusMode>(mSupportedFocusModes);
516c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    }
517c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
518c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    /**
519c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     * @return Whether the focus mode is supported.
520c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     */
521c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    public final boolean supports(FocusMode focus) {
522c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        return (focus != null && mSupportedFocusModes.contains(focus));
523c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    }
524c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
525c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    /**
526c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     * @return The supported white balanceas.
527c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     */
528c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    public final Set<WhiteBalance> getSupportedWhiteBalance() {
529c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        return new HashSet<WhiteBalance>(mSupportedWhiteBalances);
530c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    }
531c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
532c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    /**
533c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     * @return Whether the white balance is supported.
534c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     */
535c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    public boolean supports(WhiteBalance wb) {
536c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        return (wb != null && mSupportedWhiteBalances.contains(wb));
537c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    }
538c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
539c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    public final Set<Feature> getSupportedFeature() {
540c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        return new HashSet<Feature>(mSupportedFeatures);
541c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    }
542c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
543c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    public boolean supports(Feature ft) {
544c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        return (ft != null && mSupportedFeatures.contains(ft));
545c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    }
546c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
547c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    /**
5488097973089420749dcd1ab4974a629c2466b31ccAngus Kong     * @return The maximal supported zoom ratio.
5498097973089420749dcd1ab4974a629c2466b31ccAngus Kong     */
5508097973089420749dcd1ab4974a629c2466b31ccAngus Kong    public float getMaxZoomRatio() {
5518097973089420749dcd1ab4974a629c2466b31ccAngus Kong        return mMaxZoomRatio;
5528097973089420749dcd1ab4974a629c2466b31ccAngus Kong    }
5538097973089420749dcd1ab4974a629c2466b31ccAngus Kong
5548097973089420749dcd1ab4974a629c2466b31ccAngus Kong    // We'll replace these old style methods with new ones.
5558097973089420749dcd1ab4974a629c2466b31ccAngus Kong    @Deprecated
5568097973089420749dcd1ab4974a629c2466b31ccAngus Kong    public int getMaxZoomIndex() {
5578097973089420749dcd1ab4974a629c2466b31ccAngus Kong        return mMaxZoomIndex;
5588097973089420749dcd1ab4974a629c2466b31ccAngus Kong    }
5598097973089420749dcd1ab4974a629c2466b31ccAngus Kong
5608097973089420749dcd1ab4974a629c2466b31ccAngus Kong    @Deprecated
5618097973089420749dcd1ab4974a629c2466b31ccAngus Kong    public List<Integer> getZoomRatioList() {
5628097973089420749dcd1ab4974a629c2466b31ccAngus Kong        return new ArrayList<Integer>(mZoomRatioList);
5638097973089420749dcd1ab4974a629c2466b31ccAngus Kong    }
5648097973089420749dcd1ab4974a629c2466b31ccAngus Kong
5658097973089420749dcd1ab4974a629c2466b31ccAngus Kong    /**
566c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     * @return The min exposure compensation index. The EV is the compensation
567c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     * index multiplied by the step value. If unsupported, both this method and
568c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     * {@link #getMaxExposureCompensation()} return 0.
569c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     */
570c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    public final int getMinExposureCompensation() {
571c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        return mMinExposureCompensation;
572c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    }
573c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
574c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    /**
575c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     * @return The max exposure compensation index. The EV is the compensation
576c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     * index multiplied by the step value. If unsupported, both this method and
577c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     * {@link #getMinExposureCompensation()} return 0.
578c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     */
579c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    public final int getMaxExposureCompensation() {
580c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        return mMaxExposureCompensation;
581c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    }
582c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
583c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    /**
584c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     * @return The exposure compensation step. The EV is the compensation index
585c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     * multiplied by the step value.
586c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     */
587c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    public final float getExposureCompensationStep() {
588c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        return mExposureCompensationStep;
589c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    }
590c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
591c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    /**
592c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     * @return The max number of faces supported by the face detection. 0 if
593c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     * unsupported.
594c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     */
595c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    public final int getMaxNumOfFacesSupported() {
596c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        return mMaxNumOfFacesSupported;
597c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    }
598c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
599c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    /**
600c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     * @return The stringifier used by this instance.
601c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     */
602c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    public Stringifier getStringifier() {
603c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        return mStringifier;
604c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    }
6058097973089420749dcd1ab4974a629c2466b31ccAngus Kong
6068097973089420749dcd1ab4974a629c2466b31ccAngus Kong    private boolean zoomCheck(final CameraSettings settings) {
6078097973089420749dcd1ab4974a629c2466b31ccAngus Kong        final float ratio = settings.getCurrentZoomRatio();
6088097973089420749dcd1ab4974a629c2466b31ccAngus Kong        final int index = settings.getCurrentZoomIndex();
6098097973089420749dcd1ab4974a629c2466b31ccAngus Kong        if (!supports(Feature.ZOOM)) {
6108097973089420749dcd1ab4974a629c2466b31ccAngus Kong            if (ratio != 1.0f || index != 0) {
6118097973089420749dcd1ab4974a629c2466b31ccAngus Kong                Log.v(TAG, "Zoom is not supported");
6128097973089420749dcd1ab4974a629c2466b31ccAngus Kong                return false;
6138097973089420749dcd1ab4974a629c2466b31ccAngus Kong            }
6148097973089420749dcd1ab4974a629c2466b31ccAngus Kong        } else {
6158097973089420749dcd1ab4974a629c2466b31ccAngus Kong            if (settings.getCurrentZoomRatio() > getMaxZoomRatio() ||
6168097973089420749dcd1ab4974a629c2466b31ccAngus Kong                    index > getMaxZoomIndex()) {
6178097973089420749dcd1ab4974a629c2466b31ccAngus Kong                Log.v(TAG, "Zoom ratio is not supported: ratio = " +
6188097973089420749dcd1ab4974a629c2466b31ccAngus Kong                        settings.getCurrentZoomRatio() + ", index = " + index);
6198097973089420749dcd1ab4974a629c2466b31ccAngus Kong                return false;
6208097973089420749dcd1ab4974a629c2466b31ccAngus Kong            }
6218097973089420749dcd1ab4974a629c2466b31ccAngus Kong        }
6228097973089420749dcd1ab4974a629c2466b31ccAngus Kong        return true;
6238097973089420749dcd1ab4974a629c2466b31ccAngus Kong    }
6248097973089420749dcd1ab4974a629c2466b31ccAngus Kong
6258097973089420749dcd1ab4974a629c2466b31ccAngus Kong    private boolean exposureCheck(final CameraSettings settings) {
6268097973089420749dcd1ab4974a629c2466b31ccAngus Kong        final int index = settings.getExposureCompensationIndex();
6278097973089420749dcd1ab4974a629c2466b31ccAngus Kong        if (index > getMaxExposureCompensation() || index < getMinExposureCompensation()) {
6288097973089420749dcd1ab4974a629c2466b31ccAngus Kong            Log.v(TAG, "Exposure compensation index is not supported. Min = " +
6298097973089420749dcd1ab4974a629c2466b31ccAngus Kong                    getMinExposureCompensation() + ", max = " + getMaxExposureCompensation() + "," +
6308097973089420749dcd1ab4974a629c2466b31ccAngus Kong                    " setting = " + index);
6318097973089420749dcd1ab4974a629c2466b31ccAngus Kong            return false;
6328097973089420749dcd1ab4974a629c2466b31ccAngus Kong        }
6338097973089420749dcd1ab4974a629c2466b31ccAngus Kong        return true;
6348097973089420749dcd1ab4974a629c2466b31ccAngus Kong    }
6358097973089420749dcd1ab4974a629c2466b31ccAngus Kong
6368097973089420749dcd1ab4974a629c2466b31ccAngus Kong    private boolean focusCheck(final CameraSettings settings) {
6378097973089420749dcd1ab4974a629c2466b31ccAngus Kong        FocusMode focusMode = settings.getCurrentFocusMode();
6388097973089420749dcd1ab4974a629c2466b31ccAngus Kong        if (!supports(focusMode)) {
6398097973089420749dcd1ab4974a629c2466b31ccAngus Kong            Log.v(TAG,
6408097973089420749dcd1ab4974a629c2466b31ccAngus Kong                    "Focus mode not supported:" + (focusMode != null ? focusMode.name() : "null"));
6418097973089420749dcd1ab4974a629c2466b31ccAngus Kong            return false;
6428097973089420749dcd1ab4974a629c2466b31ccAngus Kong        }
6438097973089420749dcd1ab4974a629c2466b31ccAngus Kong        return true;
6448097973089420749dcd1ab4974a629c2466b31ccAngus Kong    }
6458097973089420749dcd1ab4974a629c2466b31ccAngus Kong
6468097973089420749dcd1ab4974a629c2466b31ccAngus Kong    private boolean flashCheck(final CameraSettings settings) {
6478097973089420749dcd1ab4974a629c2466b31ccAngus Kong        FlashMode flashMode = settings.getCurrentFlashMode();
6488097973089420749dcd1ab4974a629c2466b31ccAngus Kong        if (!supports(flashMode)) {
6498097973089420749dcd1ab4974a629c2466b31ccAngus Kong            Log.v(TAG,
6508097973089420749dcd1ab4974a629c2466b31ccAngus Kong                    "Flash mode not supported:" + (flashMode != null ? flashMode.name() : "null"));
6518097973089420749dcd1ab4974a629c2466b31ccAngus Kong            return false;
6528097973089420749dcd1ab4974a629c2466b31ccAngus Kong        }
6538097973089420749dcd1ab4974a629c2466b31ccAngus Kong        return true;
6548097973089420749dcd1ab4974a629c2466b31ccAngus Kong    }
6558097973089420749dcd1ab4974a629c2466b31ccAngus Kong
6568097973089420749dcd1ab4974a629c2466b31ccAngus Kong    private boolean photoSizeCheck(final CameraSettings settings) {
6578097973089420749dcd1ab4974a629c2466b31ccAngus Kong        Size photoSize = settings.getCurrentPhotoSize();
6588097973089420749dcd1ab4974a629c2466b31ccAngus Kong        if (mSupportedPhotoSizes.contains(photoSize)) {
6598097973089420749dcd1ab4974a629c2466b31ccAngus Kong            return true;
6608097973089420749dcd1ab4974a629c2466b31ccAngus Kong        }
6618097973089420749dcd1ab4974a629c2466b31ccAngus Kong        Log.v(TAG, "Unsupported photo size:" + photoSize);
6628097973089420749dcd1ab4974a629c2466b31ccAngus Kong        return false;
6638097973089420749dcd1ab4974a629c2466b31ccAngus Kong    }
6648097973089420749dcd1ab4974a629c2466b31ccAngus Kong
6658097973089420749dcd1ab4974a629c2466b31ccAngus Kong    private boolean previewSizeCheck(final CameraSettings settings) {
6668097973089420749dcd1ab4974a629c2466b31ccAngus Kong        final Size previewSize = settings.getCurrentPreviewSize();
6678097973089420749dcd1ab4974a629c2466b31ccAngus Kong        if (mSupportedPreviewSizes.contains(previewSize)) {
6688097973089420749dcd1ab4974a629c2466b31ccAngus Kong            return true;
6698097973089420749dcd1ab4974a629c2466b31ccAngus Kong        }
6708097973089420749dcd1ab4974a629c2466b31ccAngus Kong        Log.v(TAG, "Unsupported preview size:" + previewSize);
6718097973089420749dcd1ab4974a629c2466b31ccAngus Kong        return false;
6728097973089420749dcd1ab4974a629c2466b31ccAngus Kong    }
6738097973089420749dcd1ab4974a629c2466b31ccAngus Kong
6748097973089420749dcd1ab4974a629c2466b31ccAngus Kong    private boolean videoStabilizationCheck(final CameraSettings settings) {
6758097973089420749dcd1ab4974a629c2466b31ccAngus Kong        if (!settings.isVideoStabilizationEnabled() || supports(Feature.VIDEO_STABILIZATION)) {
6768097973089420749dcd1ab4974a629c2466b31ccAngus Kong            return true;
6778097973089420749dcd1ab4974a629c2466b31ccAngus Kong        }
6788097973089420749dcd1ab4974a629c2466b31ccAngus Kong        Log.v(TAG, "Video stabilization is not supported");
6798097973089420749dcd1ab4974a629c2466b31ccAngus Kong        return false;
6808097973089420749dcd1ab4974a629c2466b31ccAngus Kong    }
681c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong}
682