From 45bc4a0374e14c9f3231f95ca6c58c131a8d2edf Mon Sep 17 00:00:00 2001 From: andrewlewis Date: Fri, 2 Dec 2016 01:56:10 -0800 Subject: [PATCH] Pass player and isTopLevelSource to MediaSource.prepareSource. These additions are useful for sources that need to track the playback position and control playback. ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=140828310 --- .../google/android/exoplayer2/ExoPlayerTest.java | 2 +- .../google/android/exoplayer2/ExoPlayerImpl.java | 2 +- .../android/exoplayer2/ExoPlayerImplInternal.java | 6 ++++-- .../extractor/mkv/MatroskaExtractor.java | 10 ++-------- .../source/ConcatenatingMediaSource.java | 5 +++-- .../exoplayer2/source/ExtractorMediaSource.java | 3 ++- .../exoplayer2/source/LoopingMediaSource.java | 5 +++-- .../android/exoplayer2/source/MediaSource.java | 8 +++++++- .../exoplayer2/source/MergingMediaSource.java | 5 +++-- .../source/SingleSampleMediaSource.java | 3 ++- .../exoplayer2/source/dash/DashMediaSource.java | 5 +++-- .../exoplayer2/source/hls/HlsMediaSource.java | 5 +++-- .../source/smoothstreaming/SsMediaSource.java | 5 +++-- .../exoplayer2/ui/SimpleExoPlayerView.java | 15 --------------- 14 files changed, 37 insertions(+), 42 deletions(-) diff --git a/library/src/androidTest/java/com/google/android/exoplayer2/ExoPlayerTest.java b/library/src/androidTest/java/com/google/android/exoplayer2/ExoPlayerTest.java index cec8fb606e..be18d64195 100644 --- a/library/src/androidTest/java/com/google/android/exoplayer2/ExoPlayerTest.java +++ b/library/src/androidTest/java/com/google/android/exoplayer2/ExoPlayerTest.java @@ -208,7 +208,7 @@ public final class ExoPlayerTest extends TestCase { } @Override - public void prepareSource(Listener listener) { + public void prepareSource(ExoPlayer player, boolean isTopLevelSource, Listener listener) { assertFalse(preparedSource); preparedSource = true; listener.onSourceInfoRefreshed(timeline, manifest); diff --git a/library/src/main/java/com/google/android/exoplayer2/ExoPlayerImpl.java b/library/src/main/java/com/google/android/exoplayer2/ExoPlayerImpl.java index af4416e4a1..b203bc8fc6 100644 --- a/library/src/main/java/com/google/android/exoplayer2/ExoPlayerImpl.java +++ b/library/src/main/java/com/google/android/exoplayer2/ExoPlayerImpl.java @@ -95,7 +95,7 @@ import java.util.concurrent.CopyOnWriteArraySet; }; playbackInfo = new ExoPlayerImplInternal.PlaybackInfo(0, 0); internalPlayer = new ExoPlayerImplInternal(renderers, trackSelector, loadControl, playWhenReady, - eventHandler, playbackInfo); + eventHandler, playbackInfo, this); } @Override diff --git a/library/src/main/java/com/google/android/exoplayer2/ExoPlayerImplInternal.java b/library/src/main/java/com/google/android/exoplayer2/ExoPlayerImplInternal.java index 1c82130131..c6a92512b2 100644 --- a/library/src/main/java/com/google/android/exoplayer2/ExoPlayerImplInternal.java +++ b/library/src/main/java/com/google/android/exoplayer2/ExoPlayerImplInternal.java @@ -145,6 +145,7 @@ import java.io.IOException; private final Handler handler; private final HandlerThread internalPlaybackThread; private final Handler eventHandler; + private final ExoPlayer player; private final Timeline.Window window; private final Timeline.Period period; @@ -174,7 +175,7 @@ import java.io.IOException; public ExoPlayerImplInternal(Renderer[] renderers, TrackSelector trackSelector, LoadControl loadControl, boolean playWhenReady, Handler eventHandler, - PlaybackInfo playbackInfo) { + PlaybackInfo playbackInfo, ExoPlayer player) { this.renderers = renderers; this.trackSelector = trackSelector; this.loadControl = loadControl; @@ -182,6 +183,7 @@ import java.io.IOException; this.eventHandler = eventHandler; this.state = ExoPlayer.STATE_IDLE; this.playbackInfo = playbackInfo; + this.player = player; rendererCapabilities = new RendererCapabilities[renderers.length]; for (int i = 0; i < renderers.length; i++) { @@ -382,7 +384,7 @@ import java.io.IOException; playbackInfo = new PlaybackInfo(0, C.TIME_UNSET); } this.mediaSource = mediaSource; - mediaSource.prepareSource(this); + mediaSource.prepareSource(player, true, this); setState(ExoPlayer.STATE_BUFFERING); handler.sendEmptyMessage(MSG_DO_SOME_WORK); } diff --git a/library/src/main/java/com/google/android/exoplayer2/extractor/mkv/MatroskaExtractor.java b/library/src/main/java/com/google/android/exoplayer2/extractor/mkv/MatroskaExtractor.java index c1a2599a12..301392b2d2 100644 --- a/library/src/main/java/com/google/android/exoplayer2/extractor/mkv/MatroskaExtractor.java +++ b/library/src/main/java/com/google/android/exoplayer2/extractor/mkv/MatroskaExtractor.java @@ -26,7 +26,6 @@ import com.google.android.exoplayer2.extractor.Extractor; import com.google.android.exoplayer2.extractor.ExtractorInput; import com.google.android.exoplayer2.extractor.ExtractorOutput; import com.google.android.exoplayer2.extractor.ExtractorsFactory; -import com.google.android.exoplayer2.extractor.MpegAudioHeader; import com.google.android.exoplayer2.extractor.PositionHolder; import com.google.android.exoplayer2.extractor.SeekMap; import com.google.android.exoplayer2.extractor.TrackOutput; @@ -85,7 +84,6 @@ public final class MatroskaExtractor implements Extractor { private static final String CODEC_ID_VORBIS = "A_VORBIS"; private static final String CODEC_ID_OPUS = "A_OPUS"; private static final String CODEC_ID_AAC = "A_AAC"; - private static final String CODEC_ID_MP2 = "A_MPEG/L2"; private static final String CODEC_ID_MP3 = "A_MPEG/L3"; private static final String CODEC_ID_AC3 = "A_AC3"; private static final String CODEC_ID_E_AC3 = "A_EAC3"; @@ -102,6 +100,7 @@ public final class MatroskaExtractor implements Extractor { private static final int VORBIS_MAX_INPUT_SIZE = 8192; private static final int OPUS_MAX_INPUT_SIZE = 5760; + private static final int MP3_MAX_INPUT_SIZE = 4096; private static final int ENCRYPTION_IV_SIZE = 8; private static final int TRACK_TYPE_AUDIO = 2; @@ -1219,7 +1218,6 @@ public final class MatroskaExtractor implements Extractor { || CODEC_ID_OPUS.equals(codecId) || CODEC_ID_VORBIS.equals(codecId) || CODEC_ID_AAC.equals(codecId) - || CODEC_ID_MP2.equals(codecId) || CODEC_ID_MP3.equals(codecId) || CODEC_ID_AC3.equals(codecId) || CODEC_ID_E_AC3.equals(codecId) @@ -1405,13 +1403,9 @@ public final class MatroskaExtractor implements Extractor { mimeType = MimeTypes.AUDIO_AAC; initializationData = Collections.singletonList(codecPrivate); break; - case CODEC_ID_MP2: - mimeType = MimeTypes.AUDIO_MPEG_L2; - maxInputSize = MpegAudioHeader.MAX_FRAME_SIZE_BYTES; - break; case CODEC_ID_MP3: mimeType = MimeTypes.AUDIO_MPEG; - maxInputSize = MpegAudioHeader.MAX_FRAME_SIZE_BYTES; + maxInputSize = MP3_MAX_INPUT_SIZE; break; case CODEC_ID_AC3: mimeType = MimeTypes.AUDIO_AC3; diff --git a/library/src/main/java/com/google/android/exoplayer2/source/ConcatenatingMediaSource.java b/library/src/main/java/com/google/android/exoplayer2/source/ConcatenatingMediaSource.java index 678ae8b06c..68552c99ed 100644 --- a/library/src/main/java/com/google/android/exoplayer2/source/ConcatenatingMediaSource.java +++ b/library/src/main/java/com/google/android/exoplayer2/source/ConcatenatingMediaSource.java @@ -17,6 +17,7 @@ package com.google.android.exoplayer2.source; import android.util.Pair; import com.google.android.exoplayer2.C; +import com.google.android.exoplayer2.ExoPlayer; import com.google.android.exoplayer2.Timeline; import com.google.android.exoplayer2.upstream.Allocator; import com.google.android.exoplayer2.util.Util; @@ -53,12 +54,12 @@ public final class ConcatenatingMediaSource implements MediaSource { } @Override - public void prepareSource(Listener listener) { + public void prepareSource(ExoPlayer player, boolean isTopLevelSource, Listener listener) { this.listener = listener; for (int i = 0; i < mediaSources.length; i++) { if (!duplicateFlags[i]) { final int index = i; - mediaSources[i].prepareSource(new Listener() { + mediaSources[i].prepareSource(player, false, new Listener() { @Override public void onSourceInfoRefreshed(Timeline timeline, Object manifest) { handleSourceInfoRefreshed(index, timeline, manifest); diff --git a/library/src/main/java/com/google/android/exoplayer2/source/ExtractorMediaSource.java b/library/src/main/java/com/google/android/exoplayer2/source/ExtractorMediaSource.java index bf795241bc..559d241598 100644 --- a/library/src/main/java/com/google/android/exoplayer2/source/ExtractorMediaSource.java +++ b/library/src/main/java/com/google/android/exoplayer2/source/ExtractorMediaSource.java @@ -18,6 +18,7 @@ package com.google.android.exoplayer2.source; import android.net.Uri; import android.os.Handler; import com.google.android.exoplayer2.C; +import com.google.android.exoplayer2.ExoPlayer; import com.google.android.exoplayer2.ParserException; import com.google.android.exoplayer2.Timeline; import com.google.android.exoplayer2.extractor.DefaultExtractorsFactory; @@ -135,7 +136,7 @@ public final class ExtractorMediaSource implements MediaSource, MediaSource.List } @Override - public void prepareSource(MediaSource.Listener listener) { + public void prepareSource(ExoPlayer player, boolean isTopLevelSource, Listener listener) { sourceListener = listener; timeline = new SinglePeriodTimeline(C.TIME_UNSET, false); listener.onSourceInfoRefreshed(timeline, null); diff --git a/library/src/main/java/com/google/android/exoplayer2/source/LoopingMediaSource.java b/library/src/main/java/com/google/android/exoplayer2/source/LoopingMediaSource.java index 938051843d..d893d60262 100644 --- a/library/src/main/java/com/google/android/exoplayer2/source/LoopingMediaSource.java +++ b/library/src/main/java/com/google/android/exoplayer2/source/LoopingMediaSource.java @@ -18,6 +18,7 @@ package com.google.android.exoplayer2.source; import android.util.Log; import android.util.Pair; import com.google.android.exoplayer2.C; +import com.google.android.exoplayer2.ExoPlayer; import com.google.android.exoplayer2.Timeline; import com.google.android.exoplayer2.upstream.Allocator; import com.google.android.exoplayer2.util.Assertions; @@ -59,8 +60,8 @@ public final class LoopingMediaSource implements MediaSource { } @Override - public void prepareSource(final Listener listener) { - childSource.prepareSource(new Listener() { + public void prepareSource(ExoPlayer player, boolean isTopLevelSource, final Listener listener) { + childSource.prepareSource(player, false, new Listener() { @Override public void onSourceInfoRefreshed(Timeline timeline, Object manifest) { childPeriodCount = timeline.getPeriodCount(); diff --git a/library/src/main/java/com/google/android/exoplayer2/source/MediaSource.java b/library/src/main/java/com/google/android/exoplayer2/source/MediaSource.java index 29c7dd63a0..f013e790f7 100644 --- a/library/src/main/java/com/google/android/exoplayer2/source/MediaSource.java +++ b/library/src/main/java/com/google/android/exoplayer2/source/MediaSource.java @@ -15,6 +15,7 @@ */ package com.google.android.exoplayer2.source; +import com.google.android.exoplayer2.ExoPlayer; import com.google.android.exoplayer2.Timeline; import com.google.android.exoplayer2.upstream.Allocator; import java.io.IOException; @@ -42,9 +43,14 @@ public interface MediaSource { /** * Starts preparation of the source. * + * @param player The player for which this source is being prepared. + * @param isTopLevelSource Whether this source has been passed directly to + * {@link ExoPlayer#prepare(MediaSource)} or + * {@link ExoPlayer#prepare(MediaSource, boolean, boolean)}. If {@code false}, this source is + * being prepared by another source (e.g. {@link ConcatenatingMediaSource}) for composition. * @param listener The listener for source events. */ - void prepareSource(Listener listener); + void prepareSource(ExoPlayer player, boolean isTopLevelSource, Listener listener); /** * Throws any pending error encountered while loading or refreshing source information. diff --git a/library/src/main/java/com/google/android/exoplayer2/source/MergingMediaSource.java b/library/src/main/java/com/google/android/exoplayer2/source/MergingMediaSource.java index 7d5f78c1cd..166e7a281b 100644 --- a/library/src/main/java/com/google/android/exoplayer2/source/MergingMediaSource.java +++ b/library/src/main/java/com/google/android/exoplayer2/source/MergingMediaSource.java @@ -16,6 +16,7 @@ package com.google.android.exoplayer2.source; import android.support.annotation.IntDef; +import com.google.android.exoplayer2.ExoPlayer; import com.google.android.exoplayer2.Timeline; import com.google.android.exoplayer2.upstream.Allocator; import java.io.IOException; @@ -92,11 +93,11 @@ public final class MergingMediaSource implements MediaSource { } @Override - public void prepareSource(final Listener listener) { + public void prepareSource(ExoPlayer player, boolean isTopLevelSource, final Listener listener) { this.listener = listener; for (int i = 0; i < mediaSources.length; i++) { final int sourceIndex = i; - mediaSources[sourceIndex].prepareSource(new Listener() { + mediaSources[sourceIndex].prepareSource(player, false, new Listener() { @Override public void onSourceInfoRefreshed(Timeline timeline, Object manifest) { handleSourceInfoRefreshed(sourceIndex, timeline, manifest); diff --git a/library/src/main/java/com/google/android/exoplayer2/source/SingleSampleMediaSource.java b/library/src/main/java/com/google/android/exoplayer2/source/SingleSampleMediaSource.java index 385bebfb88..f6ee84a6f4 100644 --- a/library/src/main/java/com/google/android/exoplayer2/source/SingleSampleMediaSource.java +++ b/library/src/main/java/com/google/android/exoplayer2/source/SingleSampleMediaSource.java @@ -17,6 +17,7 @@ package com.google.android.exoplayer2.source; import android.net.Uri; import android.os.Handler; +import com.google.android.exoplayer2.ExoPlayer; import com.google.android.exoplayer2.Format; import com.google.android.exoplayer2.Timeline; import com.google.android.exoplayer2.upstream.Allocator; @@ -84,7 +85,7 @@ public final class SingleSampleMediaSource implements MediaSource { // MediaSource implementation. @Override - public void prepareSource(MediaSource.Listener listener) { + public void prepareSource(ExoPlayer player, boolean isTopLevelSource, Listener listener) { listener.onSourceInfoRefreshed(timeline, null); } diff --git a/library/src/main/java/com/google/android/exoplayer2/source/dash/DashMediaSource.java b/library/src/main/java/com/google/android/exoplayer2/source/dash/DashMediaSource.java index 631a44f859..99845c057e 100644 --- a/library/src/main/java/com/google/android/exoplayer2/source/dash/DashMediaSource.java +++ b/library/src/main/java/com/google/android/exoplayer2/source/dash/DashMediaSource.java @@ -21,6 +21,7 @@ import android.os.SystemClock; import android.util.Log; import android.util.SparseArray; import com.google.android.exoplayer2.C; +import com.google.android.exoplayer2.ExoPlayer; import com.google.android.exoplayer2.ParserException; import com.google.android.exoplayer2.Timeline; import com.google.android.exoplayer2.source.AdaptiveMediaSourceEventListener; @@ -94,7 +95,7 @@ public final class DashMediaSource implements MediaSource { private final Runnable refreshManifestRunnable; private final Runnable simulateManifestRefreshRunnable; - private MediaSource.Listener sourceListener; + private Listener sourceListener; private DataSource dataSource; private Loader loader; private LoaderErrorThrower loaderErrorThrower; @@ -258,7 +259,7 @@ public final class DashMediaSource implements MediaSource { // MediaSource implementation. @Override - public void prepareSource(MediaSource.Listener listener) { + public void prepareSource(ExoPlayer player, boolean isTopLevelSource, Listener listener) { sourceListener = listener; if (sideloadedManifest) { loaderErrorThrower = new LoaderErrorThrower.Dummy(); diff --git a/library/src/main/java/com/google/android/exoplayer2/source/hls/HlsMediaSource.java b/library/src/main/java/com/google/android/exoplayer2/source/hls/HlsMediaSource.java index a5ae09d2fc..4833e4a08d 100644 --- a/library/src/main/java/com/google/android/exoplayer2/source/hls/HlsMediaSource.java +++ b/library/src/main/java/com/google/android/exoplayer2/source/hls/HlsMediaSource.java @@ -18,6 +18,7 @@ package com.google.android.exoplayer2.source.hls; import android.net.Uri; import android.os.Handler; import com.google.android.exoplayer2.C; +import com.google.android.exoplayer2.ExoPlayer; import com.google.android.exoplayer2.source.AdaptiveMediaSourceEventListener; import com.google.android.exoplayer2.source.AdaptiveMediaSourceEventListener.EventDispatcher; import com.google.android.exoplayer2.source.MediaPeriod; @@ -48,7 +49,7 @@ public final class HlsMediaSource implements MediaSource, private final EventDispatcher eventDispatcher; private HlsPlaylistTracker playlistTracker; - private MediaSource.Listener sourceListener; + private Listener sourceListener; public HlsMediaSource(Uri manifestUri, DataSource.Factory dataSourceFactory, Handler eventHandler, AdaptiveMediaSourceEventListener eventListener) { @@ -66,7 +67,7 @@ public final class HlsMediaSource implements MediaSource, } @Override - public void prepareSource(MediaSource.Listener listener) { + public void prepareSource(ExoPlayer player, boolean isTopLevelSource, Listener listener) { Assertions.checkState(playlistTracker == null); playlistTracker = new HlsPlaylistTracker(manifestUri, dataSourceFactory, eventDispatcher, minLoadableRetryCount, this); diff --git a/library/src/main/java/com/google/android/exoplayer2/source/smoothstreaming/SsMediaSource.java b/library/src/main/java/com/google/android/exoplayer2/source/smoothstreaming/SsMediaSource.java index 69f32be193..0125d45525 100644 --- a/library/src/main/java/com/google/android/exoplayer2/source/smoothstreaming/SsMediaSource.java +++ b/library/src/main/java/com/google/android/exoplayer2/source/smoothstreaming/SsMediaSource.java @@ -19,6 +19,7 @@ import android.net.Uri; import android.os.Handler; import android.os.SystemClock; import com.google.android.exoplayer2.C; +import com.google.android.exoplayer2.ExoPlayer; import com.google.android.exoplayer2.ParserException; import com.google.android.exoplayer2.Timeline; import com.google.android.exoplayer2.source.AdaptiveMediaSourceEventListener; @@ -73,7 +74,7 @@ public final class SsMediaSource implements MediaSource, private final SsManifestParser manifestParser; private final ArrayList mediaPeriods; - private MediaSource.Listener sourceListener; + private Listener sourceListener; private DataSource manifestDataSource; private Loader manifestLoader; private LoaderErrorThrower manifestLoaderErrorThrower; @@ -199,7 +200,7 @@ public final class SsMediaSource implements MediaSource, // MediaSource implementation. @Override - public void prepareSource(MediaSource.Listener listener) { + public void prepareSource(ExoPlayer player, boolean isTopLevelSource, Listener listener) { sourceListener = listener; if (manifest != null) { manifestLoaderErrorThrower = new LoaderErrorThrower.Dummy(); diff --git a/library/src/main/java/com/google/android/exoplayer2/ui/SimpleExoPlayerView.java b/library/src/main/java/com/google/android/exoplayer2/ui/SimpleExoPlayerView.java index bceebfd97e..4a138ba232 100644 --- a/library/src/main/java/com/google/android/exoplayer2/ui/SimpleExoPlayerView.java +++ b/library/src/main/java/com/google/android/exoplayer2/ui/SimpleExoPlayerView.java @@ -472,16 +472,6 @@ public final class SimpleExoPlayerView extends FrameLayout { return overlayFrameLayout; } - /** - * Gets the {@link SubtitleView}. - * - * @return The {@link SubtitleView}, or {@code null} if the layout has been customized and the - * subtitle view is not present. - */ - public SubtitleView getSubtitleView() { - return subtitleView; - } - @Override public boolean onTouchEvent(MotionEvent ev) { if (!useController || player == null || ev.getActionMasked() != MotionEvent.ACTION_DOWN) { @@ -504,11 +494,6 @@ public final class SimpleExoPlayerView extends FrameLayout { return true; } - @Override - public boolean dispatchKeyEvent(KeyEvent event) { - return useController ? controller.dispatchKeyEvent(event) : super.dispatchKeyEvent(event); - } - private void maybeShowController(boolean isForced) { if (!useController || player == null) { return;