diff --git a/libraries/effect/src/main/java/androidx/media3/effect/DefaultShaderProgram.java b/libraries/effect/src/main/java/androidx/media3/effect/DefaultShaderProgram.java index 3950b1a729..fdfc4f364a 100644 --- a/libraries/effect/src/main/java/androidx/media3/effect/DefaultShaderProgram.java +++ b/libraries/effect/src/main/java/androidx/media3/effect/DefaultShaderProgram.java @@ -294,7 +294,8 @@ import java.util.List; Context context, List matrixTransformations, List rgbMatrices, - ColorInfo outputColorInfo) + ColorInfo outputColorInfo, + boolean enableColorTransfers) throws VideoFrameProcessingException { boolean outputIsHdr = ColorInfo.isTransferHdr(outputColorInfo); String vertexShaderFilePath = @@ -303,6 +304,9 @@ import java.util.List; outputIsHdr ? FRAGMENT_SHADER_OETF_ES3_PATH : FRAGMENT_SHADER_TRANSFORMATION_SDR_OETF_ES2_PATH; + if (!enableColorTransfers) { + fragmentShaderFilePath = FRAGMENT_SHADER_TRANSFORMATION_PATH; + } GlProgram glProgram = createGlProgram(context, vertexShaderFilePath, fragmentShaderFilePath); @C.ColorTransfer int outputColorTransfer = outputColorInfo.colorTransfer; @@ -310,8 +314,9 @@ import java.util.List; checkArgument( outputColorTransfer == C.COLOR_TRANSFER_HLG || outputColorTransfer == C.COLOR_TRANSFER_ST2084); + checkArgument(enableColorTransfers); glProgram.setIntUniform("uOutputColorTransfer", outputColorTransfer); - } else { + } else if (enableColorTransfers) { checkArgument( outputColorTransfer == C.COLOR_TRANSFER_SDR || outputColorTransfer == C.COLOR_TRANSFER_GAMMA_2_2); diff --git a/libraries/effect/src/main/java/androidx/media3/effect/FinalShaderProgramWrapper.java b/libraries/effect/src/main/java/androidx/media3/effect/FinalShaderProgramWrapper.java index dac8c6c212..516ab60719 100644 --- a/libraries/effect/src/main/java/androidx/media3/effect/FinalShaderProgramWrapper.java +++ b/libraries/effect/src/main/java/androidx/media3/effect/FinalShaderProgramWrapper.java @@ -509,7 +509,11 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; } else { defaultShaderProgram = DefaultShaderProgram.createApplyingOetf( - context, expandedMatrixTransformations, rgbMatrices, outputColorInfo); + context, + expandedMatrixTransformations, + rgbMatrices, + outputColorInfo, + enableColorTransfers); } defaultShaderProgram.setTextureTransformMatrix(textureTransformMatrix); @@ -527,12 +531,16 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; .maybeRenderToSurfaceView( () -> { GlUtil.clearOutputFrame(); - @C.ColorTransfer - int configuredColorTransfer = defaultShaderProgram.getOutputColorTransfer(); - defaultShaderProgram.setOutputColorTransfer( - debugSurfaceViewWrapper.outputColorTransfer); - defaultShaderProgram.drawFrame(inputTexture.texId, presentationTimeUs); - defaultShaderProgram.setOutputColorTransfer(configuredColorTransfer); + if (enableColorTransfers) { + @C.ColorTransfer + int configuredColorTransfer = defaultShaderProgram.getOutputColorTransfer(); + defaultShaderProgram.setOutputColorTransfer( + debugSurfaceViewWrapper.outputColorTransfer); + defaultShaderProgram.drawFrame(inputTexture.texId, presentationTimeUs); + defaultShaderProgram.setOutputColorTransfer(configuredColorTransfer); + } else { + defaultShaderProgram.drawFrame(inputTexture.texId, presentationTimeUs); + } }, glObjectsProvider); } catch (VideoFrameProcessingException | GlUtil.GlException e) {