diff --git a/library/effect/src/main/java/com/google/android/exoplayer2/effect/Brightness.java b/library/effect/src/main/java/com/google/android/exoplayer2/effect/Brightness.java index c894917528..29614a889e 100644 --- a/library/effect/src/main/java/com/google/android/exoplayer2/effect/Brightness.java +++ b/library/effect/src/main/java/com/google/android/exoplayer2/effect/Brightness.java @@ -21,6 +21,7 @@ import static com.google.android.exoplayer2.util.Assertions.checkArgument; import android.opengl.Matrix; import androidx.annotation.FloatRange; import com.google.android.exoplayer2.util.GlUtil; +import java.util.Arrays; /** Modifies brightness of an input frame. */ public class Brightness implements RgbMatrix { @@ -31,7 +32,8 @@ public class Brightness implements RgbMatrix { * Modifies brightness by adding a constant value to red, green, and blue values. * * @param brightness The constant value to add to red, green, and blue values. Should be greater - * than or equal to -1f, and less than or equal to 1f. + * than or equal to {@code -1f}, and less than or equal to {@code 1f}. {@code 0} means to + * leave brightness unchanged. */ public Brightness(@FloatRange(from = -1, to = 1) float brightness) { checkArgument( @@ -51,4 +53,9 @@ public class Brightness implements RgbMatrix { checkArgument(!useHdr, "HDR is not supported."); return rgbMatrix; } + + @Override + public boolean isNoOp(int inputWidth, int inputHeight) { + return Arrays.equals(rgbMatrix, GlUtil.create4x4IdentityMatrix()); + } } diff --git a/library/effect/src/main/java/com/google/android/exoplayer2/effect/Contrast.java b/library/effect/src/main/java/com/google/android/exoplayer2/effect/Contrast.java index c45f92ba28..817c096e8f 100644 --- a/library/effect/src/main/java/com/google/android/exoplayer2/effect/Contrast.java +++ b/library/effect/src/main/java/com/google/android/exoplayer2/effect/Contrast.java @@ -44,4 +44,9 @@ public class Contrast implements GlEffect { throws VideoFrameProcessingException { return new ContrastShaderProgram(context, this, useHdr); } + + @Override + public boolean isNoOp(int inputWidth, int inputHeight) { + return contrast == 0f; + } } diff --git a/library/effect/src/main/java/com/google/android/exoplayer2/effect/GlEffect.java b/library/effect/src/main/java/com/google/android/exoplayer2/effect/GlEffect.java index 16d5579206..8d8c4f7457 100644 --- a/library/effect/src/main/java/com/google/android/exoplayer2/effect/GlEffect.java +++ b/library/effect/src/main/java/com/google/android/exoplayer2/effect/GlEffect.java @@ -49,9 +49,6 @@ public interface GlEffect extends Effect { * @param inputHeight The input frame height, in pixels. */ default boolean isNoOp(int inputWidth, int inputHeight) { - // TODO(b/265927935): Generalize this logic by implementing this method on all - // subclasses, and deleting the default implementation here. Otherwise, some no-op effects may - // not be properly detected or handled. return false; } } diff --git a/library/effect/src/main/java/com/google/android/exoplayer2/effect/HslAdjustment.java b/library/effect/src/main/java/com/google/android/exoplayer2/effect/HslAdjustment.java index ab65c48c1d..6437eed98d 100644 --- a/library/effect/src/main/java/com/google/android/exoplayer2/effect/HslAdjustment.java +++ b/library/effect/src/main/java/com/google/android/exoplayer2/effect/HslAdjustment.java @@ -116,4 +116,9 @@ public class HslAdjustment implements GlEffect { throws VideoFrameProcessingException { return new HslShaderProgram(context, /* hslAdjustment= */ this, useHdr); } + + @Override + public boolean isNoOp(int inputWidth, int inputHeight) { + return hueAdjustmentDegrees == 0f && saturationAdjustment == 0f && lightnessAdjustment == 0f; + } } diff --git a/library/effect/src/main/java/com/google/android/exoplayer2/effect/RgbAdjustment.java b/library/effect/src/main/java/com/google/android/exoplayer2/effect/RgbAdjustment.java index 5d562aaa8c..e7a51db0ba 100644 --- a/library/effect/src/main/java/com/google/android/exoplayer2/effect/RgbAdjustment.java +++ b/library/effect/src/main/java/com/google/android/exoplayer2/effect/RgbAdjustment.java @@ -22,6 +22,7 @@ import android.opengl.Matrix; import androidx.annotation.FloatRange; import com.google.android.exoplayer2.util.GlUtil; import com.google.errorprone.annotations.CanIgnoreReturnValue; +import java.util.Arrays; /** Scales the red, green, and blue color channels of a frame. */ public final class RgbAdjustment implements RgbMatrix { @@ -98,4 +99,9 @@ public final class RgbAdjustment implements RgbMatrix { public float[] getMatrix(long presentationTimeUs, boolean useHdr) { return rgbMatrix; } + + @Override + public boolean isNoOp(int inputWidth, int inputHeight) { + return Arrays.equals(rgbMatrix, GlUtil.create4x4IdentityMatrix()); + } }