From e282c0ad6783c92e0247db588b46b01c9cc028b5 Mon Sep 17 00:00:00 2001 From: huangdarwin Date: Mon, 20 Feb 2023 12:51:38 +0000 Subject: [PATCH] Effect: Add FloatRange to public GlEffect impl interfaces. Using these annotations/checkers should hopefully make it marginally harder to use the wrong input values in the API. PiperOrigin-RevId: 510966941 --- .../src/main/java/androidx/media3/effect/Contrast.java | 3 ++- .../main/java/androidx/media3/effect/HslAdjustment.java | 5 +++-- .../src/main/java/androidx/media3/effect/Presentation.java | 4 +++- .../main/java/androidx/media3/effect/RgbAdjustment.java | 7 ++++--- 4 files changed, 12 insertions(+), 7 deletions(-) diff --git a/libraries/effect/src/main/java/androidx/media3/effect/Contrast.java b/libraries/effect/src/main/java/androidx/media3/effect/Contrast.java index 9f0070eff2..48300cac67 100644 --- a/libraries/effect/src/main/java/androidx/media3/effect/Contrast.java +++ b/libraries/effect/src/main/java/androidx/media3/effect/Contrast.java @@ -19,6 +19,7 @@ package androidx.media3.effect; import static androidx.media3.common.util.Assertions.checkArgument; import android.content.Context; +import androidx.annotation.FloatRange; import androidx.media3.common.VideoFrameProcessingException; import androidx.media3.common.util.UnstableApi; @@ -35,7 +36,7 @@ public class Contrast implements GlEffect { *

Contrast values range from -1 (all gray pixels) to 1 (maximum difference of colors). 0 means * to add no contrast and leaves the frames unchanged. */ - public Contrast(float contrast) { + public Contrast(@FloatRange(from = -1, to = 1) float contrast) { checkArgument(-1 <= contrast && contrast <= 1, "Contrast needs to be in the interval [-1, 1]."); this.contrast = contrast; } diff --git a/libraries/effect/src/main/java/androidx/media3/effect/HslAdjustment.java b/libraries/effect/src/main/java/androidx/media3/effect/HslAdjustment.java index 92a90ad64c..bc2a44d707 100644 --- a/libraries/effect/src/main/java/androidx/media3/effect/HslAdjustment.java +++ b/libraries/effect/src/main/java/androidx/media3/effect/HslAdjustment.java @@ -19,6 +19,7 @@ package androidx.media3.effect; import static androidx.media3.common.util.Assertions.checkArgument; import android.content.Context; +import androidx.annotation.FloatRange; import androidx.media3.common.VideoFrameProcessingException; import androidx.media3.common.util.UnstableApi; import com.google.errorprone.annotations.CanIgnoreReturnValue; @@ -63,7 +64,7 @@ public class HslAdjustment implements GlEffect { * {@code 0}, which means no change is applied. */ @CanIgnoreReturnValue - public Builder adjustSaturation(float saturationAdjustment) { + public Builder adjustSaturation(@FloatRange(from = -100, to = 100) float saturationAdjustment) { checkArgument( -100 <= saturationAdjustment && saturationAdjustment <= 100, "Can adjust the saturation by only 100 in either direction, but provided " @@ -83,7 +84,7 @@ public class HslAdjustment implements GlEffect { * {@code 0}, which means no change is applied. */ @CanIgnoreReturnValue - public Builder adjustLightness(float lightnessAdjustment) { + public Builder adjustLightness(@FloatRange(from = -100, to = 100) float lightnessAdjustment) { checkArgument( -100 <= lightnessAdjustment && lightnessAdjustment <= 100, "Can adjust the lightness by only 100 in either direction, but provided " diff --git a/libraries/effect/src/main/java/androidx/media3/effect/Presentation.java b/libraries/effect/src/main/java/androidx/media3/effect/Presentation.java index 2547036e4b..b1dd0efebd 100644 --- a/libraries/effect/src/main/java/androidx/media3/effect/Presentation.java +++ b/libraries/effect/src/main/java/androidx/media3/effect/Presentation.java @@ -21,6 +21,7 @@ import static java.lang.annotation.ElementType.TYPE_USE; import static java.lang.annotation.RetentionPolicy.SOURCE; import android.graphics.Matrix; +import androidx.annotation.FloatRange; import androidx.annotation.IntDef; import androidx.media3.common.C; import androidx.media3.common.util.Size; @@ -116,7 +117,8 @@ public final class Presentation implements MatrixTransformation { * @param aspectRatio The aspect ratio (width/height ratio) of the output frame. Must be positive. * @param layout The layout of the output frame. */ - public static Presentation createForAspectRatio(float aspectRatio, @Layout int layout) { + public static Presentation createForAspectRatio( + @FloatRange(from = 0, fromInclusive = false) float aspectRatio, @Layout int layout) { checkArgument( aspectRatio == C.LENGTH_UNSET || aspectRatio > 0, "aspect ratio " + aspectRatio + " must be positive or unset"); diff --git a/libraries/effect/src/main/java/androidx/media3/effect/RgbAdjustment.java b/libraries/effect/src/main/java/androidx/media3/effect/RgbAdjustment.java index 3aea0b72e8..57d2e970ff 100644 --- a/libraries/effect/src/main/java/androidx/media3/effect/RgbAdjustment.java +++ b/libraries/effect/src/main/java/androidx/media3/effect/RgbAdjustment.java @@ -19,6 +19,7 @@ package androidx.media3.effect; import static androidx.media3.common.util.Assertions.checkArgument; import android.opengl.Matrix; +import androidx.annotation.FloatRange; import androidx.media3.common.util.GlUtil; import androidx.media3.common.util.UnstableApi; import com.google.errorprone.annotations.CanIgnoreReturnValue; @@ -47,7 +48,7 @@ public final class RgbAdjustment implements RgbMatrix { * default value is {@code 1}. */ @CanIgnoreReturnValue - public Builder setRedScale(float redScale) { + public Builder setRedScale(@FloatRange(from = 0) float redScale) { checkArgument(0 <= redScale, "Red scale needs to be non-negative."); this.redScale = redScale; return this; @@ -60,7 +61,7 @@ public final class RgbAdjustment implements RgbMatrix { * default value is {@code 1}. */ @CanIgnoreReturnValue - public Builder setGreenScale(float greenScale) { + public Builder setGreenScale(@FloatRange(from = 0) float greenScale) { checkArgument(0 <= greenScale, "Green scale needs to be non-negative."); this.greenScale = greenScale; return this; @@ -73,7 +74,7 @@ public final class RgbAdjustment implements RgbMatrix { * default value is {@code 1}. */ @CanIgnoreReturnValue - public Builder setBlueScale(float blueScale) { + public Builder setBlueScale(@FloatRange(from = 0) float blueScale) { checkArgument(0 <= blueScale, "Blue scale needs to be non-negative."); this.blueScale = blueScale; return this;