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 cfa4f27d04..44cb876fcd 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 @@ -231,8 +231,9 @@ public final class PresentationFrameProcessor implements GlFrameProcessor { private final float requestedAspectRatio; private final @Layout int layout; - private int outputWidth; - private int outputHeight; + private float outputWidth; + private float outputHeight; + private @MonotonicNonNull Size outputSize; private @MonotonicNonNull Matrix transformationMatrix; private @MonotonicNonNull AdvancedFrameProcessor advancedFrameProcessor; @@ -268,10 +269,10 @@ public final class PresentationFrameProcessor implements GlFrameProcessor { @Override public Size getOutputSize() { - checkState( - outputWidth != C.LENGTH_UNSET && outputHeight != C.LENGTH_UNSET, + checkStateNotNull( + outputSize, "configureOutputSizeAndTransformationMatrix must be called before getOutputSize"); - return new Size(outputWidth, outputHeight); + return outputSize; } @Override @@ -307,9 +308,10 @@ public final class PresentationFrameProcessor implements GlFrameProcessor { // Scale width and height to desired requestedHeightPixels, preserving aspect ratio. if (requestedHeightPixels != C.LENGTH_UNSET && requestedHeightPixels != outputHeight) { - outputWidth = Math.round((float) requestedHeightPixels * outputWidth / outputHeight); + outputWidth = requestedHeightPixels * outputWidth / outputHeight; outputHeight = requestedHeightPixels; } + outputSize = new Size(Math.round(outputWidth), Math.round(outputHeight)); } @RequiresNonNull("transformationMatrix") @@ -322,34 +324,34 @@ public final class PresentationFrameProcessor implements GlFrameProcessor { transformationMatrix.postTranslate(-centerX, -centerY); transformationMatrix.postScale(1f / scaleX, 1f / scaleY); - outputWidth = Math.round(outputWidth * scaleX); - outputHeight = Math.round(outputHeight * scaleY); + outputWidth = outputWidth * scaleX; + outputHeight = outputHeight * scaleY; } @RequiresNonNull("transformationMatrix") private void applyAspectRatio() { - float inputAspectRatio = (float) outputWidth / outputHeight; + float inputAspectRatio = outputWidth / outputHeight; if (layout == LAYOUT_SCALE_TO_FIT) { if (requestedAspectRatio > inputAspectRatio) { transformationMatrix.setScale(inputAspectRatio / requestedAspectRatio, 1f); - outputWidth = Math.round(outputHeight * requestedAspectRatio); + outputWidth = outputHeight * requestedAspectRatio; } else { transformationMatrix.setScale(1f, requestedAspectRatio / inputAspectRatio); - outputHeight = Math.round(outputWidth / requestedAspectRatio); + outputHeight = outputWidth / requestedAspectRatio; } } else if (layout == LAYOUT_SCALE_TO_FIT_WITH_CROP) { if (requestedAspectRatio > inputAspectRatio) { transformationMatrix.setScale(1f, requestedAspectRatio / inputAspectRatio); - outputHeight = Math.round(outputWidth / requestedAspectRatio); + outputHeight = outputWidth / requestedAspectRatio; } else { transformationMatrix.setScale(inputAspectRatio / requestedAspectRatio, 1f); - outputWidth = Math.round(outputHeight * requestedAspectRatio); + outputWidth = outputHeight * requestedAspectRatio; } } else if (layout == LAYOUT_STRETCH_TO_FIT) { if (requestedAspectRatio > inputAspectRatio) { - outputWidth = Math.round(outputHeight * requestedAspectRatio); + outputWidth = outputHeight * requestedAspectRatio; } else { - outputHeight = Math.round(outputWidth / requestedAspectRatio); + outputHeight = outputWidth / requestedAspectRatio; } } }