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