mirror of
https://github.com/androidx/media.git
synced 2025-05-17 20:49:53 +08:00
MultipleInputVideoGraph: propagate Compositor output size changes
PiperOrigin-RevId: 756260135
This commit is contained in:
parent
ce5e61e26f
commit
81e4488f0a
@ -54,6 +54,7 @@ import androidx.media3.common.VideoFrameProcessor;
|
||||
import androidx.media3.common.VideoGraph;
|
||||
import androidx.media3.common.util.GlUtil.GlException;
|
||||
import androidx.media3.common.util.Log;
|
||||
import androidx.media3.common.util.Size;
|
||||
import androidx.media3.common.util.TimestampIterator;
|
||||
import androidx.media3.common.util.UnstableApi;
|
||||
import com.google.common.util.concurrent.MoreExecutors;
|
||||
@ -143,8 +144,8 @@ public final class MultipleInputVideoGraph implements VideoGraph {
|
||||
|
||||
@Nullable private VideoFrameProcessor compositionVideoFrameProcessor;
|
||||
@Nullable private VideoCompositor videoCompositor;
|
||||
private Size compositorOutputSize;
|
||||
|
||||
private boolean compositionVideoFrameProcessorInputStreamRegistered;
|
||||
private boolean compositorEnded;
|
||||
private boolean released;
|
||||
private long lastRenderedPresentationTimeUs;
|
||||
@ -183,6 +184,7 @@ public final class MultipleInputVideoGraph implements VideoGraph {
|
||||
.build();
|
||||
compositorOutputTextures = new ArrayDeque<>();
|
||||
compositorOutputTextureReleases = new SparseArray<>();
|
||||
compositorOutputSize = Size.UNKNOWN;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -472,25 +474,6 @@ public final class MultipleInputVideoGraph implements VideoGraph {
|
||||
compositorOutputTextureReleases.put(
|
||||
outputTexture.texId,
|
||||
new CompositorOutputTextureRelease(textureProducer, presentationTimeUs));
|
||||
|
||||
if (!compositionVideoFrameProcessorInputStreamRegistered) {
|
||||
checkStateNotNull(compositionVideoFrameProcessor)
|
||||
.registerInputStream(
|
||||
INPUT_TYPE_TEXTURE_ID,
|
||||
// Pre-processing VideoFrameProcessors have converted the inputColor to outputColor
|
||||
// already, so use outputColorInfo for the input color to the
|
||||
// compositionVideoFrameProcessor.
|
||||
new Format.Builder()
|
||||
.setColorInfo(outputColorInfo)
|
||||
.setWidth(outputTexture.width)
|
||||
.setHeight(outputTexture.height)
|
||||
.build(),
|
||||
compositionEffects,
|
||||
/* offsetToAddUs= */ 0);
|
||||
compositionVideoFrameProcessorInputStreamRegistered = true;
|
||||
// Return as the VideoFrameProcessor rejects input textures until the input is registered.
|
||||
return;
|
||||
}
|
||||
queueCompositionOutputInternal();
|
||||
}
|
||||
|
||||
@ -526,6 +509,23 @@ public final class MultipleInputVideoGraph implements VideoGraph {
|
||||
}
|
||||
VideoFrameProcessor compositionVideoFrameProcessor =
|
||||
checkStateNotNull(this.compositionVideoFrameProcessor);
|
||||
int width = outputTexture.glTextureInfo.width;
|
||||
int height = outputTexture.glTextureInfo.height;
|
||||
if (width != compositorOutputSize.getWidth() || height != compositorOutputSize.getHeight()) {
|
||||
compositionVideoFrameProcessor.registerInputStream(
|
||||
INPUT_TYPE_TEXTURE_ID,
|
||||
// Pre-processing VideoFrameProcessors have converted the inputColor to outputColor
|
||||
// already, so use outputColorInfo for the input color to the
|
||||
// compositionVideoFrameProcessor.
|
||||
new Format.Builder()
|
||||
.setColorInfo(outputColorInfo)
|
||||
.setWidth(width)
|
||||
.setHeight(height)
|
||||
.build(),
|
||||
compositionEffects,
|
||||
/* offsetToAddUs= */ 0);
|
||||
compositorOutputSize = new Size(width, height);
|
||||
}
|
||||
if (!compositionVideoFrameProcessor.queueInputTexture(
|
||||
outputTexture.glTextureInfo.texId, outputTexture.presentationTimeUs)) {
|
||||
return;
|
||||
|
Loading…
x
Reference in New Issue
Block a user