Merge pull request #2180 from nift4:main

PiperOrigin-RevId: 731276598
This commit is contained in:
Copybara-Service 2025-02-26 05:27:44 -08:00
commit ac1cf206c8
4 changed files with 29 additions and 4 deletions

View File

@ -62,6 +62,8 @@
* RTSP Extension: * RTSP Extension:
* Decoder Extensions (FFmpeg, VP9, AV1, etc.): * Decoder Extensions (FFmpeg, VP9, AV1, etc.):
* MIDI extension: * MIDI extension:
* Plumb custom `AudioSink` and `AudioRendererEventListener` instances into
`MidiRenderer`.
* Leanback extension: * Leanback extension:
* Cast Extension: * Cast Extension:
* Bump the `play-services-cast-framework` dependency to 21.5.0 to fix a * Bump the `play-services-cast-framework` dependency to 21.5.0 to fix a

View File

@ -16,12 +16,15 @@
package androidx.media3.decoder.midi; package androidx.media3.decoder.midi;
import android.content.Context; import android.content.Context;
import android.os.Handler;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.media3.common.C; import androidx.media3.common.C;
import androidx.media3.common.Format; import androidx.media3.common.Format;
import androidx.media3.common.MimeTypes; import androidx.media3.common.MimeTypes;
import androidx.media3.common.util.UnstableApi; import androidx.media3.common.util.UnstableApi;
import androidx.media3.decoder.CryptoConfig; import androidx.media3.decoder.CryptoConfig;
import androidx.media3.exoplayer.audio.AudioRendererEventListener;
import androidx.media3.exoplayer.audio.AudioSink;
import androidx.media3.exoplayer.audio.DecoderAudioRenderer; import androidx.media3.exoplayer.audio.DecoderAudioRenderer;
/** Decodes and renders MIDI audio. */ /** Decodes and renders MIDI audio. */
@ -30,11 +33,25 @@ public final class MidiRenderer extends DecoderAudioRenderer<MidiDecoder> {
private final Context context; private final Context context;
/** Creates the renderer instance. */ /**
* @deprecated Use {@link #MidiRenderer(Context, Handler, AudioRendererEventListener, AudioSink)}
* instead.
*/
@Deprecated
public MidiRenderer(Context context) { public MidiRenderer(Context context) {
this.context = context.getApplicationContext(); 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 @Override
public String getName() { public String getName() {
return "MidiRenderer"; return "MidiRenderer";

View File

@ -31,7 +31,7 @@
} }
-dontnote androidx.media3.decoder.midi.MidiRenderer -dontnote androidx.media3.decoder.midi.MidiRenderer
-keepclassmembers class androidx.media3.decoder.midi.MidiRenderer { -keepclassmembers class androidx.media3.decoder.midi.MidiRenderer {
<init>(android.content.Context); <init>(android.content.Context, android.os.Handler, androidx.media3.exoplayer.audio.AudioRendererEventListener, androidx.media3.exoplayer.audio.AudioSink);
} }
-dontnote androidx.media3.decoder.mpegh.MpeghAudioRenderer -dontnote androidx.media3.decoder.mpegh.MpeghAudioRenderer
-keepclassmembers class androidx.media3.decoder.mpegh.MpeghAudioRenderer { -keepclassmembers class androidx.media3.decoder.mpegh.MpeghAudioRenderer {

View File

@ -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. // Full class names used for constructor args so the LINT rule triggers if any of them move.
// LINT.IfChange // LINT.IfChange
Class<?> clazz = Class.forName("androidx.media3.decoder.midi.MidiRenderer"); 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) // LINT.ThenChange(../../../../../../proguard-rules.txt)
Renderer renderer = (Renderer) constructor.newInstance(context); Renderer renderer =
(Renderer) constructor.newInstance(context, eventHandler, eventListener, audioSink);
out.add(extensionRendererIndex++, renderer); out.add(extensionRendererIndex++, renderer);
Log.i(TAG, "Loaded MidiRenderer."); Log.i(TAG, "Loaded MidiRenderer.");
} catch (ClassNotFoundException e) { } catch (ClassNotFoundException e) {