mirror of
https://github.com/androidx/media.git
synced 2025-04-30 06:46:50 +08:00
commit
ac1cf206c8
@ -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
|
||||||
|
@ -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";
|
||||||
|
@ -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 {
|
||||||
|
@ -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) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user