From c9ec7beb928591c00c106eea8bd9401f769f27db Mon Sep 17 00:00:00 2001 From: olly Date: Fri, 8 Jul 2016 08:23:30 -0700 Subject: [PATCH] Add streamType/capabilities for extension audio renderers ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=126913487 --- .../ext/ffmpeg/FfmpegAudioTrackRenderer.java | 21 +++++++++++++++++++ .../ext/flac/LibflacAudioTrackRenderer.java | 17 +++++++++++++++ .../ext/opus/LibopusAudioTrackRenderer.java | 16 ++++++++++++++ .../android/exoplayer2/audio/AudioTrack.java | 8 ------- .../extensions/AudioDecoderTrackRenderer.java | 20 ++++++++++++++++-- 5 files changed, 72 insertions(+), 10 deletions(-) diff --git a/extensions/ffmpeg/src/main/java/com/google/android/exoplayer2/ext/ffmpeg/FfmpegAudioTrackRenderer.java b/extensions/ffmpeg/src/main/java/com/google/android/exoplayer2/ext/ffmpeg/FfmpegAudioTrackRenderer.java index 66e1eef1cc..d9f6d6a9b8 100644 --- a/extensions/ffmpeg/src/main/java/com/google/android/exoplayer2/ext/ffmpeg/FfmpegAudioTrackRenderer.java +++ b/extensions/ffmpeg/src/main/java/com/google/android/exoplayer2/ext/ffmpeg/FfmpegAudioTrackRenderer.java @@ -18,6 +18,8 @@ package com.google.android.exoplayer2.ext.ffmpeg; import com.google.android.exoplayer2.AudioTrackRendererEventListener; import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.Format; +import com.google.android.exoplayer2.audio.AudioCapabilities; +import com.google.android.exoplayer2.audio.AudioTrack; import com.google.android.exoplayer2.extensions.AudioDecoderTrackRenderer; import com.google.android.exoplayer2.util.MimeTypes; @@ -37,11 +39,30 @@ public final class FfmpegAudioTrackRenderer extends AudioDecoderTrackRenderer { this(null, null); } + /** + * @param eventHandler A handler to use when delivering events to {@code eventListener}. May be + * null if delivery of events is not required. + * @param eventListener A listener of events. May be null if delivery of events is not required. + */ public FfmpegAudioTrackRenderer(Handler eventHandler, AudioTrackRendererEventListener eventListener) { super(eventHandler, eventListener); } + /** + * @param eventHandler A handler to use when delivering events to {@code eventListener}. May be + * null if delivery of events is not required. + * @param eventListener A listener of events. May be null if delivery of events is not required. + * @param audioCapabilities The audio capabilities for playback on this device. May be null if the + * default capabilities (no encoded audio passthrough support) should be assumed. + * @param streamType The type of audio stream for the {@link AudioTrack}. + */ + public FfmpegAudioTrackRenderer(Handler eventHandler, + AudioTrackRendererEventListener eventListener, AudioCapabilities audioCapabilities, + int streamType) { + super(eventHandler, eventListener, audioCapabilities, streamType); + } + @Override protected int supportsFormat(Format format) { if (!FfmpegDecoder.IS_AVAILABLE) { diff --git a/extensions/flac/src/main/java/com/google/android/exoplayer2/ext/flac/LibflacAudioTrackRenderer.java b/extensions/flac/src/main/java/com/google/android/exoplayer2/ext/flac/LibflacAudioTrackRenderer.java index f75560d933..de2ff7690d 100644 --- a/extensions/flac/src/main/java/com/google/android/exoplayer2/ext/flac/LibflacAudioTrackRenderer.java +++ b/extensions/flac/src/main/java/com/google/android/exoplayer2/ext/flac/LibflacAudioTrackRenderer.java @@ -17,6 +17,8 @@ package com.google.android.exoplayer2.ext.flac; import com.google.android.exoplayer2.AudioTrackRendererEventListener; import com.google.android.exoplayer2.Format; +import com.google.android.exoplayer2.audio.AudioCapabilities; +import com.google.android.exoplayer2.audio.AudioTrack; import com.google.android.exoplayer2.extensions.AudioDecoderTrackRenderer; import com.google.android.exoplayer2.util.MimeTypes; @@ -49,6 +51,21 @@ public class LibflacAudioTrackRenderer extends AudioDecoderTrackRenderer { AudioTrackRendererEventListener eventListener) { super(eventHandler, eventListener); } + + /** + * @param eventHandler A handler to use when delivering events to {@code eventListener}. May be + * null if delivery of events is not required. + * @param eventListener A listener of events. May be null if delivery of events is not required. + * @param audioCapabilities The audio capabilities for playback on this device. May be null if the + * default capabilities (no encoded audio passthrough support) should be assumed. + * @param streamType The type of audio stream for the {@link AudioTrack}. + */ + public LibflacAudioTrackRenderer(Handler eventHandler, + AudioTrackRendererEventListener eventListener, AudioCapabilities audioCapabilities, + int streamType) { + super(eventHandler, eventListener, audioCapabilities, streamType); + } + @Override protected int supportsFormat(Format format) { return isLibflacAvailable() && MimeTypes.AUDIO_FLAC.equalsIgnoreCase(format.sampleMimeType) diff --git a/extensions/opus/src/main/java/com/google/android/exoplayer2/ext/opus/LibopusAudioTrackRenderer.java b/extensions/opus/src/main/java/com/google/android/exoplayer2/ext/opus/LibopusAudioTrackRenderer.java index 7b5cb592be..44af0f49a4 100644 --- a/extensions/opus/src/main/java/com/google/android/exoplayer2/ext/opus/LibopusAudioTrackRenderer.java +++ b/extensions/opus/src/main/java/com/google/android/exoplayer2/ext/opus/LibopusAudioTrackRenderer.java @@ -17,6 +17,8 @@ package com.google.android.exoplayer2.ext.opus; import com.google.android.exoplayer2.AudioTrackRendererEventListener; import com.google.android.exoplayer2.Format; +import com.google.android.exoplayer2.audio.AudioCapabilities; +import com.google.android.exoplayer2.audio.AudioTrack; import com.google.android.exoplayer2.extensions.AudioDecoderTrackRenderer; import com.google.android.exoplayer2.util.MimeTypes; @@ -58,6 +60,20 @@ public final class LibopusAudioTrackRenderer extends AudioDecoderTrackRenderer { super(eventHandler, eventListener); } + /** + * @param eventHandler A handler to use when delivering events to {@code eventListener}. May be + * null if delivery of events is not required. + * @param eventListener A listener of events. May be null if delivery of events is not required. + * @param audioCapabilities The audio capabilities for playback on this device. May be null if the + * default capabilities (no encoded audio passthrough support) should be assumed. + * @param streamType The type of audio stream for the {@link AudioTrack}. + */ + public LibopusAudioTrackRenderer(Handler eventHandler, + AudioTrackRendererEventListener eventListener, AudioCapabilities audioCapabilities, + int streamType) { + super(eventHandler, eventListener, audioCapabilities, streamType); + } + @Override protected int supportsFormat(Format format) { return isLibopusAvailable() && MimeTypes.AUDIO_OPUS.equalsIgnoreCase(format.sampleMimeType) diff --git a/library/src/main/java/com/google/android/exoplayer2/audio/AudioTrack.java b/library/src/main/java/com/google/android/exoplayer2/audio/AudioTrack.java index e8edc06fbb..1f0bc2aa35 100644 --- a/library/src/main/java/com/google/android/exoplayer2/audio/AudioTrack.java +++ b/library/src/main/java/com/google/android/exoplayer2/audio/AudioTrack.java @@ -24,7 +24,6 @@ import com.google.android.exoplayer2.util.Util; import android.annotation.TargetApi; import android.media.AudioFormat; -import android.media.AudioManager; import android.media.AudioTimestamp; import android.media.PlaybackParams; import android.os.ConditionVariable; @@ -230,13 +229,6 @@ public final class AudioTrack { private ByteBuffer resampledBuffer; private boolean useResampledBuffer; - /** - * Creates an audio track with default audio capabilities (no encoded audio passthrough support). - */ - public AudioTrack() { - this(null, AudioManager.STREAM_MUSIC); - } - /** * Creates an audio track using the specified audio capabilities and stream type. * diff --git a/library/src/main/java/com/google/android/exoplayer2/extensions/AudioDecoderTrackRenderer.java b/library/src/main/java/com/google/android/exoplayer2/extensions/AudioDecoderTrackRenderer.java index 2486a62bc3..1bfc7a0286 100644 --- a/library/src/main/java/com/google/android/exoplayer2/extensions/AudioDecoderTrackRenderer.java +++ b/library/src/main/java/com/google/android/exoplayer2/extensions/AudioDecoderTrackRenderer.java @@ -26,10 +26,12 @@ import com.google.android.exoplayer2.FormatHolder; import com.google.android.exoplayer2.MediaClock; import com.google.android.exoplayer2.TrackRenderer; import com.google.android.exoplayer2.TrackStream; +import com.google.android.exoplayer2.audio.AudioCapabilities; import com.google.android.exoplayer2.audio.AudioTrack; import com.google.android.exoplayer2.util.MimeTypes; import com.google.android.exoplayer2.util.TraceUtil; +import android.media.AudioManager; import android.media.PlaybackParams; import android.os.Handler; import android.os.SystemClock; @@ -45,7 +47,7 @@ public abstract class AudioDecoderTrackRenderer extends TrackRenderer implements private CodecCounters codecCounters; private Format inputFormat; private SimpleDecoder decoder; + ? extends AudioDecoderException> decoder; private DecoderInputBuffer inputBuffer; private SimpleOutputBuffer outputBuffer; @@ -71,9 +73,23 @@ public abstract class AudioDecoderTrackRenderer extends TrackRenderer implements */ public AudioDecoderTrackRenderer(Handler eventHandler, AudioTrackRendererEventListener eventListener) { + this (eventHandler, eventListener, null, AudioManager.STREAM_MUSIC); + } + + /** + * @param eventHandler A handler to use when delivering events to {@code eventListener}. May be + * null if delivery of events is not required. + * @param eventListener A listener of events. May be null if delivery of events is not required. + * @param audioCapabilities The audio capabilities for playback on this device. May be null if the + * default capabilities (no encoded audio passthrough support) should be assumed. + * @param streamType The type of audio stream for the {@link AudioTrack}. + */ + public AudioDecoderTrackRenderer(Handler eventHandler, + AudioTrackRendererEventListener eventListener, AudioCapabilities audioCapabilities, + int streamType) { eventDispatcher = new EventDispatcher(eventHandler, eventListener); audioSessionId = AudioTrack.SESSION_ID_NOT_SET; - audioTrack = new AudioTrack(); + audioTrack = new AudioTrack(audioCapabilities, streamType); formatHolder = new FormatHolder(); }