AEMeteringRegion.java revision 9ad0984f36ff9cd133c61c4e979032988b77a995
19c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall/* 29c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall * Copyright (C) 2014 The Android Open Source Project 39c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall * 49c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall * Licensed under the Apache License, Version 2.0 (the "License"); 59c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall * you may not use this file except in compliance with the License. 69c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall * You may obtain a copy of the License at 79c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall * 89c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall * http://www.apache.org/licenses/LICENSE-2.0 99c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall * 109c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall * Unless required by applicable law or agreed to in writing, software 119c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall * distributed under the License is distributed on an "AS IS" BASIS, 129c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall * See the License for the specific language governing permissions and 149c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall * limitations under the License. 159c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall */ 169c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall 1712f608f3d2089439a108788a1908941eea4277b9Puneet Lallpackage com.android.camera.one.v2.autofocus; 189c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall 199c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lallimport android.graphics.PointF; 209c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lallimport android.graphics.Rect; 219c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lallimport android.hardware.camera2.params.MeteringRectangle; 229c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall 239c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lallimport com.android.camera.app.OrientationManager; 249c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lallimport com.android.camera.one.v2.AutoFocusHelper; 259ad0984f36ff9cd133c61c4e979032988b77a995Puneet Lallimport com.google.common.base.Supplier; 269c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall 279c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall/** 2812f608f3d2089439a108788a1908941eea4277b9Puneet Lall * Computes the current AE metering rectangles based on the current 299c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall * metering parameters and crop region. 309c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall */ 319ad0984f36ff9cd133c61c4e979032988b77a995Puneet Lallclass AEMeteringRegion implements Supplier<MeteringRectangle[]> { 329ad0984f36ff9cd133c61c4e979032988b77a995Puneet Lall private final Supplier<MeteringParameters> mMeteringParameters; 339ad0984f36ff9cd133c61c4e979032988b77a995Puneet Lall private final Supplier<Rect> mCropRegion; 349c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall private final OrientationManager.DeviceOrientation mSensorOrientation; 359c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall 369ad0984f36ff9cd133c61c4e979032988b77a995Puneet Lall public AEMeteringRegion(Supplier<MeteringParameters> meteringParameters, 379ad0984f36ff9cd133c61c4e979032988b77a995Puneet Lall Supplier<Rect> cropRegion, 389ad0984f36ff9cd133c61c4e979032988b77a995Puneet Lall OrientationManager.DeviceOrientation sensorOrientation) { 399c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall mMeteringParameters = meteringParameters; 409c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall mCropRegion = cropRegion; 419c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall mSensorOrientation = sensorOrientation; 429c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall } 439c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall 449c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall @Override 459ad0984f36ff9cd133c61c4e979032988b77a995Puneet Lall public MeteringRectangle[] get() { 469c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall MeteringParameters parameters = mMeteringParameters.get(); 479c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall if (parameters.getMode() == MeteringParameters.Mode.POINT) { 489c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall Rect cropRegion = mCropRegion.get(); 499c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall PointF point = parameters.getAEPoint(); 509c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall return AutoFocusHelper.aeRegionsForNormalizedCoord(point.x, point.y, cropRegion, 519c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall mSensorOrientation.getDegrees()); 529c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall } else { 539c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall return AutoFocusHelper.getZeroWeightRegion(); 549c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall } 559c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall } 569c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall} 57