From 96b501409deaab24f2e7121d67dc7693b4fbbb6e Mon Sep 17 00:00:00 2001 From: huangdarwin Date: Thu, 14 Apr 2022 15:36:26 +0100 Subject: [PATCH] FrameProcessor: Add checks to ensure width and height are positive. Negative and zero values should be disallowed. PiperOrigin-RevId: 441757246 --- .../exoplayer2/transformer/AdvancedFrameProcessor.java | 3 +++ .../exoplayer2/transformer/ExternalCopyFrameProcessor.java | 4 ++++ .../android/exoplayer2/transformer/FrameProcessorChain.java | 4 ++++ .../exoplayer2/transformer/PresentationFrameProcessor.java | 1 + .../exoplayer2/transformer/ScaleToFitFrameProcessor.java | 4 ++++ 5 files changed, 16 insertions(+) diff --git a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/AdvancedFrameProcessor.java b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/AdvancedFrameProcessor.java index 76daf8f4b1..0c444228f9 100644 --- a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/AdvancedFrameProcessor.java +++ b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/AdvancedFrameProcessor.java @@ -167,6 +167,9 @@ public final class AdvancedFrameProcessor implements GlFrameProcessor { @Override public void initialize(int inputTexId, int inputWidth, int inputHeight) throws IOException { + checkArgument(inputWidth > 0, "inputWidth must be positive"); + checkArgument(inputHeight > 0, "inputHeight must be positive"); + size = new Size(inputWidth, inputHeight); // TODO(b/205002913): check the loaded program is consistent with the attributes and uniforms // expected in the code. diff --git a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/ExternalCopyFrameProcessor.java b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/ExternalCopyFrameProcessor.java index 39db318d7c..4d47a8bfd7 100644 --- a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/ExternalCopyFrameProcessor.java +++ b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/ExternalCopyFrameProcessor.java @@ -15,6 +15,7 @@ */ package com.google.android.exoplayer2.transformer; +import static com.google.android.exoplayer2.util.Assertions.checkArgument; import static com.google.android.exoplayer2.util.Assertions.checkStateNotNull; import android.content.Context; @@ -61,6 +62,9 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; @Override public void initialize(int inputTexId, int inputWidth, int inputHeight) throws IOException { + checkArgument(inputWidth > 0, "inputWidth must be positive"); + checkArgument(inputHeight > 0, "inputHeight must be positive"); + size = new Size(inputWidth, inputHeight); // TODO(b/205002913): check the loaded program is consistent with the attributes and uniforms // expected in the code. diff --git a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/FrameProcessorChain.java b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/FrameProcessorChain.java index d5bfbc2c46..090e9c5d5f 100644 --- a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/FrameProcessorChain.java +++ b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/FrameProcessorChain.java @@ -15,6 +15,7 @@ */ package com.google.android.exoplayer2.transformer; +import static com.google.android.exoplayer2.util.Assertions.checkArgument; import static com.google.android.exoplayer2.util.Assertions.checkNotNull; import static com.google.android.exoplayer2.util.Assertions.checkState; import static com.google.android.exoplayer2.util.Assertions.checkStateNotNull; @@ -86,6 +87,9 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; List frameProcessors, boolean enableExperimentalHdrEditing) throws TransformationException { + checkArgument(inputWidth > 0, "inputWidth must be positive"); + checkArgument(inputHeight > 0, "inputHeight must be positive"); + if (pixelWidthHeightRatio != 1.0f) { // TODO(b/211782176): Consider implementing support for non-square pixels. throw TransformationException.createForFrameProcessorChain( diff --git a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/PresentationFrameProcessor.java b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/PresentationFrameProcessor.java index 473f9971ce..f29213db75 100644 --- a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/PresentationFrameProcessor.java +++ b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/PresentationFrameProcessor.java @@ -282,6 +282,7 @@ public final class PresentationFrameProcessor implements GlFrameProcessor { /* package */ void configureOutputSizeAndTransformationMatrix(int inputWidth, int inputHeight) { checkArgument(inputWidth > 0, "inputWidth must be positive"); checkArgument(inputHeight > 0, "inputHeight must be positive"); + transformationMatrix = new Matrix(); outputWidth = inputWidth; outputHeight = inputHeight; diff --git a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/ScaleToFitFrameProcessor.java b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/ScaleToFitFrameProcessor.java index 194c8bc974..2639ee94ad 100644 --- a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/ScaleToFitFrameProcessor.java +++ b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/ScaleToFitFrameProcessor.java @@ -15,6 +15,7 @@ */ package com.google.android.exoplayer2.transformer; +import static com.google.android.exoplayer2.util.Assertions.checkArgument; import static com.google.android.exoplayer2.util.Assertions.checkStateNotNull; import static java.lang.Math.max; import static java.lang.Math.min; @@ -146,6 +147,9 @@ public final class ScaleToFitFrameProcessor implements GlFrameProcessor { @EnsuresNonNull("adjustedTransformationMatrix") @VisibleForTesting // Allows robolectric testing of output size calculation without OpenGL. /* package */ void configureOutputSizeAndTransformationMatrix(int inputWidth, int inputHeight) { + checkArgument(inputWidth > 0, "inputWidth must be positive"); + checkArgument(inputHeight > 0, "inputHeight must be positive"); + adjustedTransformationMatrix = new Matrix(transformationMatrix); if (transformationMatrix.isIdentity()) {