@@ -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