From c252e52282b962809851e7bcaaddfa68db5e1e85 Mon Sep 17 00:00:00 2001 From: FongMi Date: Sat, 25 Jan 2025 11:47:52 +0800 Subject: [PATCH] Optimize soft decode --- .../main/java/com/fongmi/android/tv/player/Players.java | 6 +++++- .../java/com/fongmi/android/tv/player/exo/ExoUtil.java | 7 +++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/fongmi/android/tv/player/Players.java b/app/src/main/java/com/fongmi/android/tv/player/Players.java index d78260605..002d9b5af 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/Players.java +++ b/app/src/main/java/com/fongmi/android/tv/player/Players.java @@ -563,7 +563,11 @@ public class Players implements Player.Listener, ParseCallback { @Override public void onTracksChanged(@NonNull Tracks tracks) { - if (!tracks.isEmpty()) PlayerEvent.track(); + if (isHard() && ExoUtil.shouldSoftDecode(tracks)) { + ErrorEvent.url(PlaybackException.ERROR_CODE_DECODING_FAILED); + } else if (!tracks.isEmpty()) { + PlayerEvent.track(); + } } @Override diff --git a/app/src/main/java/com/fongmi/android/tv/player/exo/ExoUtil.java b/app/src/main/java/com/fongmi/android/tv/player/exo/ExoUtil.java index 35ff051fd..313cec1e1 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/exo/ExoUtil.java +++ b/app/src/main/java/com/fongmi/android/tv/player/exo/ExoUtil.java @@ -7,6 +7,7 @@ import android.os.Bundle; import android.text.TextUtils; import android.view.accessibility.CaptioningManager; +import androidx.media3.common.C; import androidx.media3.common.MediaItem; import androidx.media3.common.MimeTypes; import androidx.media3.common.PlaybackException; @@ -64,6 +65,12 @@ public class ExoUtil { return Setting.isCaption() ? CaptionStyleCompat.createFromCaptionStyle(((CaptioningManager) App.get().getSystemService(Context.CAPTIONING_SERVICE)).getUserStyle()) : new CaptionStyleCompat(Color.WHITE, Color.TRANSPARENT, Color.TRANSPARENT, CaptionStyleCompat.EDGE_TYPE_OUTLINE, Color.BLACK, null); } + public static boolean shouldSoftDecode(Tracks tracks) { + if (!haveTrack(tracks, C.TRACK_TYPE_VIDEO)) return false; + for (Tracks.Group trackGroup : tracks.getGroups()) if (trackGroup.getType() == C.TRACK_TYPE_VIDEO && trackGroup.isSupported(true)) return false; + return true; + } + public static boolean haveTrack(Tracks tracks, int type) { int count = 0; for (Tracks.Group trackGroup : tracks.getGroups()) if (trackGroup.getType() == type) count += trackGroup.length;