| /* |
| * 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; |
| |
| import android.hardware.camera2.params.MeteringRectangle; |
| |
| /** |
| * Contains 3A parameters common to all camera flavors. TODO: Move to |
| * GservicesHelper. |
| */ |
| public class Settings3A { |
| |
| /** |
| * Width of touch AF region in [0,1] relative to shorter edge of the current |
| * crop region. Multiply this number by the number of pixels along the |
| * shorter edge of the current crop region's width to get a value in pixels. |
| * <p> |
| * This value has been tested on Nexus 5 and Shamu, but will need to be |
| * tuned per device depending on how its ISP interprets the metering box and |
| * weight. |
| * |
| * <pre> |
| * Values prior to L release: |
| * Normal mode: 0.125 * longest edge |
| * Gcam: Fixed at 300px x 300px. |
| */ |
| private static final float AF_REGION_BOX = 0.2f; |
| |
| /** |
| * Width of touch metering region in [0,1] relative to shorter edge of the |
| * current crop region. Multiply this number by the number of pixels along |
| * shorter edge of the current crop region's width to get a value in pixels. |
| * <p> |
| * This value has been tested on Nexus 5 and Shamu, but will need to be |
| * tuned per device depending on how its ISP interprets the metering box and |
| * weight. |
| * |
| * <pre> |
| * Values prior to L release: |
| * Normal mode: 0.1875 * longest edge |
| * Gcam: Fixed ffat 300px x 300px. |
| */ |
| private static final float AE_REGION_BOX = 0.3f; |
| |
| /** |
| * Metering region weight between 0 and 1. |
| * <p> |
| * This value has been tested on Nexus 5 and Shamu, but will need to be |
| * tuned per device depending on how its ISP interprets the metering box and |
| * weight. |
| * </p> |
| */ |
| private static final float REGION_WEIGHT = 0.022f; |
| |
| /** Duration to hold after manual tap to focus. */ |
| private static final int FOCUS_HOLD_MILLIS = 3000; |
| |
| /** |
| * The number of milliseconds to hold tap-to-expose/metering after the last |
| * payload frame is received before returning to continuous 3A. |
| */ |
| private static final int GCAM_POST_SHOT_FOCUS_HOLD_MILLIS = 1000; |
| |
| /** |
| * Width of touch metering region in [0,1] relative to shorter edge of the |
| * current crop region. Multiply this number by the number of pixels along |
| * shorter edge of the current crop region's width to get a value in pixels. |
| * <p> |
| * This value has been tested on Nexus 5 and Shamu, but will need to be |
| * tuned per device depending on how its ISP interprets the metering box and |
| * weight. |
| * </p> |
| * <p> |
| * Was fixed at 300px x 300px prior to L release. |
| * </p> |
| */ |
| private static final float GCAM_METERING_REGION_FRACTION = 0.1225f; |
| |
| /** |
| * Weight of a touch metering region, in [0, \inf). |
| * <p> |
| * This value has been tested on Nexus 5 and Shamu, but will need to be |
| * tuned per device. |
| * </p> |
| * <p> |
| * Was fixed at 15.0f prior to L release. |
| * </p> |
| */ |
| private static final float GCAM_METERING_REGION_WEIGHT = 45.0f; |
| |
| /** |
| * @Return The weight to use for {@link MeteringRectangle}s for 3A. |
| */ |
| public int getMeteringWeight() { |
| // TODO Determine the optimal metering region for non-HDR photos. |
| int weightMin = MeteringRectangle.METERING_WEIGHT_MIN; |
| int weightRange = MeteringRectangle.METERING_WEIGHT_MAX |
| - MeteringRectangle.METERING_WEIGHT_MIN; |
| return (int) (weightMin + GCAM_METERING_REGION_FRACTION * weightRange); |
| } |
| |
| /** |
| * @return The size of (square) metering regions, normalized with respect to |
| * the smallest dimension of the current crop-region. |
| */ |
| public float getMeteringRegionFraction() { |
| // TODO Determine the optimal metering weight for non-HDR photos. |
| return GCAM_METERING_REGION_FRACTION; |
| } |
| |
| @Deprecated |
| public static float getAutoFocusRegionWidth() { |
| return AF_REGION_BOX; |
| } |
| |
| @Deprecated |
| public static float getMeteringRegionWidth() { |
| return AE_REGION_BOX; |
| } |
| |
| @Deprecated |
| public static float getMeteringRegionWeight() { |
| return REGION_WEIGHT; |
| } |
| |
| @Deprecated |
| public static float getGcamMeteringRegionFraction() { |
| return GCAM_METERING_REGION_FRACTION; |
| } |
| |
| @Deprecated |
| public static float getGcamMeteringRegionWeight() { |
| return GCAM_METERING_REGION_WEIGHT; |
| } |
| |
| @Deprecated |
| public static int getFocusHoldMillis() { |
| return FOCUS_HOLD_MILLIS; |
| } |
| |
| @Deprecated |
| public static int getGcamPostShotFocusHoldMillis() { |
| return GCAM_POST_SHOT_FOCUS_HOLD_MILLIS; |
| } |
| } |