From e5621cc70960bf76c5651f6f368f78aeacac82b3 Mon Sep 17 00:00:00 2001 From: ibaker Date: Wed, 24 Jan 2024 04:05:34 -0800 Subject: [PATCH] Add proguard keep rules for `ExoPlayer.setVideoEffects` These symbols in `lib-effect` are referenced via reflection from `CompositingVideoSinkProvider` in `lib-exoplayer` in order to avoid a hard dependency from `lib-exoplayer` to `lib-effect`. Without this keep rule, the symbols can get renamed by R8 resulting in the invocations failing. #minor-release PiperOrigin-RevId: 601074636 --- libraries/exoplayer/proguard-rules.txt | 10 ++++++++++ .../exoplayer/video/CompositingVideoSinkProvider.java | 1 - 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/libraries/exoplayer/proguard-rules.txt b/libraries/exoplayer/proguard-rules.txt index 7733da1f39..9e04184575 100644 --- a/libraries/exoplayer/proguard-rules.txt +++ b/libraries/exoplayer/proguard-rules.txt @@ -61,3 +61,13 @@ -keepclasseswithmembers class androidx.media3.exoplayer.rtsp.RtspMediaSource$Factory { (); } + +# Constructors and methods accessed via reflection in CompositingVideoSinkProvider +-dontnote androidx.media3.effect.PreviewingSingleInputVideoGraph$Factory +-keepclasseswithmembers class androidx.media3.effect.PreviewingSingleInputVideoGraph$Factory { + (androidx.media3.common.VideoFrameProcessor$Factory); +} +-dontnote androidx.media3.effect.DefaultVideoFrameProcessor$Factory$Builder +-keepclasseswithmembers class androidx.media3.effect.DefaultVideoFrameProcessor$Factory$Builder { + build(); +} diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/CompositingVideoSinkProvider.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/CompositingVideoSinkProvider.java index d774014ed8..b7b9c1b900 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/CompositingVideoSinkProvider.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/CompositingVideoSinkProvider.java @@ -827,7 +827,6 @@ public final class CompositingVideoSinkProvider Suppliers.memoize( () -> { try { - // TODO: b/284964524- Add LINT and proguard checks for media3.effect reflection. Class defaultVideoFrameProcessorFactoryBuilderClass = Class.forName( "androidx.media3.effect.DefaultVideoFrameProcessor$Factory$Builder");