From 0a854d6b84417f86fdb59375544ef377ba573b86 Mon Sep 17 00:00:00 2001 From: olly Date: Fri, 20 Sep 2019 15:11:51 +0100 Subject: [PATCH] Rollback of https://github.com/google/ExoPlayer/commit/dd7223df10e1e72d65a628404a4e851dad44148e *** Original commit *** Refactor HlsSampleStreamWrapper#track() to clarify the return paths I found the original implementation quite hard to follow, and I believe this is functionally identical. *** PiperOrigin-RevId: 270263186 --- .../source/hls/HlsSampleStreamWrapper.java | 70 ++++++++++--------- 1 file changed, 36 insertions(+), 34 deletions(-) diff --git a/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsSampleStreamWrapper.java b/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsSampleStreamWrapper.java index 571e5001e4..e618d7f134 100644 --- a/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsSampleStreamWrapper.java +++ b/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsSampleStreamWrapper.java @@ -127,7 +127,7 @@ import java.util.Set; private Format downstreamTrackFormat; private boolean released; - // Tracks are complicated in HLS. See documentation of buildTracksFromSampleStreams for details. + // Tracks are complicated in HLS. See documentation of buildTracks for details. // Indexed by track (as exposed by this source). private TrackGroupArray trackGroups; private Set optionalTrackGroups; @@ -815,15 +815,42 @@ import java.util.Set; int trackCount = sampleQueues.length; // Audio and video tracks are handled manually to ignore ids. - @Nullable TrackOutput mappedTrack = maybeMapAndGetSampleQueue(id, type); - if (mappedTrack != null) { - return mappedTrack; + if (type == C.TRACK_TYPE_AUDIO) { + if (audioSampleQueueIndex != C.INDEX_UNSET) { + if (audioSampleQueueMappingDone) { + return sampleQueueTrackIds[audioSampleQueueIndex] == id + ? sampleQueues[audioSampleQueueIndex] + : createDummyTrackOutput(id, type); + } + audioSampleQueueMappingDone = true; + sampleQueueTrackIds[audioSampleQueueIndex] = id; + return sampleQueues[audioSampleQueueIndex]; + } else if (tracksEnded) { + return createDummyTrackOutput(id, type); + } + } else if (type == C.TRACK_TYPE_VIDEO) { + if (videoSampleQueueIndex != C.INDEX_UNSET) { + if (videoSampleQueueMappingDone) { + return sampleQueueTrackIds[videoSampleQueueIndex] == id + ? sampleQueues[videoSampleQueueIndex] + : createDummyTrackOutput(id, type); + } + videoSampleQueueMappingDone = true; + sampleQueueTrackIds[videoSampleQueueIndex] = id; + return sampleQueues[videoSampleQueueIndex]; + } else if (tracksEnded) { + return createDummyTrackOutput(id, type); + } + } else /* sparse track */ { + for (int i = 0; i < trackCount; i++) { + if (sampleQueueTrackIds[i] == id) { + return sampleQueues[i]; + } + } + if (tracksEnded) { + return createDummyTrackOutput(id, type); + } } - if (tracksEnded) { - return createDummyTrackOutput(id, type); - } - - // The relevant SampleQueue hasn't been constructed yet - so construct it: SampleQueue trackOutput = new FormatAdjustingSampleQueue(allocator, overridingDrmInitData); trackOutput.setSampleOffsetUs(sampleOffsetUs); trackOutput.sourceId(chunkUid); @@ -854,31 +881,6 @@ import java.util.Set; return trackOutput; } - @Nullable - private TrackOutput maybeMapAndGetSampleQueue(int id, int type) { - int sampleQueueIndex; - boolean sampleQueueMappingDone; - if (type == C.TRACK_TYPE_AUDIO && audioSampleQueueIndex != C.INDEX_UNSET) { - sampleQueueIndex = audioSampleQueueIndex; - sampleQueueMappingDone = audioSampleQueueMappingDone; - audioSampleQueueMappingDone = true; - } else if (type == C.TRACK_TYPE_VIDEO && videoSampleQueueIndex != C.INDEX_UNSET) { - sampleQueueIndex = videoSampleQueueIndex; - sampleQueueMappingDone = videoSampleQueueMappingDone; - videoSampleQueueMappingDone = true; - } else { - return null; - } - - if (sampleQueueMappingDone) { - return sampleQueueTrackIds[sampleQueueIndex] == id - ? sampleQueues[sampleQueueIndex] - : createDummyTrackOutput(id, type); - } else { - return sampleQueues[sampleQueueIndex]; - } - } - @Override public void endTracks() { tracksEnded = true;