101e7c02174ef268b6d6daaa5a5bb4f752d55964cAngus Kong/* 201e7c02174ef268b6d6daaa5a5bb4f752d55964cAngus Kong * Copyright (C) 2014 The Android Open Source Project 301e7c02174ef268b6d6daaa5a5bb4f752d55964cAngus Kong * 401e7c02174ef268b6d6daaa5a5bb4f752d55964cAngus Kong * Licensed under the Apache License, Version 2.0 (the "License"); 501e7c02174ef268b6d6daaa5a5bb4f752d55964cAngus Kong * you may not use this file except in compliance with the License. 601e7c02174ef268b6d6daaa5a5bb4f752d55964cAngus Kong * You may obtain a copy of the License at 701e7c02174ef268b6d6daaa5a5bb4f752d55964cAngus Kong * 801e7c02174ef268b6d6daaa5a5bb4f752d55964cAngus Kong * http://www.apache.org/licenses/LICENSE-2.0 901e7c02174ef268b6d6daaa5a5bb4f752d55964cAngus Kong * 1001e7c02174ef268b6d6daaa5a5bb4f752d55964cAngus Kong * Unless required by applicable law or agreed to in writing, software 1101e7c02174ef268b6d6daaa5a5bb4f752d55964cAngus Kong * distributed under the License is distributed on an "AS IS" BASIS, 1201e7c02174ef268b6d6daaa5a5bb4f752d55964cAngus Kong * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1301e7c02174ef268b6d6daaa5a5bb4f752d55964cAngus Kong * See the License for the specific language governing permissions and 1401e7c02174ef268b6d6daaa5a5bb4f752d55964cAngus Kong * limitations under the License. 1501e7c02174ef268b6d6daaa5a5bb4f752d55964cAngus Kong */ 1601e7c02174ef268b6d6daaa5a5bb4f752d55964cAngus Kong 178097973089420749dcd1ab4974a629c2466b31ccAngus Kongpackage com.android.ex.camera2.portability; 188097973089420749dcd1ab4974a629c2466b31ccAngus Kong 198097973089420749dcd1ab4974a629c2466b31ccAngus Kongimport android.hardware.Camera; 2070a82d9d9a59c2a0b9241fdb0b8b0f1a61d0d5a0Senpo Huimport com.android.ex.camera2.portability.debug.Log; 218097973089420749dcd1ab4974a629c2466b31ccAngus Kong 228097973089420749dcd1ab4974a629c2466b31ccAngus Kong/** 2301e7c02174ef268b6d6daaa5a5bb4f752d55964cAngus Kong * The subclass of {@link CameraSettings} for Android Camera 1 API. 248097973089420749dcd1ab4974a629c2466b31ccAngus Kong */ 258097973089420749dcd1ab4974a629c2466b31ccAngus Kongpublic class AndroidCameraSettings extends CameraSettings { 2670a82d9d9a59c2a0b9241fdb0b8b0f1a61d0d5a0Senpo Hu private static final Log.Tag TAG = new Log.Tag("AndCamSet"); 2770a82d9d9a59c2a0b9241fdb0b8b0f1a61d0d5a0Senpo Hu 2801e7c02174ef268b6d6daaa5a5bb4f752d55964cAngus Kong private static final String TRUE = "true"; 2901e7c02174ef268b6d6daaa5a5bb4f752d55964cAngus Kong private static final String RECORDING_HINT = "recording-hint"; 308097973089420749dcd1ab4974a629c2466b31ccAngus Kong 318097973089420749dcd1ab4974a629c2466b31ccAngus Kong public AndroidCameraSettings(CameraCapabilities capabilities, Camera.Parameters params) { 3270a82d9d9a59c2a0b9241fdb0b8b0f1a61d0d5a0Senpo Hu if (params == null) { 3370a82d9d9a59c2a0b9241fdb0b8b0f1a61d0d5a0Senpo Hu Log.w(TAG, "Settings ctor requires a non-null Camera.Parameters."); 3470a82d9d9a59c2a0b9241fdb0b8b0f1a61d0d5a0Senpo Hu return; 3570a82d9d9a59c2a0b9241fdb0b8b0f1a61d0d5a0Senpo Hu } 3670a82d9d9a59c2a0b9241fdb0b8b0f1a61d0d5a0Senpo Hu 378097973089420749dcd1ab4974a629c2466b31ccAngus Kong CameraCapabilities.Stringifier stringifier = capabilities.getStringifier(); 388097973089420749dcd1ab4974a629c2466b31ccAngus Kong 392569329d6cff25bfe9941df539df14a0aeb4c4f4Sol Boucher setSizesLocked(false); 402569329d6cff25bfe9941df539df14a0aeb4c4f4Sol Boucher 418097973089420749dcd1ab4974a629c2466b31ccAngus Kong // Preview 428097973089420749dcd1ab4974a629c2466b31ccAngus Kong Camera.Size paramPreviewSize = params.getPreviewSize(); 438097973089420749dcd1ab4974a629c2466b31ccAngus Kong setPreviewSize(new Size(paramPreviewSize.width, paramPreviewSize.height)); 448097973089420749dcd1ab4974a629c2466b31ccAngus Kong setPreviewFrameRate(params.getPreviewFrameRate()); 458097973089420749dcd1ab4974a629c2466b31ccAngus Kong int[] previewFpsRange = new int[2]; 468097973089420749dcd1ab4974a629c2466b31ccAngus Kong params.getPreviewFpsRange(previewFpsRange); 478097973089420749dcd1ab4974a629c2466b31ccAngus Kong setPreviewFpsRange(previewFpsRange[Camera.Parameters.PREVIEW_FPS_MIN_INDEX], 488097973089420749dcd1ab4974a629c2466b31ccAngus Kong previewFpsRange[Camera.Parameters.PREVIEW_FPS_MAX_INDEX]); 4901e7c02174ef268b6d6daaa5a5bb4f752d55964cAngus Kong setPreviewFormat(params.getPreviewFormat()); 508097973089420749dcd1ab4974a629c2466b31ccAngus Kong 518097973089420749dcd1ab4974a629c2466b31ccAngus Kong // Capture: Focus, flash, zoom, exposure, scene mode. 528097973089420749dcd1ab4974a629c2466b31ccAngus Kong if (capabilities.supports(CameraCapabilities.Feature.ZOOM)) { 538097973089420749dcd1ab4974a629c2466b31ccAngus Kong setZoomRatio(params.getZoomRatios().get(params.getZoom()) / 100f); 548097973089420749dcd1ab4974a629c2466b31ccAngus Kong } else { 559d8668449376fa47bc6528c7a61b04d6a0f691b3Sol Boucher setZoomRatio(CameraCapabilities.ZOOM_RATIO_UNZOOMED); 568097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 578097973089420749dcd1ab4974a629c2466b31ccAngus Kong setExposureCompensationIndex(params.getExposureCompensation()); 588097973089420749dcd1ab4974a629c2466b31ccAngus Kong setFlashMode(stringifier.flashModeFromString(params.getFlashMode())); 598097973089420749dcd1ab4974a629c2466b31ccAngus Kong setFocusMode(stringifier.focusModeFromString(params.getFocusMode())); 608097973089420749dcd1ab4974a629c2466b31ccAngus Kong setSceneMode(stringifier.sceneModeFromString(params.getSceneMode())); 618097973089420749dcd1ab4974a629c2466b31ccAngus Kong 628097973089420749dcd1ab4974a629c2466b31ccAngus Kong // Video capture. 638097973089420749dcd1ab4974a629c2466b31ccAngus Kong if (capabilities.supports(CameraCapabilities.Feature.VIDEO_STABILIZATION)) { 648097973089420749dcd1ab4974a629c2466b31ccAngus Kong setVideoStabilization(isVideoStabilizationEnabled()); 658097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 6601e7c02174ef268b6d6daaa5a5bb4f752d55964cAngus Kong setRecordingHintEnabled(TRUE.equals(params.get(RECORDING_HINT))); 678097973089420749dcd1ab4974a629c2466b31ccAngus Kong 68de48004068f8c16f9a56c60b0ed2485a67687b4bSol Boucher // Output: Photo size, compression quality 698097973089420749dcd1ab4974a629c2466b31ccAngus Kong setPhotoJpegCompressionQuality(params.getJpegQuality()); 708097973089420749dcd1ab4974a629c2466b31ccAngus Kong Camera.Size paramPictureSize = params.getPictureSize(); 718097973089420749dcd1ab4974a629c2466b31ccAngus Kong setPhotoSize(new Size(paramPictureSize.width, paramPictureSize.height)); 7201e7c02174ef268b6d6daaa5a5bb4f752d55964cAngus Kong setPhotoFormat(params.getPictureFormat()); 738097973089420749dcd1ab4974a629c2466b31ccAngus Kong } 74de48004068f8c16f9a56c60b0ed2485a67687b4bSol Boucher 75de48004068f8c16f9a56c60b0ed2485a67687b4bSol Boucher public AndroidCameraSettings(AndroidCameraSettings other) { 76de48004068f8c16f9a56c60b0ed2485a67687b4bSol Boucher super(other); 77de48004068f8c16f9a56c60b0ed2485a67687b4bSol Boucher } 78de48004068f8c16f9a56c60b0ed2485a67687b4bSol Boucher 79de48004068f8c16f9a56c60b0ed2485a67687b4bSol Boucher @Override 80de48004068f8c16f9a56c60b0ed2485a67687b4bSol Boucher public CameraSettings copy() { 81de48004068f8c16f9a56c60b0ed2485a67687b4bSol Boucher return new AndroidCameraSettings(this); 82de48004068f8c16f9a56c60b0ed2485a67687b4bSol Boucher } 838097973089420749dcd1ab4974a629c2466b31ccAngus Kong} 84