AndroidCameraCapabilities.java revision 01e7c02174ef268b6d6daaa5a5bb4f752d55964c
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.hardware.Camera; 20c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 21c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kongimport com.android.ex.camera2.portability.debug.Log; 22c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 23c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kongimport java.util.Collections; 24c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kongimport java.util.Comparator; 25c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kongimport java.util.List; 26c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 27c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong/** 28c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong * The subclass of {@link CameraCapabilities} for Android Camera 1 API. 29c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong */ 308097973089420749dcd1ab4974a629c2466b31ccAngus Kongclass AndroidCameraCapabilities extends CameraCapabilities { 31c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 32c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong private static Log.Tag TAG = new Log.Tag("AndroidCameraCapabilities"); 33c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 34c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong private FpsComparator mFpsComparator = new FpsComparator(); 35c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong private SizeComparator mSizeComparator = new SizeComparator(); 36c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 37c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong AndroidCameraCapabilities(Camera.Parameters p) { 38c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong super(new AndroidCameraCapabilityStringifier()); 39c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mMaxExposureCompensation = p.getMaxExposureCompensation(); 40c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mMinExposureCompensation = p.getMinExposureCompensation(); 41c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mExposureCompensationStep = p.getExposureCompensationStep(); 42c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mMaxNumOfFacesSupported = p.getMaxNumDetectedFaces(); 43c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mMaxNumOfMeteringArea = p.getMaxNumMeteringAreas(); 448097973089420749dcd1ab4974a629c2466b31ccAngus Kong mPreferredPreviewSizeForVideo = new Size(p.getPreferredPreviewSizeForVideo()); 45c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedPreviewFormats.addAll(p.getSupportedPreviewFormats()); 468097973089420749dcd1ab4974a629c2466b31ccAngus Kong mSupportedPhotoFormats.addAll(p.getSupportedPictureFormats()); 478097973089420749dcd1ab4974a629c2466b31ccAngus Kong mMaxZoomIndex = p.getMaxZoom(); 488097973089420749dcd1ab4974a629c2466b31ccAngus Kong mZoomRatioList.addAll(p.getZoomRatios()); 498097973089420749dcd1ab4974a629c2466b31ccAngus Kong mMaxZoomRatio = mZoomRatioList.get(mMaxZoomIndex); 5001e7c02174ef268b6d6daaa5a5bb4f752d55964cAngus Kong mHorizontalViewAngle = p.getHorizontalViewAngle(); 5101e7c02174ef268b6d6daaa5a5bb4f752d55964cAngus Kong mVerticalViewAngle = p.getVerticalViewAngle(); 52c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong buildPreviewFpsRange(p); 53c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong buildPreviewSizes(p); 54c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong buildVideoSizes(p); 55c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong buildPictureSizes(p); 56c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong buildSceneModes(p); 57c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong buildFlashModes(p); 58c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong buildFocusModes(p); 59c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong buildWhiteBalances(p); 60c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 61c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong if (p.isZoomSupported()) { 62c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedFeatures.add(Feature.ZOOM); 63c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 64c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong if (p.isVideoSnapshotSupported()) { 65c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedFeatures.add(Feature.VIDEO_SNAPSHOT); 66c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 67c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong if (p.isAutoExposureLockSupported()) { 68c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedFeatures.add(Feature.AUTO_EXPOSURE_LOCK); 69c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 70c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong if (p.isAutoWhiteBalanceLockSupported()) { 71c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedFeatures.add(Feature.AUTO_WHITE_BALANCE_LOCK); 72c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 73c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong if (supports(FocusMode.AUTO)) { 74c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mMaxNumOfFocusAreas = p.getMaxNumFocusAreas(); 75c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong if (mMaxNumOfFocusAreas > 0) { 76c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedFeatures.add(Feature.FOCUS_AREA); 77c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 78c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 79c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong if (mMaxNumOfMeteringArea > 0) { 80c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedFeatures.add(Feature.METERING_AREA); 81c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 82c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 83c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 84c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong AndroidCameraCapabilities(AndroidCameraCapabilities src) { 85c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong super(src); 86c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 87c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 88c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong private void buildPreviewFpsRange(Camera.Parameters p) { 89c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong List<int[]> supportedPreviewFpsRange = p.getSupportedPreviewFpsRange(); 90c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong if (supportedPreviewFpsRange != null) { 91c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedPreviewFpsRange.addAll(supportedPreviewFpsRange); 92c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 93c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong Collections.sort(mSupportedPreviewFpsRange, mFpsComparator); 94c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 95c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 96c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong private void buildPreviewSizes(Camera.Parameters p) { 97c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong List<Camera.Size> supportedPreviewSizes = p.getSupportedPreviewSizes(); 98c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong if (supportedPreviewSizes != null) { 99c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong for (Camera.Size s : supportedPreviewSizes) { 1008097973089420749dcd1ab4974a629c2466b31ccAngus Kong mSupportedPreviewSizes.add(new Size(s.width, s.height)); 101c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 102c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 103c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong Collections.sort(mSupportedPreviewSizes, mSizeComparator); 104c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 105c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 106c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong private void buildVideoSizes(Camera.Parameters p) { 107c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong List<Camera.Size> supportedVideoSizes = p.getSupportedVideoSizes(); 108c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong if (supportedVideoSizes != null) { 109c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong for (Camera.Size s : supportedVideoSizes) { 1108097973089420749dcd1ab4974a629c2466b31ccAngus Kong mSupportedVideoSizes.add(new Size(s.width, s.height)); 111c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 112c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 113c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong Collections.sort(mSupportedVideoSizes, mSizeComparator); 114c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 115c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 116c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong private void buildPictureSizes(Camera.Parameters p) { 117c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong List<Camera.Size> supportedPictureSizes = p.getSupportedPictureSizes(); 118c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong if (supportedPictureSizes != null) { 119c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong for (Camera.Size s : supportedPictureSizes) { 1208097973089420749dcd1ab4974a629c2466b31ccAngus Kong mSupportedPhotoSizes.add(new Size(s.width, s.height)); 121c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 122c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 1238097973089420749dcd1ab4974a629c2466b31ccAngus Kong Collections.sort(mSupportedPhotoSizes, mSizeComparator); 124c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 125c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 126c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 127c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong private void buildSceneModes(Camera.Parameters p) { 128c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong List<String> supportedSceneModes = p.getSupportedSceneModes(); 129c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong if (supportedSceneModes != null) { 130c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong for (String scene : supportedSceneModes) { 131c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong if (Camera.Parameters.SCENE_MODE_AUTO.equals(scene)) { 132c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedSceneModes.add(SceneMode.AUTO); 133c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } else if (Camera.Parameters.SCENE_MODE_ACTION.equals(scene)) { 134c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedSceneModes.add(SceneMode.ACTION); 135c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } else if (Camera.Parameters.SCENE_MODE_BARCODE.equals(scene)) { 136c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedSceneModes.add(SceneMode.BARCODE); 137c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } else if (Camera.Parameters.SCENE_MODE_BEACH.equals(scene)) { 138c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedSceneModes.add(SceneMode.BEACH); 139c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } else if (Camera.Parameters.SCENE_MODE_CANDLELIGHT.equals(scene)) { 140c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedSceneModes.add(SceneMode.CANDLELIGHT); 141c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } else if (Camera.Parameters.SCENE_MODE_FIREWORKS.equals(scene)) { 142c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedSceneModes.add(SceneMode.FIREWORKS); 143c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } else if (Camera.Parameters.SCENE_MODE_HDR.equals(scene)) { 144c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedSceneModes.add(SceneMode.HDR); 145c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } else if (Camera.Parameters.SCENE_MODE_LANDSCAPE.equals(scene)) { 146c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedSceneModes.add(SceneMode.LANDSCAPE); 147c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } else if (Camera.Parameters.SCENE_MODE_NIGHT.equals(scene)) { 148c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedSceneModes.add(SceneMode.NIGHT); 149c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } else if (Camera.Parameters.SCENE_MODE_NIGHT_PORTRAIT.equals(scene)) { 150c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedSceneModes.add(SceneMode.NIGHT_PORTRAIT); 151c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } else if (Camera.Parameters.SCENE_MODE_PARTY.equals(scene)) { 152c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedSceneModes.add(SceneMode.PARTY); 153c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } else if (Camera.Parameters.SCENE_MODE_PORTRAIT.equals(scene)) { 154c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedSceneModes.add(SceneMode.PORTRAIT); 155c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } else if (Camera.Parameters.SCENE_MODE_SNOW.equals(scene)) { 156c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedSceneModes.add(SceneMode.SNOW); 157c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } else if (Camera.Parameters.SCENE_MODE_SPORTS.equals(scene)) { 158c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedSceneModes.add(SceneMode.SPORTS); 159c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } else if (Camera.Parameters.SCENE_MODE_STEADYPHOTO.equals(scene)) { 160c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedSceneModes.add(SceneMode.STEADYPHOTO); 161c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } else if (Camera.Parameters.SCENE_MODE_SUNSET.equals(scene)) { 162c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedSceneModes.add(SceneMode.SUNSET); 163c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } else if (Camera.Parameters.SCENE_MODE_THEATRE.equals(scene)) { 164c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedSceneModes.add(SceneMode.THEATRE); 165c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 166c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 167c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 168c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 169c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 170c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong private void buildFlashModes(Camera.Parameters p) { 171c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong List<String> supportedFlashModes = p.getSupportedFlashModes(); 1728097973089420749dcd1ab4974a629c2466b31ccAngus Kong if (supportedFlashModes == null) { 1738097973089420749dcd1ab4974a629c2466b31ccAngus Kong // Camera 1 will return NULL if no flash mode is supported. 1748097973089420749dcd1ab4974a629c2466b31ccAngus Kong mSupportedFlashModes.add(FlashMode.NO_FLASH); 1758097973089420749dcd1ab4974a629c2466b31ccAngus Kong } else { 176c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong for (String flash : supportedFlashModes) { 177c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong if (Camera.Parameters.FLASH_MODE_AUTO.equals(flash)) { 178c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedFlashModes.add(FlashMode.AUTO); 179c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } else if (Camera.Parameters.FLASH_MODE_OFF.equals(flash)) { 180c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedFlashModes.add(FlashMode.OFF); 181c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } else if (Camera.Parameters.FLASH_MODE_ON.equals(flash)) { 182c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedFlashModes.add(FlashMode.ON); 183c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } else if (Camera.Parameters.FLASH_MODE_RED_EYE.equals(flash)) { 184c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedFlashModes.add(FlashMode.RED_EYE); 185c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 186c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 187c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 188c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 189c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 190c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong private void buildFocusModes(Camera.Parameters p) { 191c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong List<String> supportedFocusModes = p.getSupportedFocusModes(); 192c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong if (supportedFocusModes != null) { 193c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong for (String focus : supportedFocusModes) { 194c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong if (Camera.Parameters.FOCUS_MODE_AUTO.equals(focus)) { 195c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedFocusModes.add(FocusMode.AUTO); 196c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } else if (Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE.equals(focus)) { 197c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedFocusModes.add(FocusMode.CONTINUOUS_PICTURE); 198c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } else if (Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO.equals(focus)) { 199c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedFocusModes.add(FocusMode.CONTINUOUS_VIDEO); 200c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } else if (Camera.Parameters.FOCUS_MODE_EDOF.equals(focus)) { 201c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedFocusModes.add(FocusMode.EXTENDED_DOF); 202c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } else if (Camera.Parameters.FOCUS_MODE_FIXED.equals(focus)) { 203c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedFocusModes.add(FocusMode.FIXED); 204c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } else if (Camera.Parameters.FOCUS_MODE_INFINITY.equals(focus)) { 205c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedFocusModes.add(FocusMode.INFINITY); 206c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } else if (Camera.Parameters.FOCUS_MODE_MACRO.equals(focus)) { 207c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedFocusModes.add(FocusMode.MACRO); 208c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 209c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 210c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 211c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 212c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 213c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong private void buildWhiteBalances(Camera.Parameters p) { 214c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong List<String> supportedWhiteBalances = p.getSupportedFocusModes(); 215c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong if (supportedWhiteBalances != null) { 216c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong for (String wb : supportedWhiteBalances) { 217c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong if (Camera.Parameters.WHITE_BALANCE_AUTO.equals(wb)) { 218c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedWhiteBalances.add(WhiteBalance.AUTO); 219c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } else if (Camera.Parameters.WHITE_BALANCE_CLOUDY_DAYLIGHT.equals(wb)) { 220c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedWhiteBalances.add(WhiteBalance.CLOUDY_DAYLIGHT); 221c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } else if (Camera.Parameters.WHITE_BALANCE_DAYLIGHT.equals(wb)) { 222c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedWhiteBalances.add(WhiteBalance.DAYLIGHT); 223c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } else if (Camera.Parameters.WHITE_BALANCE_FLUORESCENT.equals(wb)) { 224c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedWhiteBalances.add(WhiteBalance.FLUORESCENT); 225c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } else if (Camera.Parameters.WHITE_BALANCE_INCANDESCENT.equals(wb)) { 226c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedWhiteBalances.add(WhiteBalance.INCANDESCENT); 227c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } else if (Camera.Parameters.WHITE_BALANCE_SHADE.equals(wb)) { 228c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedWhiteBalances.add(WhiteBalance.SHADE); 229c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } else if (Camera.Parameters.WHITE_BALANCE_TWILIGHT.equals(wb)) { 230c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedWhiteBalances.add(WhiteBalance.TWILIGHT); 231c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } else if (Camera.Parameters.WHITE_BALANCE_WARM_FLUORESCENT.equals(wb)) { 232c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong mSupportedWhiteBalances.add(WhiteBalance.WARM_FLUORESCENT); 233c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 234c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 235c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 236c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 237c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 238c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong private static class FpsComparator implements Comparator<int[]> { 239c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong @Override 240c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong public int compare(int[] fps1, int[] fps2) { 241c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return (fps1[0] == fps2[0] ? fps1[1] - fps2[1] : fps1[0] - fps2[0]); 242c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 243c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 244c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 2458097973089420749dcd1ab4974a629c2466b31ccAngus Kong private static class SizeComparator implements Comparator<Size> { 246c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 247c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong @Override 2488097973089420749dcd1ab4974a629c2466b31ccAngus Kong public int compare(Size size1, Size size2) { 2498097973089420749dcd1ab4974a629c2466b31ccAngus Kong return (size1.width() == size2.width() ? size1.height() - size2.height() : 2508097973089420749dcd1ab4974a629c2466b31ccAngus Kong size1.width() - size2.width()); 251c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 252c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 253c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 254c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong private static class AndroidCameraCapabilityStringifier implements Stringifier { 255c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 256c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong @Override 257c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong public String stringify(FocusMode focus) { 2588097973089420749dcd1ab4974a629c2466b31ccAngus Kong if (focus == null) { 2598097973089420749dcd1ab4974a629c2466b31ccAngus Kong return null; 2608097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 2618097973089420749dcd1ab4974a629c2466b31ccAngus Kong 262c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong switch (focus) { 263c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong case AUTO: 264c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return Camera.Parameters.FOCUS_MODE_AUTO; 265c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong case CONTINUOUS_PICTURE: 266c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE; 267c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong case CONTINUOUS_VIDEO: 268c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO; 269c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong case EXTENDED_DOF: 270c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return Camera.Parameters.FOCUS_MODE_EDOF; 271c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong case FIXED: 272c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return Camera.Parameters.FOCUS_MODE_FIXED; 273c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong case INFINITY: 274c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return Camera.Parameters.FOCUS_MODE_INFINITY; 275c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong case MACRO: 276c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return Camera.Parameters.FOCUS_MODE_MACRO; 277c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 278c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return null; 279c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 280c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 281c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong @Override 282c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong public FocusMode focusModeFromString(String val) { 2838097973089420749dcd1ab4974a629c2466b31ccAngus Kong if (val == null) { 2848097973089420749dcd1ab4974a629c2466b31ccAngus Kong return null; 2858097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 2868097973089420749dcd1ab4974a629c2466b31ccAngus Kong 2878097973089420749dcd1ab4974a629c2466b31ccAngus Kong if (Camera.Parameters.FOCUS_MODE_AUTO.equals(val)) { 288c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return FocusMode.AUTO; 2898097973089420749dcd1ab4974a629c2466b31ccAngus Kong } else if (Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE.equals(val)) { 290c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return FocusMode.CONTINUOUS_PICTURE; 2918097973089420749dcd1ab4974a629c2466b31ccAngus Kong } else if (Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO.equals(val)) { 292c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return FocusMode.CONTINUOUS_VIDEO; 2938097973089420749dcd1ab4974a629c2466b31ccAngus Kong } else if (Camera.Parameters.FOCUS_MODE_EDOF.equals(val)) { 294c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return FocusMode.EXTENDED_DOF; 2958097973089420749dcd1ab4974a629c2466b31ccAngus Kong } else if (Camera.Parameters.FOCUS_MODE_FIXED.equals(val)) { 296c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return FocusMode.FIXED; 2978097973089420749dcd1ab4974a629c2466b31ccAngus Kong } else if (Camera.Parameters.FOCUS_MODE_INFINITY.equals(val)) { 298c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return FocusMode.INFINITY; 2998097973089420749dcd1ab4974a629c2466b31ccAngus Kong } else if (Camera.Parameters.FOCUS_MODE_MACRO.equals(val)) { 300c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return FocusMode.MACRO; 301c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } else { 302c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return null; 303c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 304c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 305c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 306c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong @Override 307c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong public String stringify(FlashMode flash) { 3088097973089420749dcd1ab4974a629c2466b31ccAngus Kong if (flash == null) { 3098097973089420749dcd1ab4974a629c2466b31ccAngus Kong return null; 3108097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 3118097973089420749dcd1ab4974a629c2466b31ccAngus Kong 312c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong switch (flash) { 3138097973089420749dcd1ab4974a629c2466b31ccAngus Kong case NO_FLASH: 3148097973089420749dcd1ab4974a629c2466b31ccAngus Kong return null; 315c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong case AUTO: 316c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return Camera.Parameters.FLASH_MODE_AUTO; 317c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong case OFF: 318c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return Camera.Parameters.FLASH_MODE_OFF; 319c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong case ON: 320c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return Camera.Parameters.FLASH_MODE_ON; 321c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong case TORCH: 322c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return Camera.Parameters.FLASH_MODE_TORCH; 323c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong case RED_EYE: 324c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return Camera.Parameters.FLASH_MODE_RED_EYE; 325c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 326c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return null; 327c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 328c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 329c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong @Override 330c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong public FlashMode flashModeFromString(String val) { 3318097973089420749dcd1ab4974a629c2466b31ccAngus Kong if (val == null) { 3328097973089420749dcd1ab4974a629c2466b31ccAngus Kong return FlashMode.NO_FLASH; 3338097973089420749dcd1ab4974a629c2466b31ccAngus Kong } else if (Camera.Parameters.FLASH_MODE_AUTO.equals(val)) { 334c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return FlashMode.AUTO; 3358097973089420749dcd1ab4974a629c2466b31ccAngus Kong } else if (Camera.Parameters.FLASH_MODE_OFF.equals(val)) { 336c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return FlashMode.OFF; 3378097973089420749dcd1ab4974a629c2466b31ccAngus Kong } else if (Camera.Parameters.FLASH_MODE_ON.equals(val)) { 338c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return FlashMode.ON; 3398097973089420749dcd1ab4974a629c2466b31ccAngus Kong } else if (Camera.Parameters.FLASH_MODE_TORCH.equals(val)) { 340c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return FlashMode.TORCH; 3418097973089420749dcd1ab4974a629c2466b31ccAngus Kong } else if (Camera.Parameters.FLASH_MODE_RED_EYE.equals(val)) { 342c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return FlashMode.RED_EYE; 343c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } else { 344c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return null; 345c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 346c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 347c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 348c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong @Override 349c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong public String stringify(SceneMode scene) { 3508097973089420749dcd1ab4974a629c2466b31ccAngus Kong if (scene == null) { 3518097973089420749dcd1ab4974a629c2466b31ccAngus Kong return null; 3528097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 3538097973089420749dcd1ab4974a629c2466b31ccAngus Kong 354c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong switch (scene) { 355c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong case AUTO: 356c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return Camera.Parameters.SCENE_MODE_AUTO; 357c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong case ACTION: 358c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return Camera.Parameters.SCENE_MODE_ACTION; 359c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong case BARCODE: 360c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return Camera.Parameters.SCENE_MODE_BARCODE; 361c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong case BEACH: 362c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return Camera.Parameters.SCENE_MODE_BEACH; 363c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong case CANDLELIGHT: 364c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return Camera.Parameters.SCENE_MODE_CANDLELIGHT; 365c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong case FIREWORKS: 366c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return Camera.Parameters.SCENE_MODE_FIREWORKS; 367c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong case HDR: 368c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return Camera.Parameters.SCENE_MODE_HDR; 369c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong case LANDSCAPE: 370c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return Camera.Parameters.SCENE_MODE_LANDSCAPE; 371c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong case NIGHT: 372c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return Camera.Parameters.SCENE_MODE_NIGHT; 373c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong case NIGHT_PORTRAIT: 374c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return Camera.Parameters.SCENE_MODE_NIGHT_PORTRAIT; 375c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong case PARTY: 376c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return Camera.Parameters.SCENE_MODE_PARTY; 377c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong case PORTRAIT: 378c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return Camera.Parameters.SCENE_MODE_PORTRAIT; 379c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong case SNOW: 380c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return Camera.Parameters.SCENE_MODE_SNOW; 381c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong case SPORTS: 382c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return Camera.Parameters.SCENE_MODE_SPORTS; 383c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong case STEADYPHOTO: 384c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return Camera.Parameters.SCENE_MODE_STEADYPHOTO; 385c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong case SUNSET: 386c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return Camera.Parameters.SCENE_MODE_SUNSET; 387c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong case THEATRE: 388c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return Camera.Parameters.SCENE_MODE_THEATRE; 389c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 390c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return null; 391c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 392c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 393c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong @Override 394c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong public SceneMode sceneModeFromString(String val) { 3958097973089420749dcd1ab4974a629c2466b31ccAngus Kong if (val == null) { 3968097973089420749dcd1ab4974a629c2466b31ccAngus Kong return SceneMode.NO_SCENE_MODE; 3978097973089420749dcd1ab4974a629c2466b31ccAngus Kong } else if (Camera.Parameters.SCENE_MODE_AUTO.equals(val)) { 398c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return SceneMode.AUTO; 3998097973089420749dcd1ab4974a629c2466b31ccAngus Kong } else if (Camera.Parameters.SCENE_MODE_ACTION.equals(val)) { 400c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return SceneMode.ACTION; 4018097973089420749dcd1ab4974a629c2466b31ccAngus Kong } else if (Camera.Parameters.SCENE_MODE_BARCODE.equals(val)) { 402c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return SceneMode.BARCODE; 4038097973089420749dcd1ab4974a629c2466b31ccAngus Kong } else if (Camera.Parameters.SCENE_MODE_BEACH.equals(val)) { 404c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return SceneMode.BEACH; 4058097973089420749dcd1ab4974a629c2466b31ccAngus Kong } else if (Camera.Parameters.SCENE_MODE_CANDLELIGHT.equals(val)) { 406c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return SceneMode.CANDLELIGHT; 4078097973089420749dcd1ab4974a629c2466b31ccAngus Kong } else if (Camera.Parameters.SCENE_MODE_FIREWORKS.equals(val)) { 408c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return SceneMode.FIREWORKS; 4098097973089420749dcd1ab4974a629c2466b31ccAngus Kong } else if (Camera.Parameters.SCENE_MODE_HDR.equals(val)) { 410c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return SceneMode.HDR; 4118097973089420749dcd1ab4974a629c2466b31ccAngus Kong } else if (Camera.Parameters.SCENE_MODE_LANDSCAPE.equals(val)) { 412c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return SceneMode.LANDSCAPE; 4138097973089420749dcd1ab4974a629c2466b31ccAngus Kong } else if (Camera.Parameters.SCENE_MODE_NIGHT.equals(val)) { 414c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return SceneMode.NIGHT; 4158097973089420749dcd1ab4974a629c2466b31ccAngus Kong } else if (Camera.Parameters.SCENE_MODE_NIGHT_PORTRAIT.equals(val)) { 416c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return SceneMode.NIGHT_PORTRAIT; 4178097973089420749dcd1ab4974a629c2466b31ccAngus Kong } else if (Camera.Parameters.SCENE_MODE_PARTY.equals(val)) { 418c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return SceneMode.PARTY; 4198097973089420749dcd1ab4974a629c2466b31ccAngus Kong } else if (Camera.Parameters.SCENE_MODE_PORTRAIT.equals(val)) { 420c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return SceneMode.PORTRAIT; 4218097973089420749dcd1ab4974a629c2466b31ccAngus Kong } else if (Camera.Parameters.SCENE_MODE_SNOW.equals(val)) { 422c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return SceneMode.SNOW; 4238097973089420749dcd1ab4974a629c2466b31ccAngus Kong } else if (Camera.Parameters.SCENE_MODE_SPORTS.equals(val)) { 424c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return SceneMode.SPORTS; 4258097973089420749dcd1ab4974a629c2466b31ccAngus Kong } else if (Camera.Parameters.SCENE_MODE_STEADYPHOTO.equals(val)) { 426c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return SceneMode.STEADYPHOTO; 4278097973089420749dcd1ab4974a629c2466b31ccAngus Kong } else if (Camera.Parameters.SCENE_MODE_SUNSET.equals(val)) { 428c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return SceneMode.SUNSET; 4298097973089420749dcd1ab4974a629c2466b31ccAngus Kong } else if (Camera.Parameters.SCENE_MODE_THEATRE.equals(val)) { 430c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return SceneMode.THEATRE; 431c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } else { 432c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return null; 433c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 434c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 435c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 436c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong @Override 437c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong public String stringify(WhiteBalance wb) { 4388097973089420749dcd1ab4974a629c2466b31ccAngus Kong if (wb == null) { 4398097973089420749dcd1ab4974a629c2466b31ccAngus Kong return null; 4408097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 4418097973089420749dcd1ab4974a629c2466b31ccAngus Kong 442c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong switch (wb) { 443c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong case AUTO: 444c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return Camera.Parameters.WHITE_BALANCE_AUTO; 445c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong case CLOUDY_DAYLIGHT: 446c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return Camera.Parameters.WHITE_BALANCE_CLOUDY_DAYLIGHT; 447c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong case DAYLIGHT: 448c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return Camera.Parameters.WHITE_BALANCE_DAYLIGHT; 449c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong case FLUORESCENT: 450c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return Camera.Parameters.WHITE_BALANCE_FLUORESCENT; 451c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong case INCANDESCENT: 452c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return Camera.Parameters.WHITE_BALANCE_INCANDESCENT; 453c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong case SHADE: 454c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return Camera.Parameters.WHITE_BALANCE_SHADE; 455c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong case TWILIGHT: 456c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return Camera.Parameters.WHITE_BALANCE_TWILIGHT; 457c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong case WARM_FLUORESCENT: 458c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return Camera.Parameters.WHITE_BALANCE_WARM_FLUORESCENT; 459c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 460c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return null; 461c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 462c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong 463c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong @Override 464c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong public WhiteBalance whiteBalanceFromString(String val) { 4658097973089420749dcd1ab4974a629c2466b31ccAngus Kong if (val == null) { 4668097973089420749dcd1ab4974a629c2466b31ccAngus Kong return null; 4678097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 4688097973089420749dcd1ab4974a629c2466b31ccAngus Kong 4698097973089420749dcd1ab4974a629c2466b31ccAngus Kong if (Camera.Parameters.WHITE_BALANCE_AUTO.equals(val)) { 470c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return WhiteBalance.AUTO; 4718097973089420749dcd1ab4974a629c2466b31ccAngus Kong } else if (Camera.Parameters.WHITE_BALANCE_CLOUDY_DAYLIGHT.equals(val)) { 472c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return WhiteBalance.CLOUDY_DAYLIGHT; 4738097973089420749dcd1ab4974a629c2466b31ccAngus Kong } else if (Camera.Parameters.WHITE_BALANCE_DAYLIGHT.equals(val)) { 474c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return WhiteBalance.DAYLIGHT; 4758097973089420749dcd1ab4974a629c2466b31ccAngus Kong } else if (Camera.Parameters.WHITE_BALANCE_FLUORESCENT.equals(val)) { 476c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return WhiteBalance.FLUORESCENT; 4778097973089420749dcd1ab4974a629c2466b31ccAngus Kong } else if (Camera.Parameters.WHITE_BALANCE_INCANDESCENT.equals(val)) { 478c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return WhiteBalance.INCANDESCENT; 4798097973089420749dcd1ab4974a629c2466b31ccAngus Kong } else if (Camera.Parameters.WHITE_BALANCE_SHADE.equals(val)) { 480c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return WhiteBalance.SHADE; 4818097973089420749dcd1ab4974a629c2466b31ccAngus Kong } else if (Camera.Parameters.WHITE_BALANCE_TWILIGHT.equals(val)) { 482c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return WhiteBalance.TWILIGHT; 4838097973089420749dcd1ab4974a629c2466b31ccAngus Kong } else if (Camera.Parameters.WHITE_BALANCE_WARM_FLUORESCENT.equals(val)) { 484c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return WhiteBalance.WARM_FLUORESCENT; 485c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } else { 486c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong return null; 487c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 488c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 489c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong } 490c36e3c983c232dc45ed31f3d8e98d8cdd7ac14baAngus Kong} 491