diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 2bc7062f50..18eaa78f1b 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -62,6 +62,8 @@ * RTSP Extension: * Decoder Extensions (FFmpeg, VP9, AV1, etc.): * MIDI extension: + * Plumb custom `AudioSink` and `AudioRendererEventListener` instances into + `MidiRenderer`. * Leanback extension: * Cast Extension: * Bump the `play-services-cast-framework` dependency to 21.5.0 to fix a diff --git a/libraries/decoder_midi/src/main/java/androidx/media3/decoder/midi/MidiRenderer.java b/libraries/decoder_midi/src/main/java/androidx/media3/decoder/midi/MidiRenderer.java index d9c3cce9df..840f824092 100644 --- a/libraries/decoder_midi/src/main/java/androidx/media3/decoder/midi/MidiRenderer.java +++ b/libraries/decoder_midi/src/main/java/androidx/media3/decoder/midi/MidiRenderer.java @@ -16,12 +16,15 @@ package androidx.media3.decoder.midi; import android.content.Context; +import android.os.Handler; import androidx.annotation.Nullable; import androidx.media3.common.C; import androidx.media3.common.Format; import androidx.media3.common.MimeTypes; import androidx.media3.common.util.UnstableApi; import androidx.media3.decoder.CryptoConfig; +import androidx.media3.exoplayer.audio.AudioRendererEventListener; +import androidx.media3.exoplayer.audio.AudioSink; import androidx.media3.exoplayer.audio.DecoderAudioRenderer; /** Decodes and renders MIDI audio. */ @@ -30,11 +33,25 @@ public final class MidiRenderer extends DecoderAudioRenderer { private final Context context; - /** Creates the renderer instance. */ + /** + * @deprecated Use {@link #MidiRenderer(Context, Handler, AudioRendererEventListener, AudioSink)} + * instead. + */ + @Deprecated public MidiRenderer(Context context) { this.context = context.getApplicationContext(); } + /** Creates the renderer instance. */ + public MidiRenderer( + Context context, + @Nullable Handler eventHandler, + @Nullable AudioRendererEventListener eventListener, + AudioSink audioSink) { + super(eventHandler, eventListener, audioSink); + this.context = context.getApplicationContext(); + } + @Override public String getName() { return "MidiRenderer"; diff --git a/libraries/exoplayer/proguard-rules.txt b/libraries/exoplayer/proguard-rules.txt index 66ab9e34b5..e439ce04e3 100644 --- a/libraries/exoplayer/proguard-rules.txt +++ b/libraries/exoplayer/proguard-rules.txt @@ -31,7 +31,7 @@ } -dontnote androidx.media3.decoder.midi.MidiRenderer -keepclassmembers class androidx.media3.decoder.midi.MidiRenderer { - (android.content.Context); + (android.content.Context, android.os.Handler, androidx.media3.exoplayer.audio.AudioRendererEventListener, androidx.media3.exoplayer.audio.AudioSink); } -dontnote androidx.media3.decoder.mpegh.MpeghAudioRenderer -keepclassmembers class androidx.media3.decoder.mpegh.MpeghAudioRenderer { diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/DefaultRenderersFactory.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/DefaultRenderersFactory.java index b867c6224e..768fee8a72 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/DefaultRenderersFactory.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/DefaultRenderersFactory.java @@ -557,9 +557,15 @@ public class DefaultRenderersFactory implements RenderersFactory { // Full class names used for constructor args so the LINT rule triggers if any of them move. // LINT.IfChange Class clazz = Class.forName("androidx.media3.decoder.midi.MidiRenderer"); - Constructor constructor = clazz.getConstructor(Context.class); + Constructor constructor = + clazz.getConstructor( + Context.class, + android.os.Handler.class, + androidx.media3.exoplayer.audio.AudioRendererEventListener.class, + androidx.media3.exoplayer.audio.AudioSink.class); // LINT.ThenChange(../../../../../../proguard-rules.txt) - Renderer renderer = (Renderer) constructor.newInstance(context); + Renderer renderer = + (Renderer) constructor.newInstance(context, eventHandler, eventListener, audioSink); out.add(extensionRendererIndex++, renderer); Log.i(TAG, "Loaded MidiRenderer."); } catch (ClassNotFoundException e) {