CameraCapabilities.java revision c36e3c983c232dc45ed31f3d8e98d8cdd7ac14ba
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 android.graphics.Point;
20c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
21c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kongimport com.android.ex.camera2.portability.debug.Log;
22c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
23c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kongimport java.util.ArrayList;
24c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kongimport java.util.EnumSet;
25c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kongimport java.util.HashSet;
26c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kongimport java.util.List;
27c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kongimport java.util.Set;
28c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kongimport java.util.TreeSet;
29c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
30c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kongpublic class CameraCapabilities {
31c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
32c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    private static Log.Tag TAG = new Log.Tag("CameraCapabilities");
33c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
34c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    protected final ArrayList<int[]> mSupportedPreviewFpsRange = new ArrayList<int[]>();
35c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    protected final ArrayList<Point> mSupportedPreviewSizes = new ArrayList<Point>();
36c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    protected final TreeSet<Integer> mSupportedPreviewFormats = new TreeSet<Integer>();
37c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    protected final ArrayList<Point> mSupportedVideoSizes = new ArrayList<Point>();
38c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    protected final ArrayList<Point> mSupportedPictureSizes = new ArrayList<Point>();
39c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    protected final TreeSet<Integer> mSupportedPictureFormats = new TreeSet<Integer>();
40c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    protected final EnumSet<SceneMode> mSupportedSceneModes = EnumSet.noneOf(SceneMode.class);
41c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    protected final EnumSet<FlashMode> mSupportedFlashModes = EnumSet.noneOf(FlashMode.class);
42c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    protected final EnumSet<FocusMode> mSupportedFocusModes = EnumSet.noneOf(FocusMode.class);
43c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    protected final EnumSet<WhiteBalance> mSupportedWhiteBalances =
44c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong            EnumSet.noneOf(WhiteBalance.class);
45c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    protected final EnumSet<Feature> mSupportedFeatures = EnumSet.noneOf(Feature.class);
46c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    protected int mMinExposureCompensation;
47c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    protected int mMaxExposureCompensation;
48c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    protected float mExposureCompensationStep;
49c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    protected int mMaxNumOfFacesSupported;
50c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    protected int mMaxNumOfFocusAreas;
51c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    protected int mMaxNumOfMeteringArea;
52c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    private final Stringifier mStringifier;
53c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
54c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    // Focus modes.
55c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    public enum FocusMode {
56c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
57c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Continuous auto focus mode intended for taking pictures.
58c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#FOCUS_MODE_AUTO}.
59c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
60c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        AUTO,
61c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
62c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Continuous auto focus mode intended for taking pictures.
63c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#FOCUS_MODE_CONTINUOUS_PICTURE}.
64c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
65c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        CONTINUOUS_PICTURE,
66c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
67c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Continuous auto focus mode intended for video recording.
68c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#FOCUS_MODE_CONTINUOUS_VIDEO}.
69c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
70c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        CONTINUOUS_VIDEO,
71c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
72c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Extended depth of field (EDOF).
73c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#FOCUS_MODE_EDOF}.
74c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
75c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        EXTENDED_DOF,
76c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
77c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Focus is fixed.
78c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#FOCUS_MODE_FIXED}.
79c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
80c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        FIXED,
81c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
82c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Focus is set at infinity.
83c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#FOCUS_MODE_INFINITY}.
84c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
85c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        INFINITY,
86c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
87c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Macro (close-up) focus mode.
88c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#FOCUS_MODE_MACRO}.
89c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
90c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        MACRO,
91c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    }
92c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
93c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    // Flash modes.
94c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    public enum FlashMode {
95c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
96c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Flash will be fired automatically when required.
97c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#FLASH_MODE_OFF}.
98c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
99c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        AUTO,
100c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
101c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Flash will not be fired.
102c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#FLASH_MODE_OFF}.
103c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
104c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        OFF,
105c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
106c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Flash will always be fired during snapshot.
107c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#FLASH_MODE_ON}.
108c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
109c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        ON,
110c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
111c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Constant emission of light during preview, auto-focus and snapshot.
112c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#FLASH_MODE_TORCH}.
113c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
114c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        TORCH,
115c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
116c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Flash will be fired in red-eye reduction mode.
117c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#FLASH_MODE_RED_EYE}.
118c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
119c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        RED_EYE,
120c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    }
121c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
122c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    public enum SceneMode {
123c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
124c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Scene mode is off.
125c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_AUTO}.
126c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
127c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        AUTO,
128c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
129c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Take photos of fast moving objects.
130c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_ACTION}.
131c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
132c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        ACTION,
133c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
134c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Applications are looking for a barcode.
135c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_BARCODE}.
136c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
137c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        BARCODE,
138c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
139c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Take pictures on the beach.
140c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_BEACH}.
141c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
142c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        BEACH,
143c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
144c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Capture the naturally warm color of scenes lit by candles.
145c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_CANDLELIGHT}.
146c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
147c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        CANDLELIGHT,
148c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
149c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * For shooting firework displays.
150c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_FIREWORKS}.
151c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
152c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        FIREWORKS,
153c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
154c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Capture a scene using high dynamic range imaging techniques.
155c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_HDR}.
156c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
157c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        HDR,
158c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
159c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Take pictures on distant objects.
160c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_LANDSCAPE}.
161c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
162c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        LANDSCAPE,
163c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
164c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Take photos at night.
165c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_NIGHT}.
166c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
167c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        NIGHT,
168c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
169c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Take people pictures at night.
170c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_NIGHT_PORTRAIT}.
171c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
172c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        NIGHT_PORTRAIT,
173c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
174c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Take indoor low-light shot.
175c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_PARTY}.
176c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
177c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        PARTY,
178c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
179c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Take people pictures.
180c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_PORTRAIT}.
181c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
182c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        PORTRAIT,
183c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
184c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Take pictures on the snow.
185c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_SNOW}.
186c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
187c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        SNOW,
188c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
189c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Take photos of fast moving objects.
190c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_SPORTS}.
191c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
192c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        SPORTS,
193c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
194c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Avoid blurry pictures (for example, due to hand shake).
195c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_STEADYPHOTO}.
196c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
197c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        STEADYPHOTO,
198c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
199c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Take sunset photos.
200c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_SUNSET}.
201c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
202c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        SUNSET,
203c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
204c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Take photos in a theater.
205c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#SCENE_MODE_THEATRE}.
206c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
207c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        THEATRE,
208c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    }
209c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
210c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    // White balances.
211c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    public enum WhiteBalance {
212c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
213c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#WHITE_BALANCE_AUTO}.
214c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
215c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        AUTO,
216c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
217c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#WHITE_BALANCE_CLOUDY_DAYLIGHT}.
218c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
219c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        CLOUDY_DAYLIGHT,
220c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
221c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#WHITE_BALANCE_DAYLIGHT}.
222c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
223c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        DAYLIGHT,
224c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
225c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#WHITE_BALANCE_FLUORESCENT}.
226c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
227c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        FLUORESCENT,
228c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
229c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#WHITE_BALANCE_INCANDESCENT}.
230c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
231c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        INCANDESCENT,
232c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
233c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#WHITE_BALANCE_SHADE}.
234c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
235c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        SHADE,
236c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
237c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#WHITE_BALANCE_TWILIGHT}.
238c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
239c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        TWILIGHT,
240c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
241c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @see {@link android.hardware.Camera.Parameters#WHITE_BALANCE_WARM_FLUORESCENT}.
242c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
243c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        WARM_FLUORESCENT,
244c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    }
245c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
246c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    public enum Feature {
247c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
248c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Support zoom-related methods.
249c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
250c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        ZOOM,
251c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
252c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Support for photo capturing during video recording.
253c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
254c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        VIDEO_SNAPSHOT,
255c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
256c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Support for focus area settings.
257c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
258c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        FOCUS_AREA,
259c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
260c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Support for metering area settings.
261c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
262c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        METERING_AREA,
263c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
264c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Support for automatic exposure lock.
265c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
266c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        AUTO_EXPOSURE_LOCK,
267c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
268c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Support for automatic white balance lock.
269c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
270c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        AUTO_WHITE_BALANCE_LOCK,
271c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    }
272c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
273c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    /**
274c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     * A interface stringifier to convert abstract representations to API
275c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     * related string representation.
276c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     */
277c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    public interface Stringifier {
278c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
279c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Converts the focus mode to API-related string representation.
280c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         *
281c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @param focus The focus mode to convert.
282c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @return The string used by the camera framework API to represent the
283c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * focus mode.
284c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
285c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        String stringify(FocusMode focus);
286c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
287c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
288c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Converts the API-related string representation of the focus mode to the
289c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * abstract representation.
290c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         *
291c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @param val The string representation.
292c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @return The focus mode represented by the input string.
293c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
294c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        FocusMode focusModeFromString(String val);
295c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
296c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
297c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Converts the flash mode to API-related string representation.
298c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         *
299c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @param flash The focus mode to convert.
300c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @return The string used by the camera framework API to represent the
301c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * flash mode.
302c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
303c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        String stringify(FlashMode flash);
304c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
305c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
306c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Converts the API-related string representation of the flash mode to the
307c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * abstract representation.
308c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         *
309c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @param val The string representation.
310c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @return The flash mode represented by the input string.
311c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
312c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        FlashMode flashModeFromString(String val);
313c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
314c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
315c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Converts the scene mode to API-related string representation.
316c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         *
317c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @param scene The focus mode to convert.
318c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @return The string used by the camera framework API to represent the
319c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * scene mode.
320c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
321c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        String stringify(SceneMode scene);
322c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
323c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
324c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Converts the API-related string representation of the scene mode to the
325c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * abstract representation.
326c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         *
327c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @param val The string representation.
328c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @return The scene mode represented by the input string.
329c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
330c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        SceneMode sceneModeFromString(String val);
331c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
332c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
333c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Converts the white balance to API-related string representation.
334c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         *
335c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @param wb The focus mode to convert.
336c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @return The string used by the camera framework API to represent the
337c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * white balance.
338c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
339c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        String stringify(WhiteBalance wb);
340c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
341c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        /**
342c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * Converts the API-related string representation of the white balance to
343c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * the abstract representation.
344c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         *
345c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @param val The string representation.
346c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         * @return The white balance represented by the input string.
347c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong         */
348c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        WhiteBalance whiteBalanceFromString(String val);
349c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    }
350c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
351c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    /**
352c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     * constructor.
353c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     * @param mStringifier The stringifier used by this instance.
354c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     */
355c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    CameraCapabilities(Stringifier mStringifier) {
356c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        this.mStringifier = mStringifier;
357c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    }
358c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
359c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    /**
360c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     * Copy constructor.
361c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     * @param src The source instance.
362c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     */
363c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    public CameraCapabilities(CameraCapabilities src) {
364c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        mSupportedPreviewFpsRange.addAll(src.mSupportedPreviewFpsRange);
365c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        mSupportedPreviewSizes.addAll(src.mSupportedPreviewSizes);
366c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        mSupportedPreviewFormats.addAll(src.mSupportedPreviewFormats);
367c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        mSupportedVideoSizes.addAll(src.mSupportedVideoSizes);
368c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        mSupportedPictureSizes.addAll(src.mSupportedPictureSizes);
369c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        mSupportedPictureFormats.addAll(src.mSupportedPictureFormats);
370c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        mSupportedSceneModes.addAll(src.mSupportedSceneModes);
371c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        mSupportedFlashModes.addAll(src.mSupportedFlashModes);
372c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        mSupportedFocusModes.addAll(src.mSupportedFocusModes);
373c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        mSupportedWhiteBalances.addAll(src.mSupportedWhiteBalances);
374c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        mSupportedFeatures.addAll(src.mSupportedFeatures);
375c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        mMaxExposureCompensation = src.mMaxExposureCompensation;
376c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        mMinExposureCompensation = src.mMinExposureCompensation;
377c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        mExposureCompensationStep = src.mExposureCompensationStep;
378c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        mMaxNumOfFacesSupported = src.mMaxNumOfFacesSupported;
379c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        mMaxNumOfFocusAreas = src.mMaxNumOfFocusAreas;
380c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        mStringifier = src.mStringifier;
381c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    }
382c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
383c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    /**
384c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     * @return the supported picture formats. See {@link android.graphics.ImageFormat}.
385c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     */
386c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    public Set<Integer> getSupportedPictureFormats() {
387c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        return new TreeSet<Integer>(mSupportedPictureFormats);
388c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    }
389c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
390c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    /**
391c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     * Gets the supported preview formats.
392c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     * @return The supported preview {@link android.graphics.ImageFormat}s.
393c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     */
394c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    public Set<Integer> getSupportedPreviewFormats() {
395c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        return new TreeSet<Integer>(mSupportedPreviewFormats);
396c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    }
397c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
398c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    /**
399c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     * Gets the supported picture sizes.
400c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     */
401c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    public List<Point> getSupportedPictureSizes() {
402c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        return new ArrayList<Point>(mSupportedPictureSizes);
403c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    }
404c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
405c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
406c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    /**
407c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     * @return The supported preview fps (frame-per-second) ranges. The returned
408c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     * list is sorted by maximum fps then minimum fps in a descending order.
409c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     * The values are multiplied by 1000.
410c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     */
411c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    public final List<int[]> getSupportedPreviewFpsRange() {
412c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        return new ArrayList<int[]>(mSupportedPreviewFpsRange);
413c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    }
414c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
415c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    /**
416c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     * @return The supported preview sizes. The width and height are stored in
417c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     * Point.x and Point.y respectively and the list is sorted by width then
418c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     * height in a descending order.
419c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     */
420c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    public final List<Point> getSupportedPreviewSizes() {
421c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        return new ArrayList<Point>(mSupportedPreviewSizes);
422c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    }
423c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
424c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    /**
425c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     * @return The supported video frame sizes that can be used by MediaRecorder.
426c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     * The width and height are stored in Point.x and Point.y respectively and
427c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     * the list is sorted by width then height in a descending order.
428c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     */
429c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    public final List<Point> getSupportedVideoSizes() {
430c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        return new ArrayList<Point>(mSupportedVideoSizes);
431c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    }
432c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
433c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    /**
434c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     * @return The supported scene modes.
435c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     */
436c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    public final Set<SceneMode> getSupportedSceneModes() {
437c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        return new HashSet<SceneMode>(mSupportedSceneModes);
438c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    }
439c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
440c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    /**
441c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     * @return Whether the scene mode is supported.
442c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     */
443c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    public final boolean supports(SceneMode scene) {
444c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        return (scene != null && mSupportedSceneModes.contains(scene));
445c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    }
446c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
447c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    /**
448c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     * @return The supported flash modes.
449c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     */
450c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    public final Set<FlashMode> getSupportedFlashModes() {
451c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        return new HashSet<FlashMode>(mSupportedFlashModes);
452c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    }
453c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
454c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    /**
455c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     * @return Whether the flash mode is supported.
456c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     */
457c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    public final boolean supports(FlashMode flash) {
458c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        return (flash != null && mSupportedFlashModes.contains(flash));
459c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    }
460c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
461c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    /**
462c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     * @return The supported focus modes.
463c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     */
464c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    public final Set<FocusMode> getSupportedFocusModes() {
465c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        return new HashSet<FocusMode>(mSupportedFocusModes);
466c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    }
467c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
468c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    /**
469c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     * @return Whether the focus mode is supported.
470c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     */
471c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    public final boolean supports(FocusMode focus) {
472c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        return (focus != null && mSupportedFocusModes.contains(focus));
473c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    }
474c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
475c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    /**
476c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     * @return The supported white balanceas.
477c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     */
478c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    public final Set<WhiteBalance> getSupportedWhiteBalance() {
479c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        return new HashSet<WhiteBalance>(mSupportedWhiteBalances);
480c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    }
481c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
482c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    /**
483c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     * @return Whether the white balance is supported.
484c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     */
485c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    public boolean supports(WhiteBalance wb) {
486c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        return (wb != null && mSupportedWhiteBalances.contains(wb));
487c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    }
488c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
489c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    public final Set<Feature> getSupportedFeature() {
490c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        return new HashSet<Feature>(mSupportedFeatures);
491c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    }
492c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
493c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    public boolean supports(Feature ft) {
494c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        return (ft != null && mSupportedFeatures.contains(ft));
495c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    }
496c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
497c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    /**
498c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     * @return The min exposure compensation index. The EV is the compensation
499c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     * index multiplied by the step value. If unsupported, both this method and
500c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     * {@link #getMaxExposureCompensation()} return 0.
501c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     */
502c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    public final int getMinExposureCompensation() {
503c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        return mMinExposureCompensation;
504c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    }
505c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
506c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    /**
507c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     * @return The max exposure compensation index. The EV is the compensation
508c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     * index multiplied by the step value. If unsupported, both this method and
509c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     * {@link #getMinExposureCompensation()} return 0.
510c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     */
511c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    public final int getMaxExposureCompensation() {
512c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        return mMaxExposureCompensation;
513c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    }
514c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
515c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    /**
516c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     * @return The exposure compensation step. The EV is the compensation index
517c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     * multiplied by the step value.
518c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     */
519c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    public final float getExposureCompensationStep() {
520c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        return mExposureCompensationStep;
521c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    }
522c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
523c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    /**
524c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     * @return The max number of faces supported by the face detection. 0 if
525c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     * unsupported.
526c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     */
527c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    public final int getMaxNumOfFacesSupported() {
528c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        return mMaxNumOfFacesSupported;
529c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    }
530c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong
531c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    /**
532c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     * @return The stringifier used by this instance.
533c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong     */
534c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    public Stringifier getStringifier() {
535c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong        return mStringifier;
536c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong    }
537c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong}
538