From 21c93deee231b759bbd8b828b1bbbe887bb441e6 Mon Sep 17 00:00:00 2001 From: Yuriy Liskov Date: Fri, 2 Oct 2020 04:16:59 +0300 Subject: [PATCH] refactor --- .../comparator/SubtitleTrackComparator.java | 23 ------------- .../exoplayer/comparator/TrackComparator.java | 19 ----------- .../exoplayer/selector/ExoFormatItem.java | 19 +++++------ .../selector/RestoreTrackSelector.java | 3 +- .../selector/TrackSelectorManager.java | 31 +++++------------- .../track/AudioTrack.java} | 20 +++++++----- .../exoplayer/selector/track/MediaTrack.java | 32 +++++++++++++++++++ .../selector/track/SubtitleTrack.java | 26 +++++++++++++++ .../track/VideoTrack.java} | 26 ++++++++------- 9 files changed, 102 insertions(+), 97 deletions(-) delete mode 100644 common/src/main/java/com/liskovsoft/smartyoutubetv2/common/exoplayer/comparator/SubtitleTrackComparator.java delete mode 100644 common/src/main/java/com/liskovsoft/smartyoutubetv2/common/exoplayer/comparator/TrackComparator.java rename common/src/main/java/com/liskovsoft/smartyoutubetv2/common/exoplayer/{comparator/AudioTrackComparator.java => selector/track/AudioTrack.java} (50%) create mode 100644 common/src/main/java/com/liskovsoft/smartyoutubetv2/common/exoplayer/selector/track/MediaTrack.java create mode 100644 common/src/main/java/com/liskovsoft/smartyoutubetv2/common/exoplayer/selector/track/SubtitleTrack.java rename common/src/main/java/com/liskovsoft/smartyoutubetv2/common/exoplayer/{comparator/VideoTrackComparator.java => selector/track/VideoTrack.java} (62%) diff --git a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/exoplayer/comparator/SubtitleTrackComparator.java b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/exoplayer/comparator/SubtitleTrackComparator.java deleted file mode 100644 index 05e3bc16a..000000000 --- a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/exoplayer/comparator/SubtitleTrackComparator.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.liskovsoft.smartyoutubetv2.common.exoplayer.comparator; - -import com.liskovsoft.sharedutils.helpers.Helpers; -import com.liskovsoft.smartyoutubetv2.common.exoplayer.selector.TrackSelectorManager.MediaTrack; - -public class SubtitleTrackComparator extends TrackComparator { - @Override - public int compare(MediaTrack track1, MediaTrack track2) { - if (track1 == null || track1.format == null) { - return -1; - } - - int result = 1; - - if (Helpers.equals(track1.format.id, track2.format.id)) { - result = 0; - } else if (Helpers.equals(track1.format.language, track2.format.language)) { - return 0; - } - - return result; - } -} diff --git a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/exoplayer/comparator/TrackComparator.java b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/exoplayer/comparator/TrackComparator.java deleted file mode 100644 index 49f8b15ca..000000000 --- a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/exoplayer/comparator/TrackComparator.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.liskovsoft.smartyoutubetv2.common.exoplayer.comparator; - -import com.liskovsoft.smartyoutubetv2.common.exoplayer.selector.TrackSelectorManager; -import com.liskovsoft.smartyoutubetv2.common.exoplayer.selector.TrackSelectorManager.MediaTrack; - -public abstract class TrackComparator { - public static TrackComparator forRenderer(int rendererIndex) { - if (rendererIndex == TrackSelectorManager.RENDERER_INDEX_VIDEO) { - return new VideoTrackComparator(); - } else if (rendererIndex == TrackSelectorManager.RENDERER_INDEX_AUDIO) { - return new AudioTrackComparator(); - } else if (rendererIndex == TrackSelectorManager.RENDERER_INDEX_SUBTITLE) { - return new SubtitleTrackComparator(); - } - - return null; - } - public abstract int compare(MediaTrack track1, MediaTrack track2); -} diff --git a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/exoplayer/selector/ExoFormatItem.java b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/exoplayer/selector/ExoFormatItem.java index befd5a520..5dcf60580 100644 --- a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/exoplayer/selector/ExoFormatItem.java +++ b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/exoplayer/selector/ExoFormatItem.java @@ -1,12 +1,11 @@ package com.liskovsoft.smartyoutubetv2.common.exoplayer.selector; -import android.content.Intent; import androidx.annotation.NonNull; import com.google.android.exoplayer2.Format; import com.google.android.exoplayer2.util.MimeTypes; import com.liskovsoft.sharedutils.helpers.Helpers; import com.liskovsoft.smartyoutubetv2.common.autoframerate.FormatItem; -import com.liskovsoft.smartyoutubetv2.common.exoplayer.selector.TrackSelectorManager.MediaTrack; +import com.liskovsoft.smartyoutubetv2.common.exoplayer.selector.track.MediaTrack; import java.util.ArrayList; import java.util.List; @@ -129,8 +128,6 @@ public class ExoFormatItem implements FormatItem { } ExoFormatItem formatItem = new ExoFormatItem(); - MediaTrack mediaTrack = new MediaTrack(); - formatItem.mTrack = mediaTrack; String[] split = spec.split(","); @@ -140,7 +137,11 @@ public class ExoFormatItem implements FormatItem { int type = Helpers.parseInt(split[0]); formatItem.mType = type; - mediaTrack.rendererIndex = Helpers.parseInt(split[1]); + + int rendererIndex = Helpers.parseInt(split[1]); + MediaTrack mediaTrack = MediaTrack.forRendererIndex(rendererIndex); + formatItem.mTrack = mediaTrack; + String id = split[2]; String codecs = split[3]; int width = Helpers.parseInt(split[4]); @@ -171,12 +172,10 @@ public class ExoFormatItem implements FormatItem { public static FormatItem createFakeVideoFormat(int resolution, int format, int frameRate) { ExoFormatItem formatItem = new ExoFormatItem(); - MediaTrack mediaTrack = new MediaTrack(); + MediaTrack mediaTrack = MediaTrack.forRendererIndex(TrackSelectorManager.RENDERER_INDEX_VIDEO); formatItem.mTrack = mediaTrack; formatItem.mType = TYPE_VIDEO; - mediaTrack.rendererIndex = TrackSelectorManager.RENDERER_INDEX_VIDEO; - int width = -1; int height = -1; String codec = null; @@ -222,12 +221,10 @@ public class ExoFormatItem implements FormatItem { public static FormatItem createFakeAudioFormat(int format) { ExoFormatItem formatItem = new ExoFormatItem(); - MediaTrack mediaTrack = new MediaTrack(); + MediaTrack mediaTrack = MediaTrack.forRendererIndex(TrackSelectorManager.RENDERER_INDEX_AUDIO); formatItem.mTrack = mediaTrack; formatItem.mType = TYPE_AUDIO; - mediaTrack.rendererIndex = TrackSelectorManager.RENDERER_INDEX_AUDIO; - String codec = null; switch (format) { diff --git a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/exoplayer/selector/RestoreTrackSelector.java b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/exoplayer/selector/RestoreTrackSelector.java index d343595a8..4fc41e1f7 100644 --- a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/exoplayer/selector/RestoreTrackSelector.java +++ b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/exoplayer/selector/RestoreTrackSelector.java @@ -6,11 +6,10 @@ import com.google.android.exoplayer2.ExoPlaybackException; import com.google.android.exoplayer2.RendererCapabilities; import com.google.android.exoplayer2.source.TrackGroupArray; import com.google.android.exoplayer2.trackselection.DefaultTrackSelector; -import com.google.android.exoplayer2.trackselection.TrackSelection; import com.google.android.exoplayer2.trackselection.TrackSelection.Definition; import com.google.android.exoplayer2.trackselection.TrackSelection.Factory; import com.liskovsoft.sharedutils.mylogger.Log; -import com.liskovsoft.smartyoutubetv2.common.exoplayer.selector.TrackSelectorManager.MediaTrack; +import com.liskovsoft.smartyoutubetv2.common.exoplayer.selector.track.MediaTrack; public class RestoreTrackSelector extends DefaultTrackSelector { private static final String TAG = RestoreTrackSelector.class.getSimpleName(); diff --git a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/exoplayer/selector/TrackSelectorManager.java b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/exoplayer/selector/TrackSelectorManager.java index c81cf1e50..e5cf9f3b4 100644 --- a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/exoplayer/selector/TrackSelectorManager.java +++ b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/exoplayer/selector/TrackSelectorManager.java @@ -14,7 +14,7 @@ import com.google.android.exoplayer2.trackselection.TrackSelection; import com.google.android.exoplayer2.trackselection.TrackSelection.Definition; import com.liskovsoft.sharedutils.mylogger.Log; import com.liskovsoft.smartyoutubetv2.common.exoplayer.selector.RestoreTrackSelector.TrackSelectorCallback; -import com.liskovsoft.smartyoutubetv2.common.exoplayer.comparator.TrackComparator; +import com.liskovsoft.smartyoutubetv2.common.exoplayer.selector.track.MediaTrack; import java.util.Arrays; import java.util.Comparator; @@ -49,15 +49,6 @@ public class TrackSelectorManager implements TrackSelectorCallback { public MediaTrack selectedTrack; } - public static class MediaTrack { - public Format format; - public int groupIndex = -1; - public int trackIndex = -1; - public boolean isSelected; - - public int rendererIndex; - } - private static class MediaTrackFormatComparator implements Comparator { @Override public int compare(MediaTrack mediaTrack1, MediaTrack mediaTrack2) { @@ -211,8 +202,7 @@ public class TrackSelectorManager implements TrackSelectorCallback { renderer.sortedTracks = new TreeSet<>(new MediaTrackFormatComparator()); // AUTO OPTION: add disable subs option - MediaTrack autoTrack = new MediaTrack(); - autoTrack.rendererIndex = rendererIndex; + MediaTrack autoTrack = MediaTrack.forRendererIndex(rendererIndex); if (rendererIndex == RENDERER_INDEX_SUBTITLE) { renderer.sortedTracks.add(autoTrack); } @@ -229,11 +219,10 @@ public class TrackSelectorManager implements TrackSelectorCallback { haveSupportedTracks = true; Format format = group.getFormat(trackIndex); - MediaTrack mediaTrack = new MediaTrack(); + MediaTrack mediaTrack = MediaTrack.forRendererIndex(rendererIndex); mediaTrack.format = format; mediaTrack.groupIndex = groupIndex; mediaTrack.trackIndex = trackIndex; - mediaTrack.rendererIndex = rendererIndex; mediaTrack.isSelected = renderer.override != null && renderer.override.groupIndex == groupIndex && renderer.override.containsTrack(trackIndex); @@ -410,19 +399,17 @@ public class TrackSelectorManager implements TrackSelectorCallback { MediaTrack result = createAutoSelection(track.rendererIndex); - TrackComparator mComparator = TrackComparator.forRenderer(track.rendererIndex); - if (track.format != null) { // not auto selection for (int groupIndex = 0; groupIndex < renderer.mediaTracks.length; groupIndex++) { for (int trackIndex = 0; trackIndex < renderer.mediaTracks[groupIndex].length; trackIndex++) { MediaTrack mediaTrack = renderer.mediaTracks[groupIndex][trackIndex]; - int compare = mComparator.compare(mediaTrack, track); + int compare = track.compare(mediaTrack); if (compare == 0) { - result = mediaTrack; - break; - } else if (compare < 0 && mComparator.compare(result, mediaTrack) < 0) { + Log.d(TAG, "findBestMatch: Found exact match: " + mediaTrack.format); + return mediaTrack; + } else if (compare > 0 && mediaTrack.compare(result) > 0) { // select track with higher possible quality result = mediaTrack; } } @@ -446,9 +433,7 @@ public class TrackSelectorManager implements TrackSelectorCallback { } private MediaTrack createAutoSelection(int rendererIndex) { - MediaTrack result = new MediaTrack(); - result.rendererIndex = rendererIndex; - return result; + return MediaTrack.forRendererIndex(rendererIndex); } private void clearOverride(int rendererIndex) { diff --git a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/exoplayer/comparator/AudioTrackComparator.java b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/exoplayer/selector/track/AudioTrack.java similarity index 50% rename from common/src/main/java/com/liskovsoft/smartyoutubetv2/common/exoplayer/comparator/AudioTrackComparator.java rename to common/src/main/java/com/liskovsoft/smartyoutubetv2/common/exoplayer/selector/track/AudioTrack.java index 3f090bbe9..cd94a0dd2 100644 --- a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/exoplayer/comparator/AudioTrackComparator.java +++ b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/exoplayer/selector/track/AudioTrack.java @@ -1,10 +1,13 @@ -package com.liskovsoft.smartyoutubetv2.common.exoplayer.comparator; +package com.liskovsoft.smartyoutubetv2.common.exoplayer.selector.track; import com.liskovsoft.sharedutils.helpers.Helpers; -import com.liskovsoft.smartyoutubetv2.common.exoplayer.selector.TrackSelectorManager.MediaTrack; import com.liskovsoft.smartyoutubetv2.common.exoplayer.selector.TrackSelectorUtil; -public class AudioTrackComparator extends TrackComparator { +public class AudioTrack extends MediaTrack { + public AudioTrack(int rendererIndex) { + super(rendererIndex); + } + private static boolean codecEquals(String codecs1, String codecs2) { if (codecs1 == null || codecs2 == null) { return false; @@ -13,16 +16,17 @@ public class AudioTrackComparator extends TrackComparator { return Helpers.equals(TrackSelectorUtil.codecNameShort(codecs1), TrackSelectorUtil.codecNameShort(codecs2)); } - public int compare(MediaTrack track1, MediaTrack track2) { - if (track1 == null || track1.format == null) { - return -1; + @Override + public int compare(MediaTrack track2) { + if (track2.format == null) { + return 1; } int result = 1; - if (Helpers.equals(track1.format.id, track2.format.id)) { + if (Helpers.equals(format.id, track2.format.id)) { result = 0; - } else if (codecEquals(track1.format.codecs, track2.format.codecs)) { + } else if (codecEquals(format.codecs, track2.format.codecs)) { return 0; } diff --git a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/exoplayer/selector/track/MediaTrack.java b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/exoplayer/selector/track/MediaTrack.java new file mode 100644 index 000000000..d6a6056ef --- /dev/null +++ b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/exoplayer/selector/track/MediaTrack.java @@ -0,0 +1,32 @@ +package com.liskovsoft.smartyoutubetv2.common.exoplayer.selector.track; + +import com.google.android.exoplayer2.Format; +import com.liskovsoft.smartyoutubetv2.common.exoplayer.selector.TrackSelectorManager; + +public abstract class MediaTrack { + public MediaTrack(int rendererIndex) { + this.rendererIndex = rendererIndex; + } + + public Format format; + public int groupIndex = -1; + public int trackIndex = -1; + public boolean isSelected; + + public int rendererIndex; + + public abstract int compare(MediaTrack track2); + + public static MediaTrack forRendererIndex(int rendererIndex) { + switch (rendererIndex) { + case TrackSelectorManager.RENDERER_INDEX_VIDEO: + return new VideoTrack(rendererIndex); + case TrackSelectorManager.RENDERER_INDEX_AUDIO: + return new AudioTrack(rendererIndex); + case TrackSelectorManager.RENDERER_INDEX_SUBTITLE: + return new SubtitleTrack(rendererIndex); + } + + return null; + } +} diff --git a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/exoplayer/selector/track/SubtitleTrack.java b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/exoplayer/selector/track/SubtitleTrack.java new file mode 100644 index 000000000..5abb4cbe9 --- /dev/null +++ b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/exoplayer/selector/track/SubtitleTrack.java @@ -0,0 +1,26 @@ +package com.liskovsoft.smartyoutubetv2.common.exoplayer.selector.track; + +import com.liskovsoft.sharedutils.helpers.Helpers; + +public class SubtitleTrack extends MediaTrack { + public SubtitleTrack(int rendererIndex) { + super(rendererIndex); + } + + @Override + public int compare(MediaTrack track2) { + if (track2.format == null) { + return 1; + } + + int result = 1; + + if (Helpers.equals(format.id, track2.format.id)) { + result = 0; + } else if (Helpers.equals(format.language, track2.format.language)) { + return 0; + } + + return result; + } +} diff --git a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/exoplayer/comparator/VideoTrackComparator.java b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/exoplayer/selector/track/VideoTrack.java similarity index 62% rename from common/src/main/java/com/liskovsoft/smartyoutubetv2/common/exoplayer/comparator/VideoTrackComparator.java rename to common/src/main/java/com/liskovsoft/smartyoutubetv2/common/exoplayer/selector/track/VideoTrack.java index 7f218d847..e988e3927 100644 --- a/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/exoplayer/comparator/VideoTrackComparator.java +++ b/common/src/main/java/com/liskovsoft/smartyoutubetv2/common/exoplayer/selector/track/VideoTrack.java @@ -1,12 +1,15 @@ -package com.liskovsoft.smartyoutubetv2.common.exoplayer.comparator; +package com.liskovsoft.smartyoutubetv2.common.exoplayer.selector.track; import com.liskovsoft.sharedutils.helpers.Helpers; -import com.liskovsoft.smartyoutubetv2.common.exoplayer.selector.TrackSelectorManager.MediaTrack; import com.liskovsoft.smartyoutubetv2.common.exoplayer.selector.TrackSelectorUtil; -public class VideoTrackComparator extends TrackComparator { +public class VideoTrack extends MediaTrack { private static final int HEIGHT_EQUITY_THRESHOLD_PX = 80; + public VideoTrack(int rendererIndex) { + super(rendererIndex); + } + private static boolean codecEquals(String codecs1, String codecs2) { if (codecs1 == null || codecs2 == null) { return false; @@ -47,20 +50,21 @@ public class VideoTrackComparator extends TrackComparator { return fps1 <= fps2 || fpsEquals(fps1, fps2); } - public int compare(MediaTrack track1, MediaTrack track2) { - if (track1 == null || track1.format == null) { - return -1; + @Override + public int compare(MediaTrack track2) { + if (track2.format == null) { + return 1; } int result = 1; - if (Helpers.equals(track1.format.id, track2.format.id)) { + if (Helpers.equals(format.id, track2.format.id)) { result = 0; - } else if (VideoTrackComparator.codecEquals(track1.format.codecs, track2.format.codecs)) { - if (VideoTrackComparator.fpsLessOrEquals(track1.format.frameRate, track2.format.frameRate)) { - if (VideoTrackComparator.heightEquals(track1.format.height, track2.format.height)) { + } else if (codecEquals(format.codecs, track2.format.codecs)) { + if (fpsLessOrEquals(format.frameRate, track2.format.frameRate)) { + if (heightEquals(format.height, track2.format.height)) { result = 0; - } else if (VideoTrackComparator.heightLessOrEquals(track1.format.height, track2.format.height)) { + } else if (heightLessOrEquals(format.height, track2.format.height)) { result = -1; } }