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
179c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lallpackage com.android.camera.one.v2.common;
189c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall
199c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lallimport android.graphics.Rect;
209c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lallimport android.hardware.camera2.CameraCharacteristics;
219c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall
229ad0984f36ff9cd133c61c4e979032988b77a995Puneet Lallimport com.google.common.base.Supplier;
239c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall
249c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall/**
2512f608f3d2089439a108788a1908941eea4277b9Puneet Lall * Computes the current crop region based on the current zoom.
269c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall */
279ad0984f36ff9cd133c61c4e979032988b77a995Puneet Lallpublic class ZoomedCropRegion implements Supplier<Rect> {
28d8463954727c9f8b688e69476439830cadb7b45aPuneet Lall    private final Rect mSensorArrayArea;
299ad0984f36ff9cd133c61c4e979032988b77a995Puneet Lall    private final Supplier<Float> mZoom;
309c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall
31d8463954727c9f8b688e69476439830cadb7b45aPuneet Lall    public ZoomedCropRegion(Rect sensorArrayArea, Supplier<Float> zoom) {
32d8463954727c9f8b688e69476439830cadb7b45aPuneet Lall        mSensorArrayArea = sensorArrayArea;
339c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall        mZoom = zoom;
349c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall    }
359c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall
369c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall    @Override
379ad0984f36ff9cd133c61c4e979032988b77a995Puneet Lall    public Rect get() {
389c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall        float zoom = mZoom.get();
39d8463954727c9f8b688e69476439830cadb7b45aPuneet Lall        Rect sensor = mSensorArrayArea;
409c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall        int xCenter = sensor.width() / 2;
419c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall        int yCenter = sensor.height() / 2;
429c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall        int xDelta = (int) (0.5f * sensor.width() / zoom);
439c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall        int yDelta = (int) (0.5f * sensor.height() / zoom);
449c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall        return new Rect(xCenter - xDelta, yCenter - yDelta, xCenter + xDelta, yCenter + yDelta);
459c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall    }
469c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lall}
47