fix(YouTube - Video playback): Correctly set default quality when changing from a low quality video

This commit is contained in:
inotia00 2024-12-08 15:52:40 +09:00
parent 9f2276813c
commit e5bbc036f4
2 changed files with 19 additions and 14 deletions

View File

@ -5,6 +5,7 @@ import static app.revanced.extension.shared.utils.StringRef.str;
import androidx.annotation.NonNull;
import app.revanced.extension.shared.settings.IntegerSetting;
import app.revanced.extension.shared.utils.Logger;
import app.revanced.extension.shared.utils.Utils;
import app.revanced.extension.youtube.settings.Settings;
import app.revanced.extension.youtube.shared.PlayerType;
@ -58,11 +59,11 @@ public class VideoQualityPatch {
if (defaultQuality == DEFAULT_YOUTUBE_VIDEO_QUALITY)
return;
Utils.runOnMainThreadDelayed(() ->
VideoInformation.overrideVideoQuality(
VideoInformation.getAvailableVideoQuality(defaultQuality)
),
delayMillis
Utils.runOnMainThreadDelayed(() -> {
final int qualityToUseFinal = VideoInformation.getAvailableVideoQuality(defaultQuality);
Logger.printDebug(() -> "Changing video quality to: " + qualityToUseFinal);
VideoInformation.overrideVideoQuality(qualityToUseFinal);
}, delayMillis
);
}

View File

@ -71,6 +71,8 @@ public final class VideoInformation {
@Nullable
private static List<Integer> videoQualities;
private static boolean qualityNeedsUpdating;
/**
* Injection point.
*/
@ -415,16 +417,18 @@ public final class VideoInformation {
* @return available video quality.
*/
public static int getAvailableVideoQuality(int preferredQuality) {
if (videoQualities != null) {
int qualityToUse = videoQualities.get(0); // first element is automatic mode
for (Integer quality : videoQualities) {
if (quality <= preferredQuality && qualityToUse < quality) {
qualityToUse = quality;
}
}
preferredQuality = qualityToUse;
if (!qualityNeedsUpdating || videoQualities == null) {
return preferredQuality;
}
return preferredQuality;
qualityNeedsUpdating = false;
int qualityToUse = videoQualities.get(0); // first element is automatic mode
for (Integer quality : videoQualities) {
if (quality <= preferredQuality && qualityToUse < quality) {
qualityToUse = quality;
}
}
return qualityToUse;
}
/**