blob: c525b572d33bb50e2b2dd45ed7dbb6f54103754f [file] [log] [blame]
/*
* Copyright (C) 2014 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.camera.one.v1;
import android.graphics.Rect;
import android.hardware.Camera;
import com.android.camera.one.OneCamera;
import com.android.camera.one.OneCamera.Facing;
import com.android.camera.one.OneCameraCharacteristics;
import com.android.camera.ui.focus.LensRangeCalculator;
import com.android.camera.ui.motion.LinearScale;
import com.android.camera.util.ApiHelper;
import com.android.camera.util.Size;
import java.util.ArrayList;
import java.util.List;
/**
* Describes a OneCamera device which is on top of camera1 API.
*/
public class OneCameraCharacteristicsImpl implements OneCameraCharacteristics {
private final Camera.CameraInfo mCameraInfo;
private final Camera.Parameters mCameraParameters;
/** The supported picture sizes. */
private final ArrayList<Size> mSupportedPictureSizes = new ArrayList<Size>();
/** The supported preview sizes. */
private final ArrayList<Size> mSupportedPreviewSizes = new ArrayList<Size>();
public OneCameraCharacteristicsImpl(
Camera.CameraInfo cameraInfo, Camera.Parameters cameraParameters) {
mCameraInfo = cameraInfo;
mCameraParameters = cameraParameters;
List<Camera.Size> supportedPictureSizes = cameraParameters.getSupportedPictureSizes();
if (supportedPictureSizes != null) {
for (Camera.Size pictureSize : supportedPictureSizes) {
mSupportedPictureSizes.add(new Size(pictureSize));
}
}
List<Camera.Size> supportedPreviewSizes = cameraParameters.getSupportedPreviewSizes();
if (supportedPreviewSizes != null) {
for (Camera.Size previewSize : supportedPreviewSizes) {
mSupportedPreviewSizes.add(new Size(previewSize));
}
}
}
@Override
public List<Size> getSupportedPictureSizes(int imageFormat) {
return mSupportedPictureSizes;
}
@Override
public List<Size> getSupportedPreviewSizes() {
return mSupportedPreviewSizes;
}
@Override
public int getSensorOrientation() {
return mCameraInfo.orientation;
}
@Override
public OneCamera.Facing getCameraDirection() {
int direction = mCameraInfo.facing;
if (direction == Camera.CameraInfo.CAMERA_FACING_BACK) {
return OneCamera.Facing.BACK;
} else {
return OneCamera.Facing.FRONT;
}
}
@Override
public Rect getSensorInfoActiveArraySize() {
throw new RuntimeException("Not implemented yet.");
}
@Override
public float getAvailableMaxDigitalZoom() {
throw new RuntimeException("Not implemented yet.");
}
@Override
public boolean isFlashSupported() {
return (mCameraParameters.getFlashMode() != null);
}
@Override
public boolean isHdrSceneSupported() {
return mCameraParameters.getSupportedSceneModes().contains(
Camera.Parameters.SCENE_MODE_HDR);
}
@Override
public SupportedHardwareLevel getSupportedHardwareLevel() {
throw new RuntimeException("Not implemented yet.");
}
@Override
public List<FaceDetectMode> getSupportedFaceDetectModes() {
List<FaceDetectMode> oneModes = new ArrayList<>(1);
oneModes.add(FaceDetectMode.NONE);
return oneModes;
}
@Override
public LinearScale getLensFocusRange() {
// Diopter range is not supported on legacy camera devices.
return LensRangeCalculator.getNoOp();
}
@Override
public List<Float> getAvailableFocalLengths() {
List<Float> list = new ArrayList<>(1);
list.add(mCameraParameters.getFocalLength());
return list;
}
@Override
public boolean isExposureCompensationSupported() {
// Turn off exposure compensation for Nexus 6 on L (API level 21)
// because the bug in framework b/19219128.
if (ApiHelper.IS_NEXUS_6 && ApiHelper.isLollipop()) {
return false;
}
return mCameraParameters.getMinExposureCompensation() != 0 ||
mCameraParameters.getMaxExposureCompensation() != 0;
}
@Override
public int getMinExposureCompensation() {
if (!isExposureCompensationSupported()) {
return -1;
}
return mCameraParameters.getMinExposureCompensation();
}
@Override
public int getMaxExposureCompensation() {
if (!isExposureCompensationSupported()) {
return -1;
}
return mCameraParameters.getMaxExposureCompensation();
}
@Override
public float getExposureCompensationStep() {
if (!isExposureCompensationSupported()) {
return -1.0f;
}
return mCameraParameters.getExposureCompensationStep();
}
@Override
public boolean isAutoFocusSupported() {
// Custom AF is only supported on the back camera for legacy devices.
return getCameraDirection() == Facing.BACK;
}
@Override
public boolean isContinuousPictureAutoFocusSupported() {
return getCameraDirection() == Facing.BACK;
}
@Override
public boolean isAutoExposureSupported() {
// Custom AE is only supported on the back camera for legacy devices.
return getCameraDirection() == Facing.BACK;
}
}