Skip to content

Commit 892874e

Browse files
clainclycopybara-github
authored andcommitted
Improve readability on frame cache handling
This makes clear that `InputSwitcher` outputs to frame cache if present, otherwise the first shader program in the chain. PiperOrigin-RevId: 791150641
1 parent 43b250b commit 892874e

File tree

1 file changed

+18
-15
lines changed

1 file changed

+18
-15
lines changed

libraries/effect/src/main/java/androidx/media3/effect/DefaultVideoFrameProcessor.java

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -492,7 +492,7 @@ public DefaultVideoFrameProcessor create(
492492
private final boolean renderFramesAutomatically;
493493
private final FinalShaderProgramWrapper finalShaderProgramWrapper;
494494

495-
// Shader programs that apply Effects.
495+
// Shader programs that apply Effects, this doesn't include the frame cache (if present).
496496
private final List<GlShaderProgram> intermediateGlShaderPrograms;
497497
private final ConditionVariable inputStreamRegisteredCondition;
498498

@@ -1126,18 +1126,10 @@ private void configure(InputStreamInfo inputStreamInfo, boolean forceReconfigure
11261126
/* inputColorInfo= */ checkNotNull(inputStreamInfo.format.colorInfo), outputColorInfo);
11271127

11281128
if (forceReconfigure || !activeEffects.equals(inputStreamInfo.effects)) {
1129-
if (!intermediateGlShaderPrograms.isEmpty()) {
1130-
// If frameCache is present, it's the first item in the list, skip releasing it.
1131-
int startIndex = frameCache == null ? 0 : 1;
1132-
for (int i = startIndex; i < intermediateGlShaderPrograms.size(); i++) {
1133-
intermediateGlShaderPrograms.get(i).release();
1134-
}
1135-
intermediateGlShaderPrograms.clear();
1136-
}
1137-
1138-
if (frameCache != null) {
1139-
intermediateGlShaderPrograms.add(frameCache);
1129+
for (int i = 0; i < intermediateGlShaderPrograms.size(); i++) {
1130+
intermediateGlShaderPrograms.get(i).release();
11401131
}
1132+
intermediateGlShaderPrograms.clear();
11411133

11421134
ImmutableList.Builder<Effect> effectsListBuilder =
11431135
new ImmutableList.Builder<Effect>().addAll(inputStreamInfo.effects);
@@ -1150,11 +1142,19 @@ private void configure(InputStreamInfo inputStreamInfo, boolean forceReconfigure
11501142
intermediateGlShaderPrograms.addAll(
11511143
createGlShaderPrograms(
11521144
context, effectsListBuilder.build(), outputColorInfo, finalShaderProgramWrapper));
1153-
inputSwitcher.setDownstreamShaderProgram(
1154-
getFirst(intermediateGlShaderPrograms, /* defaultValue= */ finalShaderProgramWrapper));
1145+
1146+
ImmutableList.Builder<GlShaderProgram> shaderProgramsToChain = new ImmutableList.Builder<>();
1147+
if (frameCache != null) {
1148+
inputSwitcher.setDownstreamShaderProgram(frameCache);
1149+
shaderProgramsToChain.add(frameCache);
1150+
} else {
1151+
inputSwitcher.setDownstreamShaderProgram(
1152+
getFirst(intermediateGlShaderPrograms, /* defaultValue= */ finalShaderProgramWrapper));
1153+
}
1154+
shaderProgramsToChain.addAll(intermediateGlShaderPrograms);
11551155
chainShaderProgramsWithListeners(
11561156
glObjectsProvider,
1157-
intermediateGlShaderPrograms,
1157+
shaderProgramsToChain.build(),
11581158
finalShaderProgramWrapper,
11591159
videoFrameProcessingTaskExecutor,
11601160
listener,
@@ -1244,6 +1244,9 @@ private void releaseGlObjects() {
12441244
try {
12451245
try {
12461246
inputSwitcher.release();
1247+
if (frameCache != null) {
1248+
frameCache.release();
1249+
}
12471250
for (int i = 0; i < intermediateGlShaderPrograms.size(); i++) {
12481251
intermediateGlShaderPrograms.get(i).release();
12491252
}

0 commit comments

Comments
 (0)