diff options
Diffstat (limited to 'camera2/portability/src/com/android/ex/camera2/portability/AndroidCameraAgentImpl.java')
-rw-r--r-- | camera2/portability/src/com/android/ex/camera2/portability/AndroidCameraAgentImpl.java | 35 |
1 files changed, 33 insertions, 2 deletions
diff --git a/camera2/portability/src/com/android/ex/camera2/portability/AndroidCameraAgentImpl.java b/camera2/portability/src/com/android/ex/camera2/portability/AndroidCameraAgentImpl.java index a9aba37..949ac62 100644 --- a/camera2/portability/src/com/android/ex/camera2/portability/AndroidCameraAgentImpl.java +++ b/camera2/portability/src/com/android/ex/camera2/portability/AndroidCameraAgentImpl.java @@ -38,6 +38,8 @@ import android.view.SurfaceHolder; import com.android.ex.camera2.portability.debug.Log; import java.io.IOException; +import java.util.Collections; +import java.util.List; import java.util.StringTokenizer; /** @@ -402,6 +404,7 @@ class AndroidCameraAgentImpl extends CameraAgent { break; } + // TODO: Lock the CameraSettings object's sizes case CameraActions.SET_PREVIEW_TEXTURE_ASYNC: { setPreviewTexture(msg.obj); break; @@ -426,6 +429,7 @@ class AndroidCameraAgentImpl extends CameraAgent { break; } + // TODO: Unlock the CameraSettings object's sizes case CameraActions.STOP_PREVIEW: { mCamera.stopPreview(); break; @@ -600,8 +604,8 @@ class AndroidCameraAgentImpl extends CameraAgent { parameters.setPreviewFormat(settings.getCurrentPreviewFormat()); parameters.setJpegQuality(settings.getPhotoJpegCompressionQuality()); if (mCapabilities.supports(CameraCapabilities.Feature.ZOOM)) { - // Should use settings.getCurrentZoomRatio() instead here. - parameters.setZoom(settings.getCurrentZoomIndex()); + parameters.setZoom(zoomRatioToIndex(settings.getCurrentZoomRatio(), + parameters.getZoomRatios())); } parameters.setExposureCompensation(settings.getExposureCompensationIndex()); if (mCapabilities.supports(CameraCapabilities.Feature.AUTO_EXPOSURE_LOCK)) { @@ -614,11 +618,15 @@ class AndroidCameraAgentImpl extends CameraAgent { if (mCapabilities.supports(CameraCapabilities.Feature.FOCUS_AREA)) { if (settings.getFocusAreas().size() != 0) { parameters.setFocusAreas(settings.getFocusAreas()); + } else { + parameters.setFocusAreas(null); } } if (mCapabilities.supports(CameraCapabilities.Feature.METERING_AREA)) { if (settings.getMeteringAreas().size() != 0) { parameters.setMeteringAreas(settings.getMeteringAreas()); + } else { + parameters.setMeteringAreas(null); } } if (settings.getCurrentFlashMode() != CameraCapabilities.FlashMode.NO_FLASH) { @@ -652,6 +660,29 @@ class AndroidCameraAgentImpl extends CameraAgent { } } + + /** + * @param ratio Desired zoom ratio, in [1.0f,+Inf). + * @param percentages Available zoom ratios, as percentages. + * @return Index of the closest corresponding ratio, rounded up toward + * that of the maximum available ratio. + */ + private int zoomRatioToIndex(float ratio, List<Integer> percentages) { + int percent = (int) (ratio * AndroidCameraCapabilities.ZOOM_MULTIPLIER); + int index = Collections.binarySearch(percentages, percent); + if (index >= 0) { + // Found the desired ratio in the supported list + return index; + } else { + // Didn't find an exact match. Where would it have been? + index = -(index + 1); + if (index == percentages.size()) { + // Put it back in bounds by setting to the maximum allowable zoom + --index; + } + return index; + } + } } /** |