mirror of
https://github.com/yuliskov/SmartTube.git
synced 2026-01-05 05:20:39 -06:00
refactor
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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) {
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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<MediaTrack> {
|
||||
@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) {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user