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