Commit 4102cdbc by huangdarwin Committed by microkatz

FrameProcessor: Use factories instead of a builder for Presentation.

PiperOrigin-RevId: 456064021
(cherry picked from commit d1357e8b)
parent 6cc442de
...@@ -204,10 +204,10 @@ public final class FrameProcessorChainPixelTest { ...@@ -204,10 +204,10 @@ public final class FrameProcessorChainPixelTest {
} }
@Test @Test
public void processData_withPresentation_setResolution_producesExpectedOutput() throws Exception { public void processData_withPresentation_createForHeight_producesExpectedOutput()
String testId = "processData_withPresentation_setResolution"; throws Exception {
setUpAndPrepareFirstFrame( String testId = "processData_withPresentation_createForHeight";
DEFAULT_PIXEL_WIDTH_HEIGHT_RATIO, new Presentation.Builder().setResolution(480).build()); setUpAndPrepareFirstFrame(DEFAULT_PIXEL_WIDTH_HEIGHT_RATIO, Presentation.createForHeight(480));
Bitmap expectedBitmap = BitmapTestUtil.readBitmap(REQUEST_OUTPUT_HEIGHT_PNG_ASSET_PATH); Bitmap expectedBitmap = BitmapTestUtil.readBitmap(REQUEST_OUTPUT_HEIGHT_PNG_ASSET_PATH);
Bitmap actualBitmap = processFirstFrameAndEnd(); Bitmap actualBitmap = processFirstFrameAndEnd();
...@@ -222,14 +222,13 @@ public final class FrameProcessorChainPixelTest { ...@@ -222,14 +222,13 @@ public final class FrameProcessorChainPixelTest {
} }
@Test @Test
public void processData_withCropAndPresentation_producesExpectedOutput() throws Exception { public void processData_withCropThenPresentation_producesExpectedOutput() throws Exception {
String testId = "processData_withCropAndPresentation"; String testId = "processData_withCropThenPresentation";
setUpAndPrepareFirstFrame( setUpAndPrepareFirstFrame(
DEFAULT_PIXEL_WIDTH_HEIGHT_RATIO, DEFAULT_PIXEL_WIDTH_HEIGHT_RATIO,
new Crop(/* left= */ -.5f, /* right= */ .5f, /* bottom= */ -.5f, /* top= */ .5f), new Crop(/* left= */ -.5f, /* right= */ .5f, /* bottom= */ -.5f, /* top= */ .5f),
new Presentation.Builder() Presentation.createForAspectRatio(
.setAspectRatio(/* aspectRatio= */ .5f, Presentation.LAYOUT_SCALE_TO_FIT) /* aspectRatio= */ .5f, Presentation.LAYOUT_SCALE_TO_FIT));
.build());
Bitmap expectedBitmap = BitmapTestUtil.readBitmap(CROP_THEN_ASPECT_RATIO_PNG_ASSET_PATH); Bitmap expectedBitmap = BitmapTestUtil.readBitmap(CROP_THEN_ASPECT_RATIO_PNG_ASSET_PATH);
Bitmap actualBitmap = processFirstFrameAndEnd(); Bitmap actualBitmap = processFirstFrameAndEnd();
......
...@@ -27,6 +27,7 @@ import android.opengl.EGLDisplay; ...@@ -27,6 +27,7 @@ import android.opengl.EGLDisplay;
import android.opengl.EGLSurface; import android.opengl.EGLSurface;
import android.util.Size; import android.util.Size;
import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.ext.junit.runners.AndroidJUnit4;
import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.util.GlUtil; import com.google.android.exoplayer2.util.GlUtil;
import java.io.IOException; import java.io.IOException;
import org.checkerframework.checker.nullness.qual.MonotonicNonNull; import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
...@@ -95,7 +96,8 @@ public final class PresentationPixelTest { ...@@ -95,7 +96,8 @@ public final class PresentationPixelTest {
@Test @Test
public void drawFrame_noEdits_producesExpectedOutput() throws Exception { public void drawFrame_noEdits_producesExpectedOutput() throws Exception {
String testId = "drawFrame_noEdits"; String testId = "drawFrame_noEdits";
presentationTextureProcessor = new Presentation.Builder().build().toGlTextureProcessor(context); presentationTextureProcessor =
Presentation.createForHeight(C.LENGTH_UNSET).toGlTextureProcessor(context);
Size outputSize = presentationTextureProcessor.configure(inputWidth, inputHeight); Size outputSize = presentationTextureProcessor.configure(inputWidth, inputHeight);
setupOutputTexture(outputSize.getWidth(), outputSize.getHeight()); setupOutputTexture(outputSize.getWidth(), outputSize.getHeight());
Bitmap expectedBitmap = BitmapTestUtil.readBitmap(ORIGINAL_PNG_ASSET_PATH); Bitmap expectedBitmap = BitmapTestUtil.readBitmap(ORIGINAL_PNG_ASSET_PATH);
...@@ -119,9 +121,7 @@ public final class PresentationPixelTest { ...@@ -119,9 +121,7 @@ public final class PresentationPixelTest {
throws Exception { throws Exception {
String testId = "drawFrame_changeAspectRatio_scaleToFit_narrow"; String testId = "drawFrame_changeAspectRatio_scaleToFit_narrow";
presentationTextureProcessor = presentationTextureProcessor =
new Presentation.Builder() Presentation.createForAspectRatio(/* aspectRatio= */ 1f, Presentation.LAYOUT_SCALE_TO_FIT)
.setAspectRatio(1f, Presentation.LAYOUT_SCALE_TO_FIT)
.build()
.toGlTextureProcessor(context); .toGlTextureProcessor(context);
Size outputSize = presentationTextureProcessor.configure(inputWidth, inputHeight); Size outputSize = presentationTextureProcessor.configure(inputWidth, inputHeight);
setupOutputTexture(outputSize.getWidth(), outputSize.getHeight()); setupOutputTexture(outputSize.getWidth(), outputSize.getHeight());
...@@ -147,9 +147,7 @@ public final class PresentationPixelTest { ...@@ -147,9 +147,7 @@ public final class PresentationPixelTest {
throws Exception { throws Exception {
String testId = "drawFrame_changeAspectRatio_scaleToFit_wide"; String testId = "drawFrame_changeAspectRatio_scaleToFit_wide";
presentationTextureProcessor = presentationTextureProcessor =
new Presentation.Builder() Presentation.createForAspectRatio(/* aspectRatio= */ 2f, Presentation.LAYOUT_SCALE_TO_FIT)
.setAspectRatio(2f, Presentation.LAYOUT_SCALE_TO_FIT)
.build()
.toGlTextureProcessor(context); .toGlTextureProcessor(context);
Size outputSize = presentationTextureProcessor.configure(inputWidth, inputHeight); Size outputSize = presentationTextureProcessor.configure(inputWidth, inputHeight);
setupOutputTexture(outputSize.getWidth(), outputSize.getHeight()); setupOutputTexture(outputSize.getWidth(), outputSize.getHeight());
...@@ -175,9 +173,8 @@ public final class PresentationPixelTest { ...@@ -175,9 +173,8 @@ public final class PresentationPixelTest {
throws Exception { throws Exception {
String testId = "drawFrame_changeAspectRatio_scaleToFitWithCrop_narrow"; String testId = "drawFrame_changeAspectRatio_scaleToFitWithCrop_narrow";
presentationTextureProcessor = presentationTextureProcessor =
new Presentation.Builder() Presentation.createForAspectRatio(
.setAspectRatio(1f, Presentation.LAYOUT_SCALE_TO_FIT_WITH_CROP) /* aspectRatio= */ 1f, Presentation.LAYOUT_SCALE_TO_FIT_WITH_CROP)
.build()
.toGlTextureProcessor(context); .toGlTextureProcessor(context);
Size outputSize = presentationTextureProcessor.configure(inputWidth, inputHeight); Size outputSize = presentationTextureProcessor.configure(inputWidth, inputHeight);
setupOutputTexture(outputSize.getWidth(), outputSize.getHeight()); setupOutputTexture(outputSize.getWidth(), outputSize.getHeight());
...@@ -203,9 +200,8 @@ public final class PresentationPixelTest { ...@@ -203,9 +200,8 @@ public final class PresentationPixelTest {
throws Exception { throws Exception {
String testId = "drawFrame_changeAspectRatio_scaleToFitWithCrop_wide"; String testId = "drawFrame_changeAspectRatio_scaleToFitWithCrop_wide";
presentationTextureProcessor = presentationTextureProcessor =
new Presentation.Builder() Presentation.createForAspectRatio(
.setAspectRatio(2f, Presentation.LAYOUT_SCALE_TO_FIT_WITH_CROP) /* aspectRatio= */ 2f, Presentation.LAYOUT_SCALE_TO_FIT_WITH_CROP)
.build()
.toGlTextureProcessor(context); .toGlTextureProcessor(context);
Size outputSize = presentationTextureProcessor.configure(inputWidth, inputHeight); Size outputSize = presentationTextureProcessor.configure(inputWidth, inputHeight);
setupOutputTexture(outputSize.getWidth(), outputSize.getHeight()); setupOutputTexture(outputSize.getWidth(), outputSize.getHeight());
...@@ -231,9 +227,7 @@ public final class PresentationPixelTest { ...@@ -231,9 +227,7 @@ public final class PresentationPixelTest {
throws Exception { throws Exception {
String testId = "drawFrame_changeAspectRatio_stretchToFit_narrow"; String testId = "drawFrame_changeAspectRatio_stretchToFit_narrow";
presentationTextureProcessor = presentationTextureProcessor =
new Presentation.Builder() Presentation.createForAspectRatio(/* aspectRatio= */ 1f, Presentation.LAYOUT_STRETCH_TO_FIT)
.setAspectRatio(1f, Presentation.LAYOUT_STRETCH_TO_FIT)
.build()
.toGlTextureProcessor(context); .toGlTextureProcessor(context);
Size outputSize = presentationTextureProcessor.configure(inputWidth, inputHeight); Size outputSize = presentationTextureProcessor.configure(inputWidth, inputHeight);
setupOutputTexture(outputSize.getWidth(), outputSize.getHeight()); setupOutputTexture(outputSize.getWidth(), outputSize.getHeight());
...@@ -259,9 +253,7 @@ public final class PresentationPixelTest { ...@@ -259,9 +253,7 @@ public final class PresentationPixelTest {
throws Exception { throws Exception {
String testId = "drawFrame_changeAspectRatio_stretchToFit_wide"; String testId = "drawFrame_changeAspectRatio_stretchToFit_wide";
presentationTextureProcessor = presentationTextureProcessor =
new Presentation.Builder() Presentation.createForAspectRatio(/* aspectRatio= */ 2f, Presentation.LAYOUT_STRETCH_TO_FIT)
.setAspectRatio(2f, Presentation.LAYOUT_STRETCH_TO_FIT)
.build()
.toGlTextureProcessor(context); .toGlTextureProcessor(context);
Size outputSize = presentationTextureProcessor.configure(inputWidth, inputHeight); Size outputSize = presentationTextureProcessor.configure(inputWidth, inputHeight);
setupOutputTexture(outputSize.getWidth(), outputSize.getHeight()); setupOutputTexture(outputSize.getWidth(), outputSize.getHeight());
......
...@@ -259,12 +259,8 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; ...@@ -259,12 +259,8 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
if (outputSurfaceInfo.width != outputSize.getWidth() if (outputSurfaceInfo.width != outputSize.getWidth()
|| outputSurfaceInfo.height != outputSize.getHeight()) { || outputSurfaceInfo.height != outputSize.getHeight()) {
matrixTransformationListBuilder.add( matrixTransformationListBuilder.add(
new Presentation.Builder() Presentation.createForWidthAndHeight(
.setAspectRatio( outputSurfaceInfo.width, outputSurfaceInfo.height, Presentation.LAYOUT_SCALE_TO_FIT));
outputSurfaceInfo.width / (float) outputSurfaceInfo.height,
Presentation.LAYOUT_SCALE_TO_FIT)
.setResolution(outputSurfaceInfo.height)
.build());
} }
// Convert final list of matrix transformations (including additional transformations for the // Convert final list of matrix transformations (including additional transformations for the
......
...@@ -35,8 +35,6 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; ...@@ -35,8 +35,6 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
* the input pixels onto the output frame geometry (for example, by stretching the input frame to * the input pixels onto the output frame geometry (for example, by stretching the input frame to
* match the specified output frame, or fitting the input frame using letterboxing). * match the specified output frame, or fitting the input frame using letterboxing).
* *
* <p>Aspect ratio is applied before setting resolution.
*
* <p>The background color of the output frame will be black, with alpha = 0 if applicable. * <p>The background color of the output frame will be black, with alpha = 0 if applicable.
*/ */
public final class Presentation implements MatrixTransformation { public final class Presentation implements MatrixTransformation {
...@@ -47,8 +45,7 @@ public final class Presentation implements MatrixTransformation { ...@@ -47,8 +45,7 @@ public final class Presentation implements MatrixTransformation {
* <p>One of {@link #LAYOUT_SCALE_TO_FIT}, {@link #LAYOUT_SCALE_TO_FIT_WITH_CROP}, or {@link * <p>One of {@link #LAYOUT_SCALE_TO_FIT}, {@link #LAYOUT_SCALE_TO_FIT_WITH_CROP}, or {@link
* #LAYOUT_STRETCH_TO_FIT}. * #LAYOUT_STRETCH_TO_FIT}.
* *
* <p>May scale either width or height, leaving the other output dimension equal to its input, * <p>May scale either width or height, leaving the other output dimension equal to its input.
* unless {@link Builder#setResolution(int)} rescales width and height.
*/ */
@Documented @Documented
@Retention(SOURCE) @Retention(SOURCE)
...@@ -98,81 +95,82 @@ public final class Presentation implements MatrixTransformation { ...@@ -98,81 +95,82 @@ public final class Presentation implements MatrixTransformation {
*/ */
public static final int LAYOUT_STRETCH_TO_FIT = 2; public static final int LAYOUT_STRETCH_TO_FIT = 2;
/** A builder for {@link Presentation} instances. */ private static final float ASPECT_RATIO_UNSET = -1f;
public static final class Builder {
// Optional fields.
private int outputHeight;
private float aspectRatio;
private @Layout int layout;
/** Creates a builder with default values. */ private static void checkLayout(@Layout int layout) {
public Builder() { checkArgument(
outputHeight = C.LENGTH_UNSET; layout == LAYOUT_SCALE_TO_FIT
aspectRatio = C.LENGTH_UNSET; || layout == LAYOUT_SCALE_TO_FIT_WITH_CROP
} || layout == LAYOUT_STRETCH_TO_FIT,
"invalid layout " + layout);
}
/** /**
* Sets the output resolution using the output height. * Creates a new {@link Presentation} instance.
* *
* <p>The default value, {@link C#LENGTH_UNSET}, corresponds to using the same height as the * <p>The output frame will have the given aspect ratio (width/height ratio). Width or height will
* input. Output width of the displayed frame will scale to preserve the frame's aspect ratio * be resized to conform to this {@code aspectRatio}, given a {@link Layout}.
* after other transformations. *
* * @param aspectRatio The aspect ratio (width/height ratio) of the output frame. Must be positive.
* <p>For example, a 1920x1440 frame can be scaled to 640x480 by calling {@code * @param layout The layout of the output frame.
* setResolution(480)}. */
* public static Presentation createForAspectRatio(float aspectRatio, @Layout int layout) {
* @param height The output height of the displayed frame, in pixels. checkArgument(
* @return This builder. aspectRatio == C.LENGTH_UNSET || aspectRatio > 0,
*/ "aspect ratio " + aspectRatio + " must be positive or unset");
public Builder setResolution(int height) { checkLayout(layout);
this.outputHeight = height; return new Presentation(
return this; /* width= */ C.LENGTH_UNSET, /* height= */ C.LENGTH_UNSET, aspectRatio, layout);
} }
/** /**
* Sets the aspect ratio (width/height ratio) for the output frame. * Creates a new {@link Presentation} instance.
* *
* <p>Resizes a frame's width or height to conform to an {@code aspectRatio}, given a {@link * <p>The output frame will have the given height. Width will scale to preserve the input aspect
* Layout}. {@code aspectRatio} defaults to {@link C#LENGTH_UNSET}, which corresponds to the * ratio.
* same aspect ratio as the input frame. {@code layout} defaults to {@link #LAYOUT_SCALE_TO_FIT} *
* * @param height The height of the output frame, in pixels.
* <p>Width and height values set may be rescaled by {@link #setResolution(int)}, which is */
* applied after aspect ratio changes. public static Presentation createForHeight(int height) {
* return new Presentation(
* @param aspectRatio The aspect ratio (width/height ratio) of the output frame. Must be /* width= */ C.LENGTH_UNSET, height, ASPECT_RATIO_UNSET, LAYOUT_SCALE_TO_FIT);
* positive. }
* @return This builder.
*/
public Builder setAspectRatio(float aspectRatio, @Layout int layout) {
checkArgument(aspectRatio > 0, "aspect ratio " + aspectRatio + " must be positive");
checkArgument(
layout == LAYOUT_SCALE_TO_FIT
|| layout == LAYOUT_SCALE_TO_FIT_WITH_CROP
|| layout == LAYOUT_STRETCH_TO_FIT,
"invalid layout " + layout);
this.aspectRatio = aspectRatio;
this.layout = layout;
return this;
}
public Presentation build() { /**
return new Presentation(outputHeight, aspectRatio, layout); * Creates a new {@link Presentation} instance.
} *
* <p>The output frame will have the given width and height, given a {@link Layout}.
*
* <p>Width and height must be positive integers representing the output frame's width and height.
*
* @param width The width of the output frame, in pixels.
* @param height The height of the output frame, in pixels.
* @param layout The layout of the output frame.
*/
public static Presentation createForWidthAndHeight(int width, int height, @Layout int layout) {
checkArgument(width > 0, "width " + width + " must be positive");
checkArgument(height > 0, "height " + height + " must be positive");
checkLayout(layout);
return new Presentation(width, height, ASPECT_RATIO_UNSET, layout);
} }
private final int requestedWidthPixels;
private final int requestedHeightPixels; private final int requestedHeightPixels;
private final float requestedAspectRatio; private float requestedAspectRatio;
private final @Layout int layout; private final @Layout int layout;
private float outputWidth; private float outputWidth;
private float outputHeight; private float outputHeight;
private @MonotonicNonNull Matrix transformationMatrix; private @MonotonicNonNull Matrix transformationMatrix;
/** Creates a new instance. */ private Presentation(int width, int height, float aspectRatio, @Layout int layout) {
private Presentation(int requestedHeightPixels, float requestedAspectRatio, @Layout int layout) { checkArgument(
this.requestedHeightPixels = requestedHeightPixels; (aspectRatio == C.LENGTH_UNSET) || (width == C.LENGTH_UNSET),
this.requestedAspectRatio = requestedAspectRatio; "width and aspect ratio should not both be set");
this.requestedWidthPixels = width;
this.requestedHeightPixels = height;
this.requestedAspectRatio = aspectRatio;
this.layout = layout; this.layout = layout;
outputWidth = C.LENGTH_UNSET; outputWidth = C.LENGTH_UNSET;
...@@ -189,13 +187,21 @@ public final class Presentation implements MatrixTransformation { ...@@ -189,13 +187,21 @@ public final class Presentation implements MatrixTransformation {
outputWidth = inputWidth; outputWidth = inputWidth;
outputHeight = inputHeight; outputHeight = inputHeight;
if ((requestedWidthPixels != C.LENGTH_UNSET) && (requestedHeightPixels != C.LENGTH_UNSET)) {
requestedAspectRatio = (float) requestedWidthPixels / requestedHeightPixels;
}
if (requestedAspectRatio != C.LENGTH_UNSET) { if (requestedAspectRatio != C.LENGTH_UNSET) {
applyAspectRatio(); applyAspectRatio();
} }
// Scale width and height to desired requestedHeightPixels, preserving aspect ratio. // Scale output width and height to requested values.
if (requestedHeightPixels != C.LENGTH_UNSET && requestedHeightPixels != outputHeight) { if (requestedHeightPixels != C.LENGTH_UNSET) {
outputWidth = requestedHeightPixels * outputWidth / outputHeight; if (requestedWidthPixels != C.LENGTH_UNSET) {
outputWidth = requestedWidthPixels;
} else {
outputWidth = requestedHeightPixels * outputWidth / outputHeight;
}
outputHeight = requestedHeightPixels; outputHeight = requestedHeightPixels;
} }
return new Size(Math.round(outputWidth), Math.round(outputHeight)); return new Size(Math.round(outputWidth), Math.round(outputHeight));
......
...@@ -88,8 +88,7 @@ import org.checkerframework.dataflow.qual.Pure; ...@@ -88,8 +88,7 @@ import org.checkerframework.dataflow.qual.Pure;
.build()); .build());
} }
if (transformationRequest.outputHeight != C.LENGTH_UNSET) { if (transformationRequest.outputHeight != C.LENGTH_UNSET) {
effectsListBuilder.add( effectsListBuilder.add(Presentation.createForHeight(transformationRequest.outputHeight));
new Presentation.Builder().setResolution(transformationRequest.outputHeight).build());
} }
AtomicReference<TransformationException> encoderInitializationException = AtomicReference<TransformationException> encoderInitializationException =
......
...@@ -19,6 +19,7 @@ import static com.google.common.truth.Truth.assertThat; ...@@ -19,6 +19,7 @@ import static com.google.common.truth.Truth.assertThat;
import android.util.Size; import android.util.Size;
import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.ext.junit.runners.AndroidJUnit4;
import com.google.android.exoplayer2.C;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
...@@ -33,7 +34,7 @@ public final class PresentationTest { ...@@ -33,7 +34,7 @@ public final class PresentationTest {
public void configure_noEdits_leavesFramesUnchanged() { public void configure_noEdits_leavesFramesUnchanged() {
int inputWidth = 200; int inputWidth = 200;
int inputHeight = 150; int inputHeight = 150;
Presentation presentation = new Presentation.Builder().build(); Presentation presentation = Presentation.createForHeight(C.LENGTH_UNSET);
Size outputSize = presentation.configure(inputWidth, inputHeight); Size outputSize = presentation.configure(inputWidth, inputHeight);
...@@ -42,11 +43,11 @@ public final class PresentationTest { ...@@ -42,11 +43,11 @@ public final class PresentationTest {
} }
@Test @Test
public void configure_setResolution_changesDimensions() { public void configure_createForHeight_changesDimensions() {
int inputWidth = 200; int inputWidth = 200;
int inputHeight = 150; int inputHeight = 150;
int requestedHeight = 300; int requestedHeight = 300;
Presentation presentation = new Presentation.Builder().setResolution(requestedHeight).build(); Presentation presentation = Presentation.createForHeight(requestedHeight);
Size outputSize = presentation.configure(inputWidth, inputHeight); Size outputSize = presentation.configure(inputWidth, inputHeight);
...@@ -55,14 +56,12 @@ public final class PresentationTest { ...@@ -55,14 +56,12 @@ public final class PresentationTest {
} }
@Test @Test
public void configure_setAspectRatio_changesDimensions() { public void configure_createForAspectRatio_changesDimensions() {
int inputWidth = 300; int inputWidth = 300;
int inputHeight = 200; int inputHeight = 200;
float aspectRatio = 2f; float aspectRatio = 2f;
Presentation presentation = Presentation presentation =
new Presentation.Builder() Presentation.createForAspectRatio(aspectRatio, Presentation.LAYOUT_SCALE_TO_FIT);
.setAspectRatio(aspectRatio, Presentation.LAYOUT_SCALE_TO_FIT)
.build();
Size outputSize = presentation.configure(inputWidth, inputHeight); Size outputSize = presentation.configure(inputWidth, inputHeight);
...@@ -71,20 +70,18 @@ public final class PresentationTest { ...@@ -71,20 +70,18 @@ public final class PresentationTest {
} }
@Test @Test
public void configure_setAspectRatioAndResolution_changesDimensions() { public void configure_createForWidthAndHeight_changesDimensions() {
int inputWidth = 300; int inputWidth = 300;
int inputHeight = 200; int inputHeight = 200;
float aspectRatio = 2f; int requestedWidth = 100;
int requestedHeight = 100; int requestedHeight = 300;
Presentation presentation = Presentation presentation =
new Presentation.Builder() Presentation.createForWidthAndHeight(
.setAspectRatio(aspectRatio, Presentation.LAYOUT_SCALE_TO_FIT) requestedWidth, requestedHeight, Presentation.LAYOUT_SCALE_TO_FIT);
.setResolution(requestedHeight)
.build();
Size outputSize = presentation.configure(inputWidth, inputHeight); Size outputSize = presentation.configure(inputWidth, inputHeight);
assertThat(outputSize.getWidth()).isEqualTo(Math.round(aspectRatio * requestedHeight)); assertThat(outputSize.getWidth()).isEqualTo(requestedWidth);
assertThat(outputSize.getHeight()).isEqualTo(requestedHeight); assertThat(outputSize.getHeight()).isEqualTo(requestedHeight);
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment