From bb0c4a468a5f37eb8184fb0263fed9f1d3d735dc Mon Sep 17 00:00:00 2001 From: claincly Date: Fri, 21 Apr 2023 18:04:30 +0100 Subject: [PATCH] Fix MCVR is not able to find FrameProcessor.Factory constructor. The constructor is removed in https://github.com/androidx/media/commit/316a2ce0ee4f49ba8bce2c9ec9028ebf1e773263. PiperOrigin-RevId: 526068585 --- .../video/MediaCodecVideoRenderer.java | 29 ++++++++++++------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.java index 6ec55dc694..bca0edc2a2 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.java @@ -2315,12 +2315,12 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer { } private static final class VideoFrameProcessorAccessor { - private static @MonotonicNonNull Constructor scaleAndRotateTransformationBuilderConstructor; private static @MonotonicNonNull Method setRotationMethod; private static @MonotonicNonNull Method buildScaleAndRotateTransformationMethod; - private static @MonotonicNonNull Constructor videoFrameProcessorFactoryConstructor; + private static @MonotonicNonNull Constructor videoFrameProcessorFactoryBuilderConstructor; + private static @MonotonicNonNull Method buildVideoFrameProcessorFactoryMethod; public static Effect createRotationEffect(float rotationDegrees) throws Exception { prepare(); @@ -2331,14 +2331,17 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer { public static VideoFrameProcessor.Factory getFrameProcessorFactory() throws Exception { prepare(); - return (VideoFrameProcessor.Factory) videoFrameProcessorFactoryConstructor.newInstance(); + Object builder = videoFrameProcessorFactoryBuilderConstructor.newInstance(); + return (VideoFrameProcessor.Factory) + checkNotNull(buildVideoFrameProcessorFactoryMethod.invoke(builder)); } @EnsuresNonNull({ - "ScaleAndRotateEffectBuilder", - "SetRotationMethod", - "SetRotationMethod", - "VideoFrameProcessorFactoryClass" + "scaleAndRotateTransformationBuilderConstructor", + "setRotationMethod", + "buildScaleAndRotateTransformationMethod", + "videoFrameProcessorFactoryBuilderConstructor", + "buildVideoFrameProcessorFactoryMethod" }) private static void prepare() throws Exception { if (scaleAndRotateTransformationBuilderConstructor == null @@ -2353,10 +2356,14 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer { buildScaleAndRotateTransformationMethod = scaleAndRotateTransformationBuilderClass.getMethod("build"); } - if (videoFrameProcessorFactoryConstructor == null) { - videoFrameProcessorFactoryConstructor = - Class.forName("androidx.media3.effect.DefaultVideoFrameProcessor$Factory") - .getConstructor(); + if (videoFrameProcessorFactoryBuilderConstructor == null + || buildVideoFrameProcessorFactoryMethod == null) { + Class videoFrameProcessorFactoryBuilderClass = + Class.forName("androidx.media3.effect.DefaultVideoFrameProcessor$Factory$Builder"); + videoFrameProcessorFactoryBuilderConstructor = + videoFrameProcessorFactoryBuilderClass.getConstructor(); + buildVideoFrameProcessorFactoryMethod = + videoFrameProcessorFactoryBuilderClass.getMethod("build"); } } }