diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/AdvancedPlayerSettingsScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/AdvancedPlayerSettingsScreen.kt new file mode 100644 index 0000000000..9493727068 --- /dev/null +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/AdvancedPlayerSettingsScreen.kt @@ -0,0 +1,47 @@ +package eu.kanade.presentation.more.settings.screen + +import androidx.compose.runtime.* +import androidx.compose.runtime.Composable +import androidx.compose.ui.platform.LocalContext +import eu.kanade.presentation.more.settings.Preference +import eu.kanade.tachiyomi.R +import eu.kanade.tachiyomi.ui.player.settings.PlayerPreferences +import eu.kanade.tachiyomi.util.preference.asState +import uy.kohesive.injekt.Injekt +import uy.kohesive.injekt.api.get + +object AdvancedPlayerSettingsScreen : SearchableSettings { + @Composable + override fun getTitleRes() = R.string.pref_category_player_advanced + + @Composable + override fun getPreferences(): List { + val playerPreferences = remember { Injekt.get() } + val context = LocalContext.current + val mpvConf = playerPreferences.mpvConf() + val scope = rememberCoroutineScope() + + return listOf( + Preference.PreferenceItem.MultiLineEditTextPreference( + pref = mpvConf, + title = context.getString(R.string.pref_mpv_conf), + subtitle = mpvConf.asState(scope).value + .lines().take(2) + .joinToString( + separator = "\n", + postfix = if (mpvConf.asState(scope).value.lines().size > 2) "\n..." else "", + ), + + ), + Preference.PreferenceItem.ListPreference( + title = context.getString(R.string.pref_debanding_title), + pref = playerPreferences.deband(), + entries = mapOf( + 0 to context.getString(R.string.pref_debanding_disabled), + 1 to context.getString(R.string.pref_debanding_cpu), + 2 to context.getString(R.string.pref_debanding_gpu), + ), + ), + ) + } +} diff --git a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsPlayerScreen.kt b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsPlayerScreen.kt index a85b2db097..db142130fc 100644 --- a/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsPlayerScreen.kt +++ b/app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsPlayerScreen.kt @@ -20,6 +20,8 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource +import cafe.adriel.voyager.navigator.LocalNavigator +import cafe.adriel.voyager.navigator.currentOrThrow import eu.kanade.domain.base.BasePreferences import eu.kanade.presentation.more.settings.Preference import eu.kanade.presentation.util.collectAsState @@ -34,7 +36,6 @@ import eu.kanade.tachiyomi.ui.player.NEXT_PLAYER import eu.kanade.tachiyomi.ui.player.VLC_PLAYER import eu.kanade.tachiyomi.ui.player.X_PLAYER import eu.kanade.tachiyomi.ui.player.settings.PlayerPreferences -import eu.kanade.tachiyomi.util.preference.asState import tachiyomi.presentation.core.components.WheelTextPicker import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get @@ -81,10 +82,9 @@ object SettingsPlayerScreen : SearchableSettings { @Composable private fun getInternalPlayerGroup(playerPreferences: PlayerPreferences): Preference.PreferenceGroup { - val scope = rememberCoroutineScope() val playerFullscreen = playerPreferences.playerFullscreen() val playerHideControls = playerPreferences.hideControls() - val mpvConf = playerPreferences.mpvConf() + val navigator = LocalNavigator.currentOrThrow return Preference.PreferenceGroup( title = stringResource(R.string.pref_category_internal_player), @@ -98,16 +98,10 @@ object SettingsPlayerScreen : SearchableSettings { pref = playerHideControls, title = stringResource(R.string.pref_player_hide_controls), ), - Preference.PreferenceItem.MultiLineEditTextPreference( - pref = mpvConf, - title = stringResource(R.string.pref_mpv_conf), - subtitle = mpvConf.asState(scope).value - .lines().take(2) - .joinToString( - separator = "\n", - postfix = if (mpvConf.asState(scope).value.lines().size > 2) "\n..." else "", - ), - + Preference.PreferenceItem.TextPreference( + title = stringResource(R.string.pref_category_player_advanced), + subtitle = stringResource(R.string.pref_category_player_advanced_subtitle), + onClick = { navigator.push(AdvancedPlayerSettingsScreen) }, ), ), ) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/player/PlayerActivity.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/player/PlayerActivity.kt index fb98fa5a65..d3528261f0 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/player/PlayerActivity.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/player/PlayerActivity.kt @@ -412,10 +412,15 @@ class PlayerActivity : BaseActivity() { player.initialize(applicationContext.filesDir.path, logLevel) MPVLib.observeProperty("chapter-list", MPVLib.mpvFormat.MPV_FORMAT_NONE) MPVLib.setPropertyDouble("speed", playerPreferences.playerSpeed().get().toDouble()) - mpvUpdateHwDec(HwDecState.get(playerPreferences.standardHwDec().get())) MPVLib.setOptionString("keep-open", "always") MPVLib.setOptionString("ytdl", "no") + mpvUpdateHwDec(HwDecState.get(playerPreferences.standardHwDec().get())) + when (playerPreferences.deband().get()) { + 1 -> MPVLib.setOptionString("vf", "gradfun=radius=12") + 2 -> MPVLib.setOptionString("deband", "yes") + } + MPVLib.addLogObserver(playerObserver) player.addObserver(playerObserver) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/PlayerPreferences.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/PlayerPreferences.kt index 200f8e3950..7ad3cee3e8 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/PlayerPreferences.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/player/settings/PlayerPreferences.kt @@ -76,4 +76,6 @@ class PlayerPreferences( fun enableNetflixStyleAniSkip() = preferenceStore.getBoolean("pref_enable_netflixStyle_aniskip", false) fun standardHwDec() = preferenceStore.getString("pref_hwdec", HwDecState.defaultHwDec.mpvValue) + + fun deband() = preferenceStore.getInt("pref_deband", 0) } diff --git a/i18n/src/main/res/values/strings-aniyomi.xml b/i18n/src/main/res/values/strings-aniyomi.xml index 931d57a45c..4ed8e3e455 100644 --- a/i18n/src/main/res/values/strings-aniyomi.xml +++ b/i18n/src/main/res/values/strings-aniyomi.xml @@ -213,6 +213,12 @@ Page 1 Page 2 Page 3 + Advanced player settings + Debanding, mpv.conf… etc + Debanding + Disabled + CPU + GPU Ep. %1$s - %2$s Couldn\'t download due to low storage space Warning: large bulk downloads may lead to sources becoming slower and/or blocking Aniyomi. Tap to learn more.