blob: 08e6585d6c65047b2bf4d1b3d69926b1b5b467d3 [file] [log] [blame]
/*
* 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;
}
}