From 0edc832d67e9a7166306a958d3ba1abaebc7f97d Mon Sep 17 00:00:00 2001 From: olly Date: Fri, 4 May 2018 08:50:46 -0700 Subject: [PATCH] Get all track key objects into a consistent state ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=195421908 --- .../exoplayer2/demo/DownloadActivity.java | 6 +- .../dash/manifest/RepresentationKey.java | 74 +++++++++---------- .../source/hls/offline/HlsDownloadAction.java | 2 +- .../hls/playlist/HlsMasterPlaylist.java | 10 +-- .../source/hls/playlist/RenditionKey.java | 70 +++++++++++++----- .../source/hls/offline/HlsDownloaderTest.java | 2 +- .../smoothstreaming/manifest/TrackKey.java | 44 ++++++++--- 7 files changed, 131 insertions(+), 77 deletions(-) diff --git a/demos/main/src/main/java/com/google/android/exoplayer2/demo/DownloadActivity.java b/demos/main/src/main/java/com/google/android/exoplayer2/demo/DownloadActivity.java index 7e26ddbe56..c36514bcfd 100644 --- a/demos/main/src/main/java/com/google/android/exoplayer2/demo/DownloadActivity.java +++ b/demos/main/src/main/java/com/google/android/exoplayer2/demo/DownloadActivity.java @@ -294,9 +294,9 @@ public class DownloadActivity extends Activity { trackFormats.add(DUMMY_FORMAT); } else { HlsMasterPlaylist masterPlaylist = (HlsMasterPlaylist) playlist; - addRepresentationItems(masterPlaylist.variants, RenditionKey.GROUP_VARIANTS); - addRepresentationItems(masterPlaylist.audios, RenditionKey.GROUP_AUDIOS); - addRepresentationItems(masterPlaylist.subtitles, RenditionKey.GROUP_SUBTITLES); + addRepresentationItems(masterPlaylist.variants, RenditionKey.TYPE_VARIANT); + addRepresentationItems(masterPlaylist.audios, RenditionKey.TYPE_AUDIO); + addRepresentationItems(masterPlaylist.subtitles, RenditionKey.TYPE_SUBTITLE); } } diff --git a/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/manifest/RepresentationKey.java b/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/manifest/RepresentationKey.java index ac9c7794e0..8e64f69656 100644 --- a/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/manifest/RepresentationKey.java +++ b/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/manifest/RepresentationKey.java @@ -40,6 +40,43 @@ public final class RepresentationKey implements Parcelable, Comparable @Override protected void writeKey(DataOutputStream output, RenditionKey key) throws IOException { - output.writeInt(key.renditionGroup); + output.writeInt(key.type); output.writeInt(key.trackIndex); } diff --git a/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/HlsMasterPlaylist.java b/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/HlsMasterPlaylist.java index 1feb9d43b3..1e27855357 100644 --- a/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/HlsMasterPlaylist.java +++ b/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/HlsMasterPlaylist.java @@ -119,9 +119,9 @@ public final class HlsMasterPlaylist extends HlsPlaylist { return new HlsMasterPlaylist( baseUri, tags, - copyRenditionsList(variants, RenditionKey.GROUP_VARIANTS, renditionKeys), - copyRenditionsList(audios, RenditionKey.GROUP_AUDIOS, renditionKeys), - copyRenditionsList(subtitles, RenditionKey.GROUP_SUBTITLES, renditionKeys), + copyRenditionsList(variants, RenditionKey.TYPE_VARIANT, renditionKeys), + copyRenditionsList(audios, RenditionKey.TYPE_AUDIO, renditionKeys), + copyRenditionsList(subtitles, RenditionKey.TYPE_SUBTITLE, renditionKeys), muxedAudioFormat, muxedCaptionFormats); } @@ -140,13 +140,13 @@ public final class HlsMasterPlaylist extends HlsPlaylist { } private static List copyRenditionsList( - List renditions, int renditionGroup, List renditionKeys) { + List renditions, int renditionType, List renditionKeys) { List copiedRenditions = new ArrayList<>(renditionKeys.size()); for (int i = 0; i < renditions.size(); i++) { HlsUrl rendition = renditions.get(i); for (int j = 0; j < renditionKeys.size(); j++) { RenditionKey renditionKey = renditionKeys.get(j); - if (renditionKey.renditionGroup == renditionGroup && renditionKey.trackIndex == i) { + if (renditionKey.type == renditionType && renditionKey.trackIndex == i) { copiedRenditions.add(rendition); break; } diff --git a/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/RenditionKey.java b/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/RenditionKey.java index 068686a2b2..84b0ab65ec 100644 --- a/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/RenditionKey.java +++ b/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/RenditionKey.java @@ -17,23 +17,68 @@ package com.google.android.exoplayer2.source.hls.playlist; import android.os.Parcel; import android.os.Parcelable; +import android.support.annotation.IntDef; import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; /** Uniquely identifies a rendition in an {@link HlsMasterPlaylist}. */ public final class RenditionKey implements Parcelable, Comparable { - public static final int GROUP_VARIANTS = 0; - public static final int GROUP_AUDIOS = 1; - public static final int GROUP_SUBTITLES = 2; + /** Types of rendition. */ + @Retention(RetentionPolicy.SOURCE) + @IntDef({TYPE_VARIANT, TYPE_AUDIO, TYPE_SUBTITLE}) + public @interface Type {} - public final int renditionGroup; + public static final int TYPE_VARIANT = 0; + public static final int TYPE_AUDIO = 1; + public static final int TYPE_SUBTITLE = 2; + + public final @Type int type; public final int trackIndex; - public RenditionKey(int renditionGroup, int trackIndex) { - this.renditionGroup = renditionGroup; + public RenditionKey(@Type int type, int trackIndex) { + this.type = type; this.trackIndex = trackIndex; } + @Override + public String toString() { + return type + "." + trackIndex; + } + + @Override + public boolean equals(@Nullable Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + RenditionKey that = (RenditionKey) o; + return type == that.type && trackIndex == that.trackIndex; + } + + @Override + public int hashCode() { + int result = type; + result = 31 * result + trackIndex; + return result; + } + + // Comparable implementation. + + @Override + public int compareTo(@NonNull RenditionKey other) { + int result = type - other.type; + if (result == 0) { + result = trackIndex - other.trackIndex; + } + return result; + } + // Parcelable implementation. @Override @@ -43,7 +88,7 @@ public final class RenditionKey implements Parcelable, Comparable @Override public void writeToParcel(Parcel dest, int flags) { - dest.writeInt(renditionGroup); + dest.writeInt(type); dest.writeInt(trackIndex); } @@ -59,15 +104,4 @@ public final class RenditionKey implements Parcelable, Comparable return new RenditionKey[size]; } }; - - // Comparable implementation. - - @Override - public int compareTo(@NonNull RenditionKey other) { - int result = renditionGroup - other.renditionGroup; - if (result == 0) { - result = trackIndex - other.trackIndex; - } - return result; - } } diff --git a/library/hls/src/test/java/com/google/android/exoplayer2/source/hls/offline/HlsDownloaderTest.java b/library/hls/src/test/java/com/google/android/exoplayer2/source/hls/offline/HlsDownloaderTest.java index 342f7a0ab0..54a82a7e7d 100644 --- a/library/hls/src/test/java/com/google/android/exoplayer2/source/hls/offline/HlsDownloaderTest.java +++ b/library/hls/src/test/java/com/google/android/exoplayer2/source/hls/offline/HlsDownloaderTest.java @@ -190,7 +190,7 @@ public class HlsDownloaderTest { private static ArrayList getKeys(int... variantIndices) { ArrayList renditionKeys = new ArrayList<>(); for (int variantIndex : variantIndices) { - renditionKeys.add(new RenditionKey(RenditionKey.GROUP_VARIANTS, variantIndex)); + renditionKeys.add(new RenditionKey(RenditionKey.TYPE_VARIANT, variantIndex)); } return renditionKeys; } diff --git a/library/smoothstreaming/src/main/java/com/google/android/exoplayer2/source/smoothstreaming/manifest/TrackKey.java b/library/smoothstreaming/src/main/java/com/google/android/exoplayer2/source/smoothstreaming/manifest/TrackKey.java index ed52e6fa12..d529f0b62a 100644 --- a/library/smoothstreaming/src/main/java/com/google/android/exoplayer2/source/smoothstreaming/manifest/TrackKey.java +++ b/library/smoothstreaming/src/main/java/com/google/android/exoplayer2/source/smoothstreaming/manifest/TrackKey.java @@ -18,6 +18,7 @@ package com.google.android.exoplayer2.source.smoothstreaming.manifest; import android.os.Parcel; import android.os.Parcelable; import android.support.annotation.NonNull; +import android.support.annotation.Nullable; /** * Uniquely identifies a track in a {@link SsManifest}. @@ -37,6 +38,37 @@ public final class TrackKey implements Parcelable, Comparable { return streamElementIndex + "." + trackIndex; } + @Override + public boolean equals(@Nullable Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + TrackKey that = (TrackKey) o; + return streamElementIndex == that.streamElementIndex && trackIndex == that.trackIndex; + } + + @Override + public int hashCode() { + int result = streamElementIndex; + result = 31 * result + trackIndex; + return result; + } + + // Comparable implementation. + + @Override + public int compareTo(@NonNull TrackKey o) { + int result = streamElementIndex - o.streamElementIndex; + if (result == 0) { + result = trackIndex - o.trackIndex; + } + return result; + } + // Parcelable implementation. @Override @@ -61,16 +93,4 @@ public final class TrackKey implements Parcelable, Comparable { return new TrackKey[size]; } }; - - // Comparable implementation. - - @Override - public int compareTo(@NonNull TrackKey o) { - int result = streamElementIndex - o.streamElementIndex; - if (result == 0) { - result = trackIndex - o.trackIndex; - } - return result; - } - }