Commit 4f272cc9 by huangdarwin Committed by Ian Baker

Transformer GL: Avoid no-op ScaleToFit / Presentation FrameProcessors

Avoid no-op FrameProcessors in VideoTranscodingSamplePipeline, to avoid
creating resources for and executing GL for a no-op vertex+fragment shader.

EncoderCompatibilityFrameProcessor will still always be exercised.

PiperOrigin-RevId: 443675833
parent 85bd080a
...@@ -22,6 +22,7 @@ import android.content.Context; ...@@ -22,6 +22,7 @@ import android.content.Context;
import android.media.MediaCodec; import android.media.MediaCodec;
import android.util.Size; import android.util.Size;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.Format; import com.google.android.exoplayer2.Format;
import com.google.android.exoplayer2.decoder.DecoderInputBuffer; import com.google.android.exoplayer2.decoder.DecoderInputBuffer;
import com.google.android.exoplayer2.util.Util; import com.google.android.exoplayer2.util.Util;
...@@ -70,31 +71,33 @@ import org.checkerframework.dataflow.qual.Pure; ...@@ -70,31 +71,33 @@ import org.checkerframework.dataflow.qual.Pure;
int decodedHeight = int decodedHeight =
(inputFormat.rotationDegrees % 180 == 0) ? inputFormat.height : inputFormat.width; (inputFormat.rotationDegrees % 180 == 0) ? inputFormat.height : inputFormat.width;
// TODO(b/213190310): Don't create a ScaleToFitFrameProcessor if scale and rotation are unset, ImmutableList.Builder<GlFrameProcessor> frameProcessorsListBuilder =
// and don't create a PresentationFrameProcessor if resolution is unset. new ImmutableList.Builder<GlFrameProcessor>().addAll(frameProcessors);
ScaleToFitFrameProcessor scaleToFitFrameProcessor = if (transformationRequest.scaleX != 1f
new ScaleToFitFrameProcessor.Builder() || transformationRequest.scaleY != 1f
.setScale(transformationRequest.scaleX, transformationRequest.scaleY) || transformationRequest.rotationDegrees != 0f) {
.setRotationDegrees(transformationRequest.rotationDegrees) frameProcessorsListBuilder.add(
.build(); new ScaleToFitFrameProcessor.Builder()
PresentationFrameProcessor presentationFrameProcessor = .setScale(transformationRequest.scaleX, transformationRequest.scaleY)
new PresentationFrameProcessor.Builder() .setRotationDegrees(transformationRequest.rotationDegrees)
.setResolution(transformationRequest.outputHeight) .build());
.build(); }
if (transformationRequest.outputHeight != C.LENGTH_UNSET) {
frameProcessorsListBuilder.add(
new PresentationFrameProcessor.Builder()
.setResolution(transformationRequest.outputHeight)
.build());
}
EncoderCompatibilityFrameProcessor encoderCompatibilityFrameProcessor = EncoderCompatibilityFrameProcessor encoderCompatibilityFrameProcessor =
new EncoderCompatibilityFrameProcessor(); new EncoderCompatibilityFrameProcessor();
frameProcessorsListBuilder.add(encoderCompatibilityFrameProcessor);
frameProcessorChain = frameProcessorChain =
FrameProcessorChain.create( FrameProcessorChain.create(
context, context,
inputFormat.pixelWidthHeightRatio, inputFormat.pixelWidthHeightRatio,
/* inputWidth= */ decodedWidth, /* inputWidth= */ decodedWidth,
/* inputHeight= */ decodedHeight, /* inputHeight= */ decodedHeight,
new ImmutableList.Builder<GlFrameProcessor>() frameProcessorsListBuilder.build(),
.addAll(frameProcessors)
.add(scaleToFitFrameProcessor)
.add(presentationFrameProcessor)
.add(encoderCompatibilityFrameProcessor)
.build(),
transformationRequest.enableHdrEditing); transformationRequest.enableHdrEditing);
Size requestedEncoderSize = frameProcessorChain.getOutputSize(); Size requestedEncoderSize = frameProcessorChain.getOutputSize();
outputRotationDegrees = encoderCompatibilityFrameProcessor.getOutputRotationDegrees(); outputRotationDegrees = encoderCompatibilityFrameProcessor.getOutputRotationDegrees();
......
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