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
This commit is contained in:
parent
59ced5325c
commit
36d190bb66
@ -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 androidx.media3.common.C;
|
||||||
import androidx.media3.common.Format;
|
import androidx.media3.common.Format;
|
||||||
import androidx.media3.common.util.Util;
|
import androidx.media3.common.util.Util;
|
||||||
import androidx.media3.decoder.DecoderInputBuffer;
|
import androidx.media3.decoder.DecoderInputBuffer;
|
||||||
@ -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
|
||||||
|
|| transformationRequest.scaleY != 1f
|
||||||
|
|| transformationRequest.rotationDegrees != 0f) {
|
||||||
|
frameProcessorsListBuilder.add(
|
||||||
new ScaleToFitFrameProcessor.Builder()
|
new ScaleToFitFrameProcessor.Builder()
|
||||||
.setScale(transformationRequest.scaleX, transformationRequest.scaleY)
|
.setScale(transformationRequest.scaleX, transformationRequest.scaleY)
|
||||||
.setRotationDegrees(transformationRequest.rotationDegrees)
|
.setRotationDegrees(transformationRequest.rotationDegrees)
|
||||||
.build();
|
.build());
|
||||||
PresentationFrameProcessor presentationFrameProcessor =
|
}
|
||||||
|
if (transformationRequest.outputHeight != C.LENGTH_UNSET) {
|
||||||
|
frameProcessorsListBuilder.add(
|
||||||
new PresentationFrameProcessor.Builder()
|
new PresentationFrameProcessor.Builder()
|
||||||
.setResolution(transformationRequest.outputHeight)
|
.setResolution(transformationRequest.outputHeight)
|
||||||
.build();
|
.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();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user