From 6e9adca9d625343af713595b04e1acfbeeaaa689 Mon Sep 17 00:00:00 2001 From: Jarne Demeulemeester <32322857+jarnedemeulemeester@users.noreply.github.com> Date: Fri, 25 Nov 2022 21:50:20 +0100 Subject: [PATCH] More mpv options (#205) * Add mpv options: hwdec, hwdec-codecs, vo, gpu-api * Add audio output option * Use AppPreferences in companion object to set the vo * Remove unused strings * Use strings for mpv prefs * Change default ao to audiotrack * Clean up preferred language settings --- .../java/dev/jdtech/jellyfin/mpv/MPVPlayer.kt | 34 ++++++------- .../jdtech/jellyfin/utils/AppPreferences.kt | 14 +++++- .../dev/jdtech/jellyfin/utils/Constants.kt | 8 +++ .../viewmodels/PlayerActivityViewModel.kt | 15 ++---- app/src/main/res/values-b+es+419/strings.xml | 2 - app/src/main/res/values-bg/strings.xml | 2 - app/src/main/res/values-cs-rCZ/strings.xml | 2 - app/src/main/res/values-de/strings.xml | 2 - app/src/main/res/values-es-rMX/strings.xml | 2 - app/src/main/res/values-es/strings.xml | 2 - app/src/main/res/values-fr/strings.xml | 2 - app/src/main/res/values-hu/strings.xml | 2 - app/src/main/res/values-it/strings.xml | 2 - app/src/main/res/values-ko/strings.xml | 2 - app/src/main/res/values-pl/strings.xml | 2 - app/src/main/res/values-pt-rBR/strings.xml | 2 - app/src/main/res/values-pt/strings.xml | 2 - app/src/main/res/values-ru/strings.xml | 2 - app/src/main/res/values-zh-rCN/strings.xml | 2 - app/src/main/res/values/string_arrays.xml | 23 +++++++++ app/src/main/res/values/strings.xml | 7 ++- .../res/xml/fragment_settings_language.xml | 4 +- .../main/res/xml/fragment_settings_player.xml | 50 ++++++++++++++++--- 23 files changed, 110 insertions(+), 75 deletions(-) diff --git a/app/src/main/java/dev/jdtech/jellyfin/mpv/MPVPlayer.kt b/app/src/main/java/dev/jdtech/jellyfin/mpv/MPVPlayer.kt index 35a6bade..ed81ec6c 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/mpv/MPVPlayer.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/mpv/MPVPlayer.kt @@ -51,7 +51,6 @@ import timber.log.Timber class MPVPlayer( context: Context, requestAudioFocus: Boolean, - preferredLanguages: Map, private val appPreferences: AppPreferences ) : BasePlayer(), MPVLib.EventObserver, AudioManager.OnAudioFocusChangeListener { @@ -77,17 +76,14 @@ class MPVPlayer( // General MPVLib.setOptionString("config", "yes") MPVLib.setOptionString("config-dir", mpvDir.path) - MPVLib.setOptionString("vo", "gpu") + MPVLib.setOptionString("vo", appPreferences.playerMpvVo) MPVLib.setOptionString("gpu-context", "android") - MPVLib.setOptionString("ao", "audiotrack,opensles") + MPVLib.setOptionString("gpu-api", appPreferences.playerMpvGpuApi) + MPVLib.setOptionString("ao", appPreferences.playerMpvAo) // Hardware video decoding - if (appPreferences.mpvDisableHwDec) { - MPVLib.setOptionString("hwdec", "no") - } else { - MPVLib.setOptionString("hwdec", "mediacodec-copy") - } - MPVLib.setOptionString("hwdec-codecs", "h264,hevc,mpeg4,mpeg2video,vp8,vp9,av1") + MPVLib.setOptionString("hwdec", appPreferences.playerMpvHwdec) + MPVLib.setOptionString("hwdec-codecs", appPreferences.playerMpvHwdecCodecs.joinToString(separator = ",")) // TLS MPVLib.setOptionString("tls-verify", "no") @@ -102,6 +98,10 @@ class MPVPlayer( MPVLib.setOptionString("sub-scale-with-window", "yes") MPVLib.setOptionString("sub-use-margins", "no") + // Language + MPVLib.setOptionString("alang", appPreferences.preferredAudioLanguage) + MPVLib.setOptionString("slang", appPreferences.preferredSubtitleLanguage) + // Other options MPVLib.setOptionString("force-window", "no") MPVLib.setOptionString("keep-open", "always") @@ -113,16 +113,8 @@ class MPVPlayer( MPVLib.init() - for (preferredLanguage in preferredLanguages) { - when (preferredLanguage.key) { - TrackType.AUDIO -> { - MPVLib.setOptionString("alang", preferredLanguage.value) - } - TrackType.SUBTITLE -> { - MPVLib.setOptionString("slang", preferredLanguage.value) - } - } - } + + companionPrefs = appPreferences MPVLib.addObserver(this) @@ -1262,6 +1254,8 @@ class MPVPlayer( ) .build() + private lateinit var companionPrefs: AppPreferences + private val surfaceHolder: SurfaceHolder.Callback = object : SurfaceHolder.Callback { /** * This is called immediately after the surface is first created. @@ -1275,7 +1269,7 @@ class MPVPlayer( override fun surfaceCreated(holder: SurfaceHolder) { MPVLib.attachSurface(holder.surface) MPVLib.setOptionString("force-window", "yes") - MPVLib.setOptionString("vo", "gpu") + MPVLib.setOptionString("vo", companionPrefs.playerMpvVo) } /** diff --git a/app/src/main/java/dev/jdtech/jellyfin/utils/AppPreferences.kt b/app/src/main/java/dev/jdtech/jellyfin/utils/AppPreferences.kt index fcbc578c..850a69d9 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/utils/AppPreferences.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/utils/AppPreferences.kt @@ -51,7 +51,19 @@ constructor( Constants.PREF_PLAYER_SEEK_FORWARD_INC, DEFAULT_SEEK_FORWARD_INCREMENT_MS.toString() )!!.toLongOrNull() ?: DEFAULT_SEEK_FORWARD_INCREMENT_MS - val mpvDisableHwDec = sharedPreferences.getBoolean("mpv_disable_hwdec", false) + val playerMpv = sharedPreferences.getBoolean(Constants.PREF_PLAYER_MPV, false) + val playerMpvHwdec = sharedPreferences.getString(Constants.PREF_PLAYER_MPV_HWDEC, "mediacodec-copy")!! + val playerMpvHwdecCodecs: Set = sharedPreferences.getStringSet( + Constants.PREF_PLAYER_MPV_HWDEC_CODECS, + setOf("h264", "hevc", "mpeg4", "mpeg2video", "vp8", "vp9") + )!! + val playerMpvVo = sharedPreferences.getString(Constants.PREF_PLAYER_MPV_VO, "gpu")!! + val playerMpvAo = sharedPreferences.getString(Constants.PREF_PLAYER_MPV_AO, "audiotrack")!! + val playerMpvGpuApi = sharedPreferences.getString(Constants.PREF_PLAYER_MPV_GPU_API, "opengl")!! + + // Language + val preferredAudioLanguage = sharedPreferences.getString(Constants.PREF_AUDIO_LANGUAGE, "")!! + val preferredSubtitleLanguage = sharedPreferences.getString(Constants.PREF_SUBTITLE_LANGUAGE, "")!! // Network val requestTimeout = sharedPreferences.getString( diff --git a/app/src/main/java/dev/jdtech/jellyfin/utils/Constants.kt b/app/src/main/java/dev/jdtech/jellyfin/utils/Constants.kt index 60e2eaa5..2281c16f 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/utils/Constants.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/utils/Constants.kt @@ -16,6 +16,14 @@ object Constants { const val PREF_PLAYER_BRIGHTNESS = "pref_player_brightness" const val PREF_PLAYER_SEEK_BACK_INC = "pref_player_seek_back_inc" const val PREF_PLAYER_SEEK_FORWARD_INC = "pref_player_seek_forward_inc" + const val PREF_PLAYER_MPV = "pref_player_mpv" + const val PREF_PLAYER_MPV_HWDEC = "pref_player_mpv_hwdec" + const val PREF_PLAYER_MPV_HWDEC_CODECS = "pref_player_mpv_hwdec_codecs" + const val PREF_PLAYER_MPV_VO = "pref_player_mpv_vo" + const val PREF_PLAYER_MPV_AO = "pref_player_mpv_ao" + const val PREF_PLAYER_MPV_GPU_API = "pref_player_mpv_gpu_api" + const val PREF_AUDIO_LANGUAGE = "pref_audio_language" + const val PREF_SUBTITLE_LANGUAGE = "pref_subtitle_language" const val PREF_IMAGE_CACHE = "pref_image_cache" const val PREF_IMAGE_CACHE_SIZE = "pref_image_cache_size" const val PREF_THEME = "theme" diff --git a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/PlayerActivityViewModel.kt b/app/src/main/java/dev/jdtech/jellyfin/viewmodels/PlayerActivityViewModel.kt index ff7fe9c7..2d9538ec 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/PlayerActivityViewModel.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/viewmodels/PlayerActivityViewModel.kt @@ -66,19 +66,10 @@ constructor( private val sp = PreferenceManager.getDefaultSharedPreferences(application) init { - val useMpv = sp.getBoolean("mpv_player", false) - val preferredAudioLanguage = sp.getString("audio_language", "")!! - val preferredSubtitleLanguage = sp.getString("subtitle_language", "")!! - - if (useMpv) { - val preferredLanguages = mapOf( - TrackType.AUDIO to preferredAudioLanguage, - TrackType.SUBTITLE to preferredSubtitleLanguage - ) + if (appPreferences.playerMpv) { player = MPVPlayer( application, false, - preferredLanguages, appPreferences ) } else { @@ -89,8 +80,8 @@ constructor( trackSelector.setParameters( trackSelector.buildUponParameters() .setTunnelingEnabled(true) - .setPreferredAudioLanguage(preferredAudioLanguage) - .setPreferredTextLanguage(preferredSubtitleLanguage) + .setPreferredAudioLanguage(appPreferences.preferredAudioLanguage) + .setPreferredTextLanguage(appPreferences.preferredSubtitleLanguage) ) player = ExoPlayer.Builder(application, renderersFactory) .setTrackSelector(trackSelector) diff --git a/app/src/main/res/values-b+es+419/strings.xml b/app/src/main/res/values-b+es+419/strings.xml index abd45620..61e6ea75 100644 --- a/app/src/main/res/values-b+es+419/strings.xml +++ b/app/src/main/res/values-b+es+419/strings.xml @@ -82,8 +82,6 @@ Seleccionar la velocidad de reproducción Reproductor MPV Usar el reproductor experimental MPV para reproducir contenidos. MPV soporta más códecs de vídeo, audio y subtítulos. - Forzar la decodificación por software - Deshabilita la decodificación por hardtware y usa solo software. Puede ser útil sí la decodificación por hardware genera artefactos visuales. Descarga Borrar Detalles diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml index d8b253a1..c4d3bc5d 100644 --- a/app/src/main/res/values-bg/strings.xml +++ b/app/src/main/res/values-bg/strings.xml @@ -60,7 +60,6 @@ Скрийте Ред на сортиране Свалете с мобилна дата - Принудително софтуерно декодиране Възходящ Изберете аудиопът Изберете писта за субтитри @@ -93,7 +92,6 @@ Няма резултати от търсенето Свалени Оправляване на сървърите - Деактивирайте хардуерното декодиране и използвайте софтуерно декодиране. Може да е полезно, ако хардуерното декодиране дава странни артефакти. Кеширайте снимките на диска за да ускорите времето за зареждане. Ще има ефект след рестартиране на приложението. Приложението ще използва това количество MB от вашето дисково пространство, за да съхранява изображения от сървъра на Jellyfin. По-големи стойности може да са от полза при по-бавни мрежи. Низходящ diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml index 04a813d2..497bb781 100644 --- a/app/src/main/res/values-cs-rCZ/strings.xml +++ b/app/src/main/res/values-cs-rCZ/strings.xml @@ -72,8 +72,6 @@ Vyberte titulky mpv přehrávač Použít experimentální mpv přehrávač k přehrávání videí. mpv má podporu pro více video a audio kodeků a formátů titulků. - Vynutit softwarové dekódování - Vypnout hardwarové dekódování a vynutit softwarové dekódování. Může být užitečné pokud hardwarové dekódování produkuje artefakty. %1$s plakát %1$s pozadí \ No newline at end of file diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 84e20183..7939427a 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -82,7 +82,6 @@ Über Player Benutze den experimentellen MPV-Player. Dieser unterstützt mehr Codecs in Bezug auf sowohl Video, Audio als auch Untertitel. - Erzwinge Software-Dekodierung Herunterladen Löschen Details @@ -117,7 +116,6 @@ Pausieren Überspringen [%1$s] %2$s (%3$s) - Deaktiviere Hardware-Dekodierung und verwende stattdessen Software-Dekodierung. Von Vorteil, wenn die Hardware-Dekodierung Artefakte erzeugt. Zeige erweiterten Episodentitel inklusiver der Staffel und Episodeninformationen (SXX:EXX - Episodenname). Native Drittanbieter Jellyfin App Sicher, dass du den Server %1$s entfernen willst diff --git a/app/src/main/res/values-es-rMX/strings.xml b/app/src/main/res/values-es-rMX/strings.xml index 6ed95f6b..32e29768 100644 --- a/app/src/main/res/values-es-rMX/strings.xml +++ b/app/src/main/res/values-es-rMX/strings.xml @@ -82,8 +82,6 @@ Seleccionar la velocidad de reproducción Reproductor MPV Usar el reproductor experimental MPV para reproducir contenidos. MPV soporta más códecs de vídeo, audio y subtítulos. - Forzar la decodificación por software - Deshabilita la decodificación por hardtware y usa solo software. Puede ser útil sí la decodificación por hardware genera artefactos visuales. Descarga Borrar Detalles diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 747a36de..43f5c664 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -82,8 +82,6 @@ Selecciona la velocidad de reproducción Reproductor MPV Usar el reproductor experimental MPV parar reproducir contenidos. MPV soporta mas códecs de vídeo, audio y subtítulos. - Forzar decodificación por software - Deshabilite la decodificación de hardware y use la decodificación de software. Puede ser útil si la decodificación de hardware produce artefactos extraños. Descarga Borrar Detalles diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 8388b734..483912d3 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -80,7 +80,6 @@ Vitesse de lecture Lecteur MPV Télécharger via données mobiles - Forcer le décodage logiciel Télécharger Supprimer Films @@ -99,7 +98,6 @@ Téléchargements Politique de confidentialité S%1$d:E%2$d - %3$s - Désactiver le décodage matériel et utiliser le décodage logiciel. Peut être utile en cas de problèmes avec le décodage matériel. Utiliser le lecteur MPV (expérimental). Ce lecteur supporte d\'avantage de codecs vidéos, audios et sous-titres. Client natif officieux pour Jellyfin Le serveur n\'a pas d\'ID, quelque chose semble ne pas fonctionner correctement sur le serveur diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 2789d24f..d1ae8a87 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -75,8 +75,6 @@ Lejátszási sebesség kiválasztása mpv lejátszó Letöltés roaming közben - Szoftveres dekódolás használata - Kikapcsolja a hardveres dekódolást, és helyette szoftveres dekódolást használ. Hasznos lehet, ha a hardveres dekódolás furcsa effektusokat eredményez. Letöltés Törlés Részletek diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 60fa2144..9eb07aa3 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -73,8 +73,6 @@ Seleziona traccia audio Usa il player MPV sperimentale per riprodurre i video. MPV supporta più video, audio e sottotitoli. Aumenta l\'andare Avanti veloce di (ms) - Forsa la decodifica software - Disattiva la decodifica hardware e usa quella software. Può essere utile se la decodifica hardware crea degli artefatti visivi strani. Dettagli Gestures volume e luminosità Inizializzazione… diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 202aeb25..ccb716cf 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -118,8 +118,6 @@ 다음 이어서 보기 설정한 용량의 저장공간 용량을 Jellyfin 서버의 이미지 캐시를 저장하는 데 사용합니다. 값이 클수록 느린 네트워크에서 큰 효과가 있습니다. - 소프트웨어 디코딩 강제 - 하드웨어 디코딩을 비활성화하고 소프트웨어 디코딩을 사용합니다. 하드웨어 디코딩에서 오류가 발생할 경우 유용할 수 있습니다. 화면 오른쪽을 위아래로 스와이프하여 볼륨을 변경하고 왼쪽을 스와이프하여 밝기 변경 등급 내림차순 diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index e9239f75..fddbda14 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -117,8 +117,6 @@ [%1$s] %2$s (%3$s) Pusty adres serwera Wyświetlaj rozszerzony tytuł - Wymuś dekodowania programowe - Wyłącz dekodowanie sprzętowe i używaj dekodowania programowego. Może być przydatne gdy dekodowanie sprzętowe powoduje artefakty. Usuń serwer Błąd ładowania danych Oznacz jako obejrzane lub nieobejrzane diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 985cc63d..27603876 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -67,7 +67,6 @@ Selecione a velocidade de reprodução Reprodutor mpv Baixar usando dados móveis - Forçar decodificação por software Baixar Deletar Detalhes da pessoa @@ -94,5 +93,4 @@ Armazena imagens no disco para acelerar o tempo de carregamento. Surte efeito após reiniciar o aplicativo. Busca filmes, shows, episódios… Usa o reprodutor experimental mpv para reproduzir vídeos. mpv tem suporte a mais codecs de vidro, áudio e legenda. - Desabilita decodificação por software. Pode ser útil se decodificação por hardware exibir artefatos estranhos. \ No newline at end of file diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index f83c4d8b..4d8ca396 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -123,8 +123,6 @@ Ver o trailer Pausa Servidores - Forçar a descodificação do software - Desactivar a descodificação de hardware e utilizar a descodificação por software. Pode ser útil se a descodificação de hardware der artefactos estranhos. Transferências Externo Mostrar título de episódio alargado incluindo temporada e informação de episódio (SXX:EXX - EpisodeName). diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 618fcc01..841f802a 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -82,8 +82,6 @@ Скачивать через мобильный интернет Скачивать в роуминге Использовать экспериментальный проигрыватель mpv. Он имеет большую поддержку форматов аудио, видео и субтитров. - Принудительное программное декодирование - Отключает аппаратное декодирование и использует программное. Полезно, если аппаратное декодирование выдаёт артефакты. Скачать Удалить Детали diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 488dcfef..3646e988 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -66,8 +66,6 @@ mpv播放器 使用移动数据下载 漫游时下载 - 强制软件解码 - 禁用硬件解码,使用软件解码。在硬件解码显示异常时可能会起作用。 下载 删除 详情 diff --git a/app/src/main/res/values/string_arrays.xml b/app/src/main/res/values/string_arrays.xml index 5f1ae43f..c18f862e 100644 --- a/app/src/main/res/values/string_arrays.xml +++ b/app/src/main/res/values/string_arrays.xml @@ -12,4 +12,27 @@ @string/ascending @string/descending + + no + mediacodec + mediacodec-copy + + + h264 + hevc + mpeg4 + mpeg2video + vp8 + vp9 + + + gpu + + + audiotrack + opensles + + + opengl + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 92b3ecf4..300ab80d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -87,8 +87,6 @@ Download using mobile data Download when roaming Use the experimental mpv player to play videos. mpv has support for more video, audio and subtitle codecs. - Force software decoding - Disable hardware decoding and use software decoding. Can be useful if hardware decoding gives weird artifacts. Download Delete Details @@ -146,4 +144,9 @@ Socket timeout (ms) Users Add user + Hardware decoding + Hardware decoding codecs + Video output + Audio output + GPU API \ No newline at end of file diff --git a/app/src/main/res/xml/fragment_settings_language.xml b/app/src/main/res/xml/fragment_settings_language.xml index bdbd99e4..478a2f34 100644 --- a/app/src/main/res/xml/fragment_settings_language.xml +++ b/app/src/main/res/xml/fragment_settings_language.xml @@ -5,7 +5,7 @@ app:entries="@array/languages" app:entryValues="@array/languages_values" app:icon="@drawable/ic_speaker" - app:key="audio_language" + app:key="pref_audio_language" app:title="@string/settings_preferred_audio_language" app:useSimpleSummaryProvider="true" /> @@ -14,7 +14,7 @@ app:entries="@array/languages" app:entryValues="@array/languages_values" app:icon="@drawable/ic_closed_caption" - app:key="subtitle_language" + app:key="pref_subtitle_language" app:title="@string/settings_preferred_subtitle_language" app:useSimpleSummaryProvider="true" /> \ No newline at end of file diff --git a/app/src/main/res/xml/fragment_settings_player.xml b/app/src/main/res/xml/fragment_settings_player.xml index 8ff3b76c..313cceac 100644 --- a/app/src/main/res/xml/fragment_settings_player.xml +++ b/app/src/main/res/xml/fragment_settings_player.xml @@ -7,19 +7,53 @@ + app:summary="@string/subtitles_summary" + app:title="@string/subtitles" /> - + + + + +