From a679bae3543e3550dd20c86f0d217ad2467320dd Mon Sep 17 00:00:00 2001 From: edde746 <86283021+edde746@users.noreply.github.com> Date: Mon, 18 May 2026 16:30:14 +0200 Subject: [PATCH] fix(android): expose DV conversion setting --- .../plezy/exoplayer/ExoPlayerPlugin.kt | 4 +++ lib/i18n/da.i18n.json | 6 ++++ lib/i18n/de.i18n.json | 6 ++++ lib/i18n/en.i18n.json | 6 ++++ lib/i18n/es.i18n.json | 6 ++++ lib/i18n/fr.i18n.json | 6 ++++ lib/i18n/it.i18n.json | 6 ++++ lib/i18n/ja.i18n.json | 6 ++++ lib/i18n/ko.i18n.json | 6 ++++ lib/i18n/nb.i18n.json | 6 ++++ lib/i18n/nl.i18n.json | 6 ++++ lib/i18n/pl.i18n.json | 6 ++++ lib/i18n/pt.i18n.json | 6 ++++ lib/i18n/ru.i18n.json | 6 ++++ lib/i18n/strings.g.dart | 4 +-- lib/i18n/strings_da.g.dart | 20 +++++++++--- lib/i18n/strings_de.g.dart | 20 +++++++++--- lib/i18n/strings_en.g.dart | 32 ++++++++++++++++--- lib/i18n/strings_es.g.dart | 20 +++++++++--- lib/i18n/strings_fr.g.dart | 20 +++++++++--- lib/i18n/strings_it.g.dart | 20 +++++++++--- lib/i18n/strings_ja.g.dart | 20 +++++++++--- lib/i18n/strings_ko.g.dart | 20 +++++++++--- lib/i18n/strings_nb.g.dart | 20 +++++++++--- lib/i18n/strings_nl.g.dart | 20 +++++++++--- lib/i18n/strings_pl.g.dart | 20 +++++++++--- lib/i18n/strings_pt.g.dart | 20 +++++++++--- lib/i18n/strings_ru.g.dart | 20 +++++++++--- lib/i18n/strings_sv.g.dart | 20 +++++++++--- lib/i18n/strings_zh.g.dart | 20 +++++++++--- lib/i18n/sv.i18n.json | 6 ++++ lib/i18n/zh.i18n.json | 6 ++++ lib/mpv/player/platform/player_android.dart | 5 ++- .../settings/playback_settings_screen.dart | 26 +++++++++++++++ lib/screens/video_player_screen.dart | 2 ++ lib/services/settings_service.dart | 17 ++++++++++ 36 files changed, 397 insertions(+), 63 deletions(-) diff --git a/android/app/src/main/kotlin/com/edde746/plezy/exoplayer/ExoPlayerPlugin.kt b/android/app/src/main/kotlin/com/edde746/plezy/exoplayer/ExoPlayerPlugin.kt index 0a3418b8..96589f94 100644 --- a/android/app/src/main/kotlin/com/edde746/plezy/exoplayer/ExoPlayerPlugin.kt +++ b/android/app/src/main/kotlin/com/edde746/plezy/exoplayer/ExoPlayerPlugin.kt @@ -180,6 +180,7 @@ class ExoPlayerPlugin : val bufferSizeBytes = call.argument("bufferSizeBytes") val tunnelingEnabled = call.argument("tunnelingEnabled") ?: true + val dvConversionMode = call.argument("dvConversionMode") ?: "auto" configuredBufferSizeBytes = bufferSizeBytes currentActivity.runOnUiThread { @@ -201,6 +202,9 @@ class ExoPlayerPlugin : bufferSizeBytes = bufferSizeBytes, tunnelingEnabled = tunnelingEnabled ) ?: false + if (success && playerCore?.setDebugDvConversionMode(dvConversionMode) != true) { + Log.w(TAG, "Invalid DV conversion mode during initialize: $dvConversionMode") + } // Start hidden playerCore?.setVisible(false) diff --git a/lib/i18n/da.i18n.json b/lib/i18n/da.i18n.json index 78241441..c7e507b6 100644 --- a/lib/i18n/da.i18n.json +++ b/lib/i18n/da.i18n.json @@ -248,6 +248,12 @@ "displaySwitchDelay": "Forsinkelse ved skærmskift", "tunneledPlayback": "Tunneleret afspilning", "tunneledPlaybackDescription": "Brug videotunneling. Slå fra, hvis HDR-afspilning viser sort video.", + "dvConversionMode": "Dolby Vision-konvertering", + "dvConversionModeDescription": "Vælg, hvordan ExoPlayer håndterer Dolby Vision Profile 7-filer.", + "dvConversionAuto": "Auto", + "dvConversionNative": "Native / deaktiveret", + "dvConversionDv81": "P7 → P8.1", + "dvConversionHevcStrip": "P7 → HEVC", "requireProfileSelectionOnOpen": "Spørg om profil ved åbning", "requireProfileSelectionOnOpenDescription": "Vis profilvalg hver gang appen åbnes", "forceTvMode": "Gennemtving TV-tilstand", diff --git a/lib/i18n/de.i18n.json b/lib/i18n/de.i18n.json index 944c658c..50d6a113 100644 --- a/lib/i18n/de.i18n.json +++ b/lib/i18n/de.i18n.json @@ -248,6 +248,12 @@ "displaySwitchDelay": "Verzögerung beim Displaywechsel", "tunneledPlayback": "Tunnelwiedergabe", "tunneledPlaybackDescription": "Video-Tunneling verwenden. Deaktivieren, wenn HDR-Wiedergabe schwarzes Video zeigt.", + "dvConversionMode": "Dolby-Vision-Konvertierung", + "dvConversionModeDescription": "Wähle, wie ExoPlayer Dolby-Vision-Profil-7-Dateien behandelt.", + "dvConversionAuto": "Automatisch", + "dvConversionNative": "Nativ / deaktiviert", + "dvConversionDv81": "P7 → P8.1", + "dvConversionHevcStrip": "P7 → HEVC", "requireProfileSelectionOnOpen": "Profil beim Öffnen abfragen", "requireProfileSelectionOnOpenDescription": "Profilauswahl bei jedem Öffnen der App anzeigen", "forceTvMode": "TV-Modus erzwingen", diff --git a/lib/i18n/en.i18n.json b/lib/i18n/en.i18n.json index c70b8fb9..cb131f92 100644 --- a/lib/i18n/en.i18n.json +++ b/lib/i18n/en.i18n.json @@ -248,6 +248,12 @@ "displaySwitchDelay": "Display Switch Delay", "tunneledPlayback": "Tunneled Playback", "tunneledPlaybackDescription": "Use video tunneling. Disable if HDR playback shows black video.", + "dvConversionMode": "Dolby Vision Conversion", + "dvConversionModeDescription": "Choose how ExoPlayer handles Dolby Vision Profile 7 files.", + "dvConversionAuto": "Auto", + "dvConversionNative": "Native / Disabled", + "dvConversionDv81": "P7 → P8.1", + "dvConversionHevcStrip": "P7 → HEVC", "requireProfileSelectionOnOpen": "Ask for profile on app open", "requireProfileSelectionOnOpenDescription": "Show profile selection every time the app is opened", "forceTvMode": "Force TV mode", diff --git a/lib/i18n/es.i18n.json b/lib/i18n/es.i18n.json index 6444aa4a..18eed773 100644 --- a/lib/i18n/es.i18n.json +++ b/lib/i18n/es.i18n.json @@ -248,6 +248,12 @@ "displaySwitchDelay": "Retraso de cambio de pantalla", "tunneledPlayback": "Reproducción tunelizada", "tunneledPlaybackDescription": "Usar tunelización de video. Desactívala si HDR muestra video negro.", + "dvConversionMode": "Conversión de Dolby Vision", + "dvConversionModeDescription": "Elige cómo ExoPlayer gestiona archivos Dolby Vision Profile 7.", + "dvConversionAuto": "Automático", + "dvConversionNative": "Nativo / desactivado", + "dvConversionDv81": "P7 → P8.1", + "dvConversionHevcStrip": "P7 → HEVC", "requireProfileSelectionOnOpen": "Pedir perfil al abrir la app", "requireProfileSelectionOnOpenDescription": "Mostrar selección de perfil cada vez que se abre la aplicación", "forceTvMode": "Forzar modo TV", diff --git a/lib/i18n/fr.i18n.json b/lib/i18n/fr.i18n.json index a4f2b115..2587e78d 100644 --- a/lib/i18n/fr.i18n.json +++ b/lib/i18n/fr.i18n.json @@ -248,6 +248,12 @@ "displaySwitchDelay": "Délai de changement d'affichage", "tunneledPlayback": "Lecture tunnelée", "tunneledPlaybackDescription": "Utiliser le tunneling vidéo. Désactivez si la lecture HDR affiche un écran noir.", + "dvConversionMode": "Conversion Dolby Vision", + "dvConversionModeDescription": "Choisissez comment ExoPlayer gère les fichiers Dolby Vision Profile 7.", + "dvConversionAuto": "Auto", + "dvConversionNative": "Natif / désactivé", + "dvConversionDv81": "P7 → P8.1", + "dvConversionHevcStrip": "P7 → HEVC", "requireProfileSelectionOnOpen": "Demander le profil à l'ouverture", "requireProfileSelectionOnOpenDescription": "Afficher la sélection de profil à chaque ouverture de l'application", "forceTvMode": "Forcer le mode TV", diff --git a/lib/i18n/it.i18n.json b/lib/i18n/it.i18n.json index 761f8f5e..a2687a5f 100644 --- a/lib/i18n/it.i18n.json +++ b/lib/i18n/it.i18n.json @@ -248,6 +248,12 @@ "displaySwitchDelay": "Ritardo cambio display", "tunneledPlayback": "Riproduzione tunnelizzata", "tunneledPlaybackDescription": "Usa tunneling video. Disattiva se la riproduzione HDR mostra video nero.", + "dvConversionMode": "Conversione Dolby Vision", + "dvConversionModeDescription": "Scegli come ExoPlayer gestisce i file Dolby Vision Profile 7.", + "dvConversionAuto": "Auto", + "dvConversionNative": "Nativo / disattivato", + "dvConversionDv81": "P7 → P8.1", + "dvConversionHevcStrip": "P7 → HEVC", "requireProfileSelectionOnOpen": "Chiedi profilo all'apertura", "requireProfileSelectionOnOpenDescription": "Mostra la selezione del profilo ogni volta che l'app viene aperta", "forceTvMode": "Forza modalità TV", diff --git a/lib/i18n/ja.i18n.json b/lib/i18n/ja.i18n.json index a39916c8..ae880a46 100644 --- a/lib/i18n/ja.i18n.json +++ b/lib/i18n/ja.i18n.json @@ -248,6 +248,12 @@ "displaySwitchDelay": "ディスプレイ切り替え遅延", "tunneledPlayback": "トンネル再生", "tunneledPlaybackDescription": "動画トンネリングを使用します。HDR再生で画面が黒くなる場合は無効にしてください。", + "dvConversionMode": "Dolby Vision 変換", + "dvConversionModeDescription": "ExoPlayer が Dolby Vision Profile 7 ファイルを処理する方法を選択します。", + "dvConversionAuto": "自動", + "dvConversionNative": "ネイティブ / 無効", + "dvConversionDv81": "P7 → P8.1", + "dvConversionHevcStrip": "P7 → HEVC", "requireProfileSelectionOnOpen": "アプリ起動時にプロフィールを確認", "requireProfileSelectionOnOpenDescription": "アプリを開くたびにプロフィール選択を表示", "forceTvMode": "TVモードを強制", diff --git a/lib/i18n/ko.i18n.json b/lib/i18n/ko.i18n.json index 0a905ec8..e811f23b 100644 --- a/lib/i18n/ko.i18n.json +++ b/lib/i18n/ko.i18n.json @@ -248,6 +248,12 @@ "displaySwitchDelay": "디스플레이 전환 지연", "tunneledPlayback": "터널 재생", "tunneledPlaybackDescription": "비디오 터널링을 사용합니다. HDR 재생 시 검은 화면이 보이면 비활성화하세요.", + "dvConversionMode": "Dolby Vision 변환", + "dvConversionModeDescription": "ExoPlayer가 Dolby Vision Profile 7 파일을 처리하는 방식을 선택합니다.", + "dvConversionAuto": "자동", + "dvConversionNative": "네이티브 / 비활성화", + "dvConversionDv81": "P7 → P8.1", + "dvConversionHevcStrip": "P7 → HEVC", "requireProfileSelectionOnOpen": "앱 실행 시 프로필 선택", "requireProfileSelectionOnOpenDescription": "앱을 열 때마다 프로필 선택 화면을 표시합니다", "forceTvMode": "TV 모드 강제 사용", diff --git a/lib/i18n/nb.i18n.json b/lib/i18n/nb.i18n.json index 70e2d163..77c3f4e8 100644 --- a/lib/i18n/nb.i18n.json +++ b/lib/i18n/nb.i18n.json @@ -248,6 +248,12 @@ "displaySwitchDelay": "Forsinkelse ved skjermbytte", "tunneledPlayback": "Tunnelert avspilling", "tunneledPlaybackDescription": "Bruk videotunneling. Slå av hvis HDR-avspilling viser svart video.", + "dvConversionMode": "Dolby Vision-konvertering", + "dvConversionModeDescription": "Velg hvordan ExoPlayer håndterer Dolby Vision Profile 7-filer.", + "dvConversionAuto": "Auto", + "dvConversionNative": "Innebygd / deaktivert", + "dvConversionDv81": "P7 → P8.1", + "dvConversionHevcStrip": "P7 → HEVC", "requireProfileSelectionOnOpen": "Spør om profil ved appåpning", "requireProfileSelectionOnOpenDescription": "Vis profilvalg hver gang appen åpnes", "forceTvMode": "Tving TV-modus", diff --git a/lib/i18n/nl.i18n.json b/lib/i18n/nl.i18n.json index 5244e98c..7bc233a1 100644 --- a/lib/i18n/nl.i18n.json +++ b/lib/i18n/nl.i18n.json @@ -248,6 +248,12 @@ "displaySwitchDelay": "Vertraging bij schermwisseling", "tunneledPlayback": "Getunnelde weergave", "tunneledPlaybackDescription": "Gebruik videotunneling. Schakel uit als HDR-afspelen zwart beeld geeft.", + "dvConversionMode": "Dolby Vision-conversie", + "dvConversionModeDescription": "Kies hoe ExoPlayer Dolby Vision Profile 7-bestanden verwerkt.", + "dvConversionAuto": "Auto", + "dvConversionNative": "Native / uitgeschakeld", + "dvConversionDv81": "P7 → P8.1", + "dvConversionHevcStrip": "P7 → HEVC", "requireProfileSelectionOnOpen": "Vraag om profiel bij openen", "requireProfileSelectionOnOpenDescription": "Toon profielselectie telkens wanneer de app wordt geopend", "forceTvMode": "TV-modus forceren", diff --git a/lib/i18n/pl.i18n.json b/lib/i18n/pl.i18n.json index 2345946b..800e142b 100644 --- a/lib/i18n/pl.i18n.json +++ b/lib/i18n/pl.i18n.json @@ -248,6 +248,12 @@ "displaySwitchDelay": "Opóźnienie przełączania ekranu", "tunneledPlayback": "Tunelowane odtwarzanie", "tunneledPlaybackDescription": "Użyj tunelowania wideo. Wyłącz, jeśli HDR pokazuje czarny obraz.", + "dvConversionMode": "Konwersja Dolby Vision", + "dvConversionModeDescription": "Wybierz, jak ExoPlayer obsługuje pliki Dolby Vision Profile 7.", + "dvConversionAuto": "Automatycznie", + "dvConversionNative": "Natywnie / wyłączone", + "dvConversionDv81": "P7 → P8.1", + "dvConversionHevcStrip": "P7 → HEVC", "requireProfileSelectionOnOpen": "Pytaj o profil przy otwarciu aplikacji", "requireProfileSelectionOnOpenDescription": "Pokaż wybór profilu za każdym razem, gdy aplikacja jest otwierana", "forceTvMode": "Wymuś tryb TV", diff --git a/lib/i18n/pt.i18n.json b/lib/i18n/pt.i18n.json index 685bd1b0..263df2e8 100644 --- a/lib/i18n/pt.i18n.json +++ b/lib/i18n/pt.i18n.json @@ -248,6 +248,12 @@ "displaySwitchDelay": "Atraso na Troca de Tela", "tunneledPlayback": "Reprodução Tunelizada", "tunneledPlaybackDescription": "Usar tunelamento de vídeo. Desative se HDR mostrar vídeo preto.", + "dvConversionMode": "Conversão Dolby Vision", + "dvConversionModeDescription": "Escolha como o ExoPlayer lida com arquivos Dolby Vision Profile 7.", + "dvConversionAuto": "Automático", + "dvConversionNative": "Nativo / desativado", + "dvConversionDv81": "P7 → P8.1", + "dvConversionHevcStrip": "P7 → HEVC", "requireProfileSelectionOnOpen": "Pedir perfil ao abrir o app", "requireProfileSelectionOnOpenDescription": "Mostrar seleção de perfil toda vez que o app for aberto", "forceTvMode": "Forçar modo TV", diff --git a/lib/i18n/ru.i18n.json b/lib/i18n/ru.i18n.json index 6da19c85..96e35559 100644 --- a/lib/i18n/ru.i18n.json +++ b/lib/i18n/ru.i18n.json @@ -248,6 +248,12 @@ "displaySwitchDelay": "Задержка переключения дисплея", "tunneledPlayback": "Туннельное воспроизведение", "tunneledPlaybackDescription": "Использовать видеотуннелирование. Отключите, если HDR показывает черный экран.", + "dvConversionMode": "Преобразование Dolby Vision", + "dvConversionModeDescription": "Выберите, как ExoPlayer обрабатывает файлы Dolby Vision Profile 7.", + "dvConversionAuto": "Авто", + "dvConversionNative": "Нативно / отключено", + "dvConversionDv81": "P7 → P8.1", + "dvConversionHevcStrip": "P7 → HEVC", "requireProfileSelectionOnOpen": "Запрашивать профиль при запуске", "requireProfileSelectionOnOpenDescription": "Показывать выбор профиля при каждом открытии приложения", "forceTvMode": "Принудительный режим ТВ", diff --git a/lib/i18n/strings.g.dart b/lib/i18n/strings.g.dart index 6a6c45a0..2c5049f2 100644 --- a/lib/i18n/strings.g.dart +++ b/lib/i18n/strings.g.dart @@ -4,9 +4,9 @@ /// To regenerate, run: `dart run slang` /// /// Locales: 15 -/// Strings: 17490 (1166 per locale) +/// Strings: 17580 (1172 per locale) /// -/// Built on 2026-05-16 at 21:43 UTC +/// Built on 2026-05-18 at 14:26 UTC // coverage:ignore-file // ignore_for_file: type=lint, unused_import diff --git a/lib/i18n/strings_da.g.dart b/lib/i18n/strings_da.g.dart index 63b831b5..d2386a65 100644 --- a/lib/i18n/strings_da.g.dart +++ b/lib/i18n/strings_da.g.dart @@ -376,6 +376,12 @@ class _TranslationsSettingsDa extends TranslationsSettingsEn { @override String get displaySwitchDelay => 'Forsinkelse ved skærmskift'; @override String get tunneledPlayback => 'Tunneleret afspilning'; @override String get tunneledPlaybackDescription => 'Brug videotunneling. Slå fra, hvis HDR-afspilning viser sort video.'; + @override String get dvConversionMode => 'Dolby Vision-konvertering'; + @override String get dvConversionModeDescription => 'Vælg, hvordan ExoPlayer håndterer Dolby Vision Profile 7-filer.'; + @override String get dvConversionAuto => 'Auto'; + @override String get dvConversionNative => 'Native / deaktiveret'; + @override String get dvConversionDv81 => 'P7 → P8.1'; + @override String get dvConversionHevcStrip => 'P7 → HEVC'; @override String get requireProfileSelectionOnOpen => 'Spørg om profil ved åbning'; @override String get requireProfileSelectionOnOpenDescription => 'Vis profilvalg hver gang appen åbnes'; @override String get forceTvMode => 'Gennemtving TV-tilstand'; @@ -2033,6 +2039,12 @@ extension on TranslationsDa { 'settings.displaySwitchDelay' => 'Forsinkelse ved skærmskift', 'settings.tunneledPlayback' => 'Tunneleret afspilning', 'settings.tunneledPlaybackDescription' => 'Brug videotunneling. Slå fra, hvis HDR-afspilning viser sort video.', + 'settings.dvConversionMode' => 'Dolby Vision-konvertering', + 'settings.dvConversionModeDescription' => 'Vælg, hvordan ExoPlayer håndterer Dolby Vision Profile 7-filer.', + 'settings.dvConversionAuto' => 'Auto', + 'settings.dvConversionNative' => 'Native / deaktiveret', + 'settings.dvConversionDv81' => 'P7 → P8.1', + 'settings.dvConversionHevcStrip' => 'P7 → HEVC', 'settings.requireProfileSelectionOnOpen' => 'Spørg om profil ved åbning', 'settings.requireProfileSelectionOnOpenDescription' => 'Vis profilvalg hver gang appen åbnes', 'settings.forceTvMode' => 'Gennemtving TV-tilstand', @@ -2301,14 +2313,14 @@ extension on TranslationsDa { 'profiles.signOut' => 'Log ud', 'profiles.signOutPlexTitle' => 'Log ud af Plex?', 'profiles.signOutPlexMessage' => ({required Object displayName}) => 'Fjern ${displayName} og alle Plex Home-brugere? Log ind igen når som helst.', + _ => null, + } ?? switch (path) { 'profiles.signedOutPlex' => 'Logget ud af Plex.', 'profiles.signOutFailed' => 'Log ud mislykkedes.', 'profiles.sectionTitle' => 'Profiler', 'profiles.summarySingle' => 'Tilføj profiler for at blande administrerede brugere og lokale identiteter', 'profiles.summaryMultipleWithActive' => ({required Object count, required Object activeName}) => '${count} profiler · aktiv: ${activeName}', 'profiles.summaryMultiple' => ({required Object count}) => '${count} profiler', - _ => null, - } ?? switch (path) { 'profiles.removeConnectionTitle' => 'Fjern forbindelse?', 'profiles.removeConnectionMessage' => ({required Object displayName, required Object connectionLabel}) => 'Fjern ${displayName}s adgang til ${connectionLabel}. Andre profiler beholder den.', 'profiles.deleteProfileTitle' => 'Slet profil?', @@ -2815,14 +2827,14 @@ extension on TranslationsDa { 'metadataEdit.summary' => 'Resumé', 'metadataEdit.poster' => 'Plakat', 'metadataEdit.background' => 'Baggrund', + _ => null, + } ?? switch (path) { 'metadataEdit.logo' => 'Logo', 'metadataEdit.squareArt' => 'Kvadratisk billede', 'metadataEdit.selectPoster' => 'Vælg plakat', 'metadataEdit.selectBackground' => 'Vælg baggrund', 'metadataEdit.selectLogo' => 'Vælg logo', 'metadataEdit.selectSquareArt' => 'Vælg kvadratisk billede', - _ => null, - } ?? switch (path) { 'metadataEdit.fromUrl' => 'Fra URL', 'metadataEdit.uploadFile' => 'Upload fil', 'metadataEdit.enterImageUrl' => 'Indtast billed-URL', diff --git a/lib/i18n/strings_de.g.dart b/lib/i18n/strings_de.g.dart index 99097701..5aeffbeb 100644 --- a/lib/i18n/strings_de.g.dart +++ b/lib/i18n/strings_de.g.dart @@ -376,6 +376,12 @@ class _TranslationsSettingsDe extends TranslationsSettingsEn { @override String get displaySwitchDelay => 'Verzögerung beim Displaywechsel'; @override String get tunneledPlayback => 'Tunnelwiedergabe'; @override String get tunneledPlaybackDescription => 'Video-Tunneling verwenden. Deaktivieren, wenn HDR-Wiedergabe schwarzes Video zeigt.'; + @override String get dvConversionMode => 'Dolby-Vision-Konvertierung'; + @override String get dvConversionModeDescription => 'Wähle, wie ExoPlayer Dolby-Vision-Profil-7-Dateien behandelt.'; + @override String get dvConversionAuto => 'Automatisch'; + @override String get dvConversionNative => 'Nativ / deaktiviert'; + @override String get dvConversionDv81 => 'P7 → P8.1'; + @override String get dvConversionHevcStrip => 'P7 → HEVC'; @override String get requireProfileSelectionOnOpen => 'Profil beim Öffnen abfragen'; @override String get requireProfileSelectionOnOpenDescription => 'Profilauswahl bei jedem Öffnen der App anzeigen'; @override String get forceTvMode => 'TV-Modus erzwingen'; @@ -2033,6 +2039,12 @@ extension on TranslationsDe { 'settings.displaySwitchDelay' => 'Verzögerung beim Displaywechsel', 'settings.tunneledPlayback' => 'Tunnelwiedergabe', 'settings.tunneledPlaybackDescription' => 'Video-Tunneling verwenden. Deaktivieren, wenn HDR-Wiedergabe schwarzes Video zeigt.', + 'settings.dvConversionMode' => 'Dolby-Vision-Konvertierung', + 'settings.dvConversionModeDescription' => 'Wähle, wie ExoPlayer Dolby-Vision-Profil-7-Dateien behandelt.', + 'settings.dvConversionAuto' => 'Automatisch', + 'settings.dvConversionNative' => 'Nativ / deaktiviert', + 'settings.dvConversionDv81' => 'P7 → P8.1', + 'settings.dvConversionHevcStrip' => 'P7 → HEVC', 'settings.requireProfileSelectionOnOpen' => 'Profil beim Öffnen abfragen', 'settings.requireProfileSelectionOnOpenDescription' => 'Profilauswahl bei jedem Öffnen der App anzeigen', 'settings.forceTvMode' => 'TV-Modus erzwingen', @@ -2301,14 +2313,14 @@ extension on TranslationsDe { 'profiles.signOut' => 'Abmelden', 'profiles.signOutPlexTitle' => 'Von Plex abmelden?', 'profiles.signOutPlexMessage' => ({required Object displayName}) => '${displayName} und alle Plex Home-Benutzer entfernen? Du kannst dich jederzeit wieder anmelden.', + _ => null, + } ?? switch (path) { 'profiles.signedOutPlex' => 'Von Plex abgemeldet.', 'profiles.signOutFailed' => 'Abmeldung fehlgeschlagen.', 'profiles.sectionTitle' => 'Profile', 'profiles.summarySingle' => 'Profile hinzufügen, um verwaltete Benutzer und lokale Identitäten zu mischen', 'profiles.summaryMultipleWithActive' => ({required Object count, required Object activeName}) => '${count} Profile · aktiv: ${activeName}', 'profiles.summaryMultiple' => ({required Object count}) => '${count} Profile', - _ => null, - } ?? switch (path) { 'profiles.removeConnectionTitle' => 'Verbindung entfernen?', 'profiles.removeConnectionMessage' => ({required Object displayName, required Object connectionLabel}) => 'Zugriff von ${displayName} auf ${connectionLabel} entfernen. Andere Profile behalten ihn.', 'profiles.deleteProfileTitle' => 'Profil löschen?', @@ -2815,14 +2827,14 @@ extension on TranslationsDe { 'metadataEdit.summary' => 'Zusammenfassung', 'metadataEdit.poster' => 'Poster', 'metadataEdit.background' => 'Hintergrund', + _ => null, + } ?? switch (path) { 'metadataEdit.logo' => 'Logo', 'metadataEdit.squareArt' => 'Quadratisches Bild', 'metadataEdit.selectPoster' => 'Poster auswählen', 'metadataEdit.selectBackground' => 'Hintergrund auswählen', 'metadataEdit.selectLogo' => 'Logo auswählen', 'metadataEdit.selectSquareArt' => 'Quadratisches Bild auswählen', - _ => null, - } ?? switch (path) { 'metadataEdit.fromUrl' => 'Von URL', 'metadataEdit.uploadFile' => 'Datei hochladen', 'metadataEdit.enterImageUrl' => 'Bild-URL eingeben', diff --git a/lib/i18n/strings_en.g.dart b/lib/i18n/strings_en.g.dart index b653c78c..8dbed8d2 100644 --- a/lib/i18n/strings_en.g.dart +++ b/lib/i18n/strings_en.g.dart @@ -854,6 +854,24 @@ class TranslationsSettingsEn { /// en: 'Use video tunneling. Disable if HDR playback shows black video.' String get tunneledPlaybackDescription => 'Use video tunneling. Disable if HDR playback shows black video.'; + /// en: 'Dolby Vision Conversion' + String get dvConversionMode => 'Dolby Vision Conversion'; + + /// en: 'Choose how ExoPlayer handles Dolby Vision Profile 7 files.' + String get dvConversionModeDescription => 'Choose how ExoPlayer handles Dolby Vision Profile 7 files.'; + + /// en: 'Auto' + String get dvConversionAuto => 'Auto'; + + /// en: 'Native / Disabled' + String get dvConversionNative => 'Native / Disabled'; + + /// en: 'P7 → P8.1' + String get dvConversionDv81 => 'P7 → P8.1'; + + /// en: 'P7 → HEVC' + String get dvConversionHevcStrip => 'P7 → HEVC'; + /// en: 'Ask for profile on app open' String get requireProfileSelectionOnOpen => 'Ask for profile on app open'; @@ -4371,6 +4389,12 @@ extension on Translations { 'settings.displaySwitchDelay' => 'Display Switch Delay', 'settings.tunneledPlayback' => 'Tunneled Playback', 'settings.tunneledPlaybackDescription' => 'Use video tunneling. Disable if HDR playback shows black video.', + 'settings.dvConversionMode' => 'Dolby Vision Conversion', + 'settings.dvConversionModeDescription' => 'Choose how ExoPlayer handles Dolby Vision Profile 7 files.', + 'settings.dvConversionAuto' => 'Auto', + 'settings.dvConversionNative' => 'Native / Disabled', + 'settings.dvConversionDv81' => 'P7 → P8.1', + 'settings.dvConversionHevcStrip' => 'P7 → HEVC', 'settings.requireProfileSelectionOnOpen' => 'Ask for profile on app open', 'settings.requireProfileSelectionOnOpenDescription' => 'Show profile selection every time the app is opened', 'settings.forceTvMode' => 'Force TV mode', @@ -4639,14 +4663,14 @@ extension on Translations { 'profiles.signOut' => 'Sign out', 'profiles.signOutPlexTitle' => 'Sign out of Plex?', 'profiles.signOutPlexMessage' => ({required Object displayName}) => 'Remove ${displayName} and all Plex Home users? Sign back in anytime.', + _ => null, + } ?? switch (path) { 'profiles.signedOutPlex' => 'Signed out of Plex.', 'profiles.signOutFailed' => 'Sign out failed.', 'profiles.sectionTitle' => 'Profiles', 'profiles.summarySingle' => 'Add profiles to mix managed users and local identities', 'profiles.summaryMultipleWithActive' => ({required Object count, required Object activeName}) => '${count} profiles · active: ${activeName}', 'profiles.summaryMultiple' => ({required Object count}) => '${count} profiles', - _ => null, - } ?? switch (path) { 'profiles.removeConnectionTitle' => 'Remove connection?', 'profiles.removeConnectionMessage' => ({required Object displayName, required Object connectionLabel}) => 'Remove ${displayName}\'s access to ${connectionLabel}. Other profiles keep it.', 'profiles.deleteProfileTitle' => 'Delete profile?', @@ -5153,14 +5177,14 @@ extension on Translations { 'metadataEdit.summary' => 'Summary', 'metadataEdit.poster' => 'Poster', 'metadataEdit.background' => 'Background', + _ => null, + } ?? switch (path) { 'metadataEdit.logo' => 'Logo', 'metadataEdit.squareArt' => 'Square Art', 'metadataEdit.selectPoster' => 'Select Poster', 'metadataEdit.selectBackground' => 'Select Background', 'metadataEdit.selectLogo' => 'Select Logo', 'metadataEdit.selectSquareArt' => 'Select Square Art', - _ => null, - } ?? switch (path) { 'metadataEdit.fromUrl' => 'From URL', 'metadataEdit.uploadFile' => 'Upload File', 'metadataEdit.enterImageUrl' => 'Enter image URL', diff --git a/lib/i18n/strings_es.g.dart b/lib/i18n/strings_es.g.dart index 93d8784e..1107ce58 100644 --- a/lib/i18n/strings_es.g.dart +++ b/lib/i18n/strings_es.g.dart @@ -376,6 +376,12 @@ class _TranslationsSettingsEs extends TranslationsSettingsEn { @override String get displaySwitchDelay => 'Retraso de cambio de pantalla'; @override String get tunneledPlayback => 'Reproducción tunelizada'; @override String get tunneledPlaybackDescription => 'Usar tunelización de video. Desactívala si HDR muestra video negro.'; + @override String get dvConversionMode => 'Conversión de Dolby Vision'; + @override String get dvConversionModeDescription => 'Elige cómo ExoPlayer gestiona archivos Dolby Vision Profile 7.'; + @override String get dvConversionAuto => 'Automático'; + @override String get dvConversionNative => 'Nativo / desactivado'; + @override String get dvConversionDv81 => 'P7 → P8.1'; + @override String get dvConversionHevcStrip => 'P7 → HEVC'; @override String get requireProfileSelectionOnOpen => 'Pedir perfil al abrir la app'; @override String get requireProfileSelectionOnOpenDescription => 'Mostrar selección de perfil cada vez que se abre la aplicación'; @override String get forceTvMode => 'Forzar modo TV'; @@ -2033,6 +2039,12 @@ extension on TranslationsEs { 'settings.displaySwitchDelay' => 'Retraso de cambio de pantalla', 'settings.tunneledPlayback' => 'Reproducción tunelizada', 'settings.tunneledPlaybackDescription' => 'Usar tunelización de video. Desactívala si HDR muestra video negro.', + 'settings.dvConversionMode' => 'Conversión de Dolby Vision', + 'settings.dvConversionModeDescription' => 'Elige cómo ExoPlayer gestiona archivos Dolby Vision Profile 7.', + 'settings.dvConversionAuto' => 'Automático', + 'settings.dvConversionNative' => 'Nativo / desactivado', + 'settings.dvConversionDv81' => 'P7 → P8.1', + 'settings.dvConversionHevcStrip' => 'P7 → HEVC', 'settings.requireProfileSelectionOnOpen' => 'Pedir perfil al abrir la app', 'settings.requireProfileSelectionOnOpenDescription' => 'Mostrar selección de perfil cada vez que se abre la aplicación', 'settings.forceTvMode' => 'Forzar modo TV', @@ -2301,14 +2313,14 @@ extension on TranslationsEs { 'profiles.signOut' => 'Cerrar sesión', 'profiles.signOutPlexTitle' => '¿Cerrar sesión de Plex?', 'profiles.signOutPlexMessage' => ({required Object displayName}) => '¿Eliminar ${displayName} y todos los usuarios de Plex Home? Puedes iniciar sesión de nuevo cuando quieras.', + _ => null, + } ?? switch (path) { 'profiles.signedOutPlex' => 'Sesión de Plex cerrada.', 'profiles.signOutFailed' => 'Error al cerrar sesión.', 'profiles.sectionTitle' => 'Perfiles', 'profiles.summarySingle' => 'Añade perfiles para mezclar usuarios gestionados e identidades locales', 'profiles.summaryMultipleWithActive' => ({required Object count, required Object activeName}) => '${count} perfiles · activo: ${activeName}', 'profiles.summaryMultiple' => ({required Object count}) => '${count} perfiles', - _ => null, - } ?? switch (path) { 'profiles.removeConnectionTitle' => '¿Eliminar conexión?', 'profiles.removeConnectionMessage' => ({required Object displayName, required Object connectionLabel}) => 'Eliminar el acceso de ${displayName} a ${connectionLabel}. Los demás perfiles lo conservan.', 'profiles.deleteProfileTitle' => '¿Eliminar perfil?', @@ -2815,14 +2827,14 @@ extension on TranslationsEs { 'metadataEdit.summary' => 'Resumen', 'metadataEdit.poster' => 'Póster', 'metadataEdit.background' => 'Fondo', + _ => null, + } ?? switch (path) { 'metadataEdit.logo' => 'Logo', 'metadataEdit.squareArt' => 'Imagen cuadrada', 'metadataEdit.selectPoster' => 'Seleccionar póster', 'metadataEdit.selectBackground' => 'Seleccionar fondo', 'metadataEdit.selectLogo' => 'Seleccionar logo', 'metadataEdit.selectSquareArt' => 'Seleccionar imagen cuadrada', - _ => null, - } ?? switch (path) { 'metadataEdit.fromUrl' => 'Desde URL', 'metadataEdit.uploadFile' => 'Subir archivo', 'metadataEdit.enterImageUrl' => 'Introducir URL de imagen', diff --git a/lib/i18n/strings_fr.g.dart b/lib/i18n/strings_fr.g.dart index 3f4375a6..873a9597 100644 --- a/lib/i18n/strings_fr.g.dart +++ b/lib/i18n/strings_fr.g.dart @@ -376,6 +376,12 @@ class _TranslationsSettingsFr extends TranslationsSettingsEn { @override String get displaySwitchDelay => 'Délai de changement d\'affichage'; @override String get tunneledPlayback => 'Lecture tunnelée'; @override String get tunneledPlaybackDescription => 'Utiliser le tunneling vidéo. Désactivez si la lecture HDR affiche un écran noir.'; + @override String get dvConversionMode => 'Conversion Dolby Vision'; + @override String get dvConversionModeDescription => 'Choisissez comment ExoPlayer gère les fichiers Dolby Vision Profile 7.'; + @override String get dvConversionAuto => 'Auto'; + @override String get dvConversionNative => 'Natif / désactivé'; + @override String get dvConversionDv81 => 'P7 → P8.1'; + @override String get dvConversionHevcStrip => 'P7 → HEVC'; @override String get requireProfileSelectionOnOpen => 'Demander le profil à l\'ouverture'; @override String get requireProfileSelectionOnOpenDescription => 'Afficher la sélection de profil à chaque ouverture de l\'application'; @override String get forceTvMode => 'Forcer le mode TV'; @@ -2033,6 +2039,12 @@ extension on TranslationsFr { 'settings.displaySwitchDelay' => 'Délai de changement d\'affichage', 'settings.tunneledPlayback' => 'Lecture tunnelée', 'settings.tunneledPlaybackDescription' => 'Utiliser le tunneling vidéo. Désactivez si la lecture HDR affiche un écran noir.', + 'settings.dvConversionMode' => 'Conversion Dolby Vision', + 'settings.dvConversionModeDescription' => 'Choisissez comment ExoPlayer gère les fichiers Dolby Vision Profile 7.', + 'settings.dvConversionAuto' => 'Auto', + 'settings.dvConversionNative' => 'Natif / désactivé', + 'settings.dvConversionDv81' => 'P7 → P8.1', + 'settings.dvConversionHevcStrip' => 'P7 → HEVC', 'settings.requireProfileSelectionOnOpen' => 'Demander le profil à l\'ouverture', 'settings.requireProfileSelectionOnOpenDescription' => 'Afficher la sélection de profil à chaque ouverture de l\'application', 'settings.forceTvMode' => 'Forcer le mode TV', @@ -2301,14 +2313,14 @@ extension on TranslationsFr { 'profiles.signOut' => 'Se déconnecter', 'profiles.signOutPlexTitle' => 'Se déconnecter de Plex ?', 'profiles.signOutPlexMessage' => ({required Object displayName}) => 'Supprimer ${displayName} et tous les utilisateurs Plex Home ? Reconnexion possible à tout moment.', + _ => null, + } ?? switch (path) { 'profiles.signedOutPlex' => 'Déconnecté de Plex.', 'profiles.signOutFailed' => 'Échec de la déconnexion.', 'profiles.sectionTitle' => 'Profils', 'profiles.summarySingle' => 'Ajoutez des profils pour mélanger utilisateurs gérés et identités locales', 'profiles.summaryMultipleWithActive' => ({required Object count, required Object activeName}) => '${count} profils · actif : ${activeName}', 'profiles.summaryMultiple' => ({required Object count}) => '${count} profils', - _ => null, - } ?? switch (path) { 'profiles.removeConnectionTitle' => 'Retirer la connexion ?', 'profiles.removeConnectionMessage' => ({required Object displayName, required Object connectionLabel}) => 'Supprimer l\'accès de ${displayName} à ${connectionLabel}. Les autres profils le conservent.', 'profiles.deleteProfileTitle' => 'Supprimer le profil ?', @@ -2815,14 +2827,14 @@ extension on TranslationsFr { 'metadataEdit.summary' => 'Résumé', 'metadataEdit.poster' => 'Affiche', 'metadataEdit.background' => 'Arrière-plan', + _ => null, + } ?? switch (path) { 'metadataEdit.logo' => 'Logo', 'metadataEdit.squareArt' => 'Image carrée', 'metadataEdit.selectPoster' => 'Sélectionner l\'affiche', 'metadataEdit.selectBackground' => 'Sélectionner l\'arrière-plan', 'metadataEdit.selectLogo' => 'Sélectionner le logo', 'metadataEdit.selectSquareArt' => 'Sélectionner l\'image carrée', - _ => null, - } ?? switch (path) { 'metadataEdit.fromUrl' => 'Depuis une URL', 'metadataEdit.uploadFile' => 'Importer un fichier', 'metadataEdit.enterImageUrl' => 'Entrer l\'URL de l\'image', diff --git a/lib/i18n/strings_it.g.dart b/lib/i18n/strings_it.g.dart index fe6fc06d..fd56046a 100644 --- a/lib/i18n/strings_it.g.dart +++ b/lib/i18n/strings_it.g.dart @@ -376,6 +376,12 @@ class _TranslationsSettingsIt extends TranslationsSettingsEn { @override String get displaySwitchDelay => 'Ritardo cambio display'; @override String get tunneledPlayback => 'Riproduzione tunnelizzata'; @override String get tunneledPlaybackDescription => 'Usa tunneling video. Disattiva se la riproduzione HDR mostra video nero.'; + @override String get dvConversionMode => 'Conversione Dolby Vision'; + @override String get dvConversionModeDescription => 'Scegli come ExoPlayer gestisce i file Dolby Vision Profile 7.'; + @override String get dvConversionAuto => 'Auto'; + @override String get dvConversionNative => 'Nativo / disattivato'; + @override String get dvConversionDv81 => 'P7 → P8.1'; + @override String get dvConversionHevcStrip => 'P7 → HEVC'; @override String get requireProfileSelectionOnOpen => 'Chiedi profilo all\'apertura'; @override String get requireProfileSelectionOnOpenDescription => 'Mostra la selezione del profilo ogni volta che l\'app viene aperta'; @override String get forceTvMode => 'Forza modalità TV'; @@ -2033,6 +2039,12 @@ extension on TranslationsIt { 'settings.displaySwitchDelay' => 'Ritardo cambio display', 'settings.tunneledPlayback' => 'Riproduzione tunnelizzata', 'settings.tunneledPlaybackDescription' => 'Usa tunneling video. Disattiva se la riproduzione HDR mostra video nero.', + 'settings.dvConversionMode' => 'Conversione Dolby Vision', + 'settings.dvConversionModeDescription' => 'Scegli come ExoPlayer gestisce i file Dolby Vision Profile 7.', + 'settings.dvConversionAuto' => 'Auto', + 'settings.dvConversionNative' => 'Nativo / disattivato', + 'settings.dvConversionDv81' => 'P7 → P8.1', + 'settings.dvConversionHevcStrip' => 'P7 → HEVC', 'settings.requireProfileSelectionOnOpen' => 'Chiedi profilo all\'apertura', 'settings.requireProfileSelectionOnOpenDescription' => 'Mostra la selezione del profilo ogni volta che l\'app viene aperta', 'settings.forceTvMode' => 'Forza modalità TV', @@ -2301,14 +2313,14 @@ extension on TranslationsIt { 'profiles.signOut' => 'Esci', 'profiles.signOutPlexTitle' => 'Uscire da Plex?', 'profiles.signOutPlexMessage' => ({required Object displayName}) => 'Rimuovere ${displayName} e tutti gli utenti Plex Home? Puoi accedere di nuovo quando vuoi.', + _ => null, + } ?? switch (path) { 'profiles.signedOutPlex' => 'Uscito da Plex.', 'profiles.signOutFailed' => 'Uscita non riuscita.', 'profiles.sectionTitle' => 'Profili', 'profiles.summarySingle' => 'Aggiungi profili per combinare utenti gestiti e identità locali', 'profiles.summaryMultipleWithActive' => ({required Object count, required Object activeName}) => '${count} profili · attivo: ${activeName}', 'profiles.summaryMultiple' => ({required Object count}) => '${count} profili', - _ => null, - } ?? switch (path) { 'profiles.removeConnectionTitle' => 'Rimuovere la connessione?', 'profiles.removeConnectionMessage' => ({required Object displayName, required Object connectionLabel}) => 'Rimuovi l\'accesso di ${displayName} a ${connectionLabel}. Gli altri profili lo mantengono.', 'profiles.deleteProfileTitle' => 'Eliminare il profilo?', @@ -2815,14 +2827,14 @@ extension on TranslationsIt { 'metadataEdit.summary' => 'Trama', 'metadataEdit.poster' => 'Poster', 'metadataEdit.background' => 'Sfondo', + _ => null, + } ?? switch (path) { 'metadataEdit.logo' => 'Logo', 'metadataEdit.squareArt' => 'Immagine quadrata', 'metadataEdit.selectPoster' => 'Seleziona poster', 'metadataEdit.selectBackground' => 'Seleziona sfondo', 'metadataEdit.selectLogo' => 'Seleziona logo', 'metadataEdit.selectSquareArt' => 'Seleziona immagine quadrata', - _ => null, - } ?? switch (path) { 'metadataEdit.fromUrl' => 'Da URL', 'metadataEdit.uploadFile' => 'Carica file', 'metadataEdit.enterImageUrl' => 'Inserisci URL immagine', diff --git a/lib/i18n/strings_ja.g.dart b/lib/i18n/strings_ja.g.dart index 4df7d160..3b61e3b3 100644 --- a/lib/i18n/strings_ja.g.dart +++ b/lib/i18n/strings_ja.g.dart @@ -376,6 +376,12 @@ class _TranslationsSettingsJa extends TranslationsSettingsEn { @override String get displaySwitchDelay => 'ディスプレイ切り替え遅延'; @override String get tunneledPlayback => 'トンネル再生'; @override String get tunneledPlaybackDescription => '動画トンネリングを使用します。HDR再生で画面が黒くなる場合は無効にしてください。'; + @override String get dvConversionMode => 'Dolby Vision 変換'; + @override String get dvConversionModeDescription => 'ExoPlayer が Dolby Vision Profile 7 ファイルを処理する方法を選択します。'; + @override String get dvConversionAuto => '自動'; + @override String get dvConversionNative => 'ネイティブ / 無効'; + @override String get dvConversionDv81 => 'P7 → P8.1'; + @override String get dvConversionHevcStrip => 'P7 → HEVC'; @override String get requireProfileSelectionOnOpen => 'アプリ起動時にプロフィールを確認'; @override String get requireProfileSelectionOnOpenDescription => 'アプリを開くたびにプロフィール選択を表示'; @override String get forceTvMode => 'TVモードを強制'; @@ -2033,6 +2039,12 @@ extension on TranslationsJa { 'settings.displaySwitchDelay' => 'ディスプレイ切り替え遅延', 'settings.tunneledPlayback' => 'トンネル再生', 'settings.tunneledPlaybackDescription' => '動画トンネリングを使用します。HDR再生で画面が黒くなる場合は無効にしてください。', + 'settings.dvConversionMode' => 'Dolby Vision 変換', + 'settings.dvConversionModeDescription' => 'ExoPlayer が Dolby Vision Profile 7 ファイルを処理する方法を選択します。', + 'settings.dvConversionAuto' => '自動', + 'settings.dvConversionNative' => 'ネイティブ / 無効', + 'settings.dvConversionDv81' => 'P7 → P8.1', + 'settings.dvConversionHevcStrip' => 'P7 → HEVC', 'settings.requireProfileSelectionOnOpen' => 'アプリ起動時にプロフィールを確認', 'settings.requireProfileSelectionOnOpenDescription' => 'アプリを開くたびにプロフィール選択を表示', 'settings.forceTvMode' => 'TVモードを強制', @@ -2301,14 +2313,14 @@ extension on TranslationsJa { 'profiles.signOut' => 'サインアウト', 'profiles.signOutPlexTitle' => 'Plex からサインアウトしますか?', 'profiles.signOutPlexMessage' => ({required Object displayName}) => '${displayName}とすべてのPlex Homeユーザーを削除しますか?いつでも再サインインできます。', + _ => null, + } ?? switch (path) { 'profiles.signedOutPlex' => 'Plex からサインアウトしました。', 'profiles.signOutFailed' => 'サインアウトに失敗しました。', 'profiles.sectionTitle' => 'プロファイル', 'profiles.summarySingle' => 'プロファイルを追加して、管理対象ユーザーとローカルIDを混在させます', 'profiles.summaryMultipleWithActive' => ({required Object count, required Object activeName}) => '${count}個のプロファイル · アクティブ: ${activeName}', 'profiles.summaryMultiple' => ({required Object count}) => '${count}個のプロファイル', - _ => null, - } ?? switch (path) { 'profiles.removeConnectionTitle' => '接続を削除しますか?', 'profiles.removeConnectionMessage' => ({required Object displayName, required Object connectionLabel}) => '${displayName}の${connectionLabel}へのアクセスを削除します。他のプロフィールには残ります。', 'profiles.deleteProfileTitle' => 'プロファイルを削除しますか?', @@ -2815,14 +2827,14 @@ extension on TranslationsJa { 'metadataEdit.summary' => 'あらすじ', 'metadataEdit.poster' => 'ポスター', 'metadataEdit.background' => '背景', + _ => null, + } ?? switch (path) { 'metadataEdit.logo' => 'ロゴ', 'metadataEdit.squareArt' => '正方形アート', 'metadataEdit.selectPoster' => 'ポスターを選択', 'metadataEdit.selectBackground' => '背景を選択', 'metadataEdit.selectLogo' => 'ロゴを選択', 'metadataEdit.selectSquareArt' => '正方形アートを選択', - _ => null, - } ?? switch (path) { 'metadataEdit.fromUrl' => 'URLから', 'metadataEdit.uploadFile' => 'ファイルをアップロード', 'metadataEdit.enterImageUrl' => '画像URLを入力', diff --git a/lib/i18n/strings_ko.g.dart b/lib/i18n/strings_ko.g.dart index f36e3fc1..11ecac4d 100644 --- a/lib/i18n/strings_ko.g.dart +++ b/lib/i18n/strings_ko.g.dart @@ -376,6 +376,12 @@ class _TranslationsSettingsKo extends TranslationsSettingsEn { @override String get displaySwitchDelay => '디스플레이 전환 지연'; @override String get tunneledPlayback => '터널 재생'; @override String get tunneledPlaybackDescription => '비디오 터널링을 사용합니다. HDR 재생 시 검은 화면이 보이면 비활성화하세요.'; + @override String get dvConversionMode => 'Dolby Vision 변환'; + @override String get dvConversionModeDescription => 'ExoPlayer가 Dolby Vision Profile 7 파일을 처리하는 방식을 선택합니다.'; + @override String get dvConversionAuto => '자동'; + @override String get dvConversionNative => '네이티브 / 비활성화'; + @override String get dvConversionDv81 => 'P7 → P8.1'; + @override String get dvConversionHevcStrip => 'P7 → HEVC'; @override String get requireProfileSelectionOnOpen => '앱 실행 시 프로필 선택'; @override String get requireProfileSelectionOnOpenDescription => '앱을 열 때마다 프로필 선택 화면을 표시합니다'; @override String get forceTvMode => 'TV 모드 강제 사용'; @@ -2033,6 +2039,12 @@ extension on TranslationsKo { 'settings.displaySwitchDelay' => '디스플레이 전환 지연', 'settings.tunneledPlayback' => '터널 재생', 'settings.tunneledPlaybackDescription' => '비디오 터널링을 사용합니다. HDR 재생 시 검은 화면이 보이면 비활성화하세요.', + 'settings.dvConversionMode' => 'Dolby Vision 변환', + 'settings.dvConversionModeDescription' => 'ExoPlayer가 Dolby Vision Profile 7 파일을 처리하는 방식을 선택합니다.', + 'settings.dvConversionAuto' => '자동', + 'settings.dvConversionNative' => '네이티브 / 비활성화', + 'settings.dvConversionDv81' => 'P7 → P8.1', + 'settings.dvConversionHevcStrip' => 'P7 → HEVC', 'settings.requireProfileSelectionOnOpen' => '앱 실행 시 프로필 선택', 'settings.requireProfileSelectionOnOpenDescription' => '앱을 열 때마다 프로필 선택 화면을 표시합니다', 'settings.forceTvMode' => 'TV 모드 강제 사용', @@ -2301,14 +2313,14 @@ extension on TranslationsKo { 'profiles.signOut' => '로그아웃', 'profiles.signOutPlexTitle' => 'Plex에서 로그아웃하시겠습니까?', 'profiles.signOutPlexMessage' => ({required Object displayName}) => '${displayName} 및 모든 Plex Home 사용자를 제거할까요? 언제든 다시 로그인할 수 있습니다.', + _ => null, + } ?? switch (path) { 'profiles.signedOutPlex' => 'Plex에서 로그아웃되었습니다.', 'profiles.signOutFailed' => '로그아웃에 실패했습니다.', 'profiles.sectionTitle' => '프로필', 'profiles.summarySingle' => '관리되는 사용자와 로컬 ID를 혼합하려면 프로필을 추가하세요', 'profiles.summaryMultipleWithActive' => ({required Object count, required Object activeName}) => '${count}개 프로필 · 활성: ${activeName}', 'profiles.summaryMultiple' => ({required Object count}) => '${count}개 프로필', - _ => null, - } ?? switch (path) { 'profiles.removeConnectionTitle' => '연결을 제거하시겠습니까?', 'profiles.removeConnectionMessage' => ({required Object displayName, required Object connectionLabel}) => '${displayName}의 ${connectionLabel} 접근 권한을 제거합니다. 다른 프로필에는 유지됩니다.', 'profiles.deleteProfileTitle' => '프로필을 삭제하시겠습니까?', @@ -2815,14 +2827,14 @@ extension on TranslationsKo { 'metadataEdit.summary' => '줄거리', 'metadataEdit.poster' => '포스터', 'metadataEdit.background' => '배경', + _ => null, + } ?? switch (path) { 'metadataEdit.logo' => '로고', 'metadataEdit.squareArt' => '정사각형 아트', 'metadataEdit.selectPoster' => '포스터 선택', 'metadataEdit.selectBackground' => '배경 선택', 'metadataEdit.selectLogo' => '로고 선택', 'metadataEdit.selectSquareArt' => '정사각형 아트 선택', - _ => null, - } ?? switch (path) { 'metadataEdit.fromUrl' => 'URL에서', 'metadataEdit.uploadFile' => '파일 업로드', 'metadataEdit.enterImageUrl' => '이미지 URL 입력', diff --git a/lib/i18n/strings_nb.g.dart b/lib/i18n/strings_nb.g.dart index a8c80fbf..6f8e8995 100644 --- a/lib/i18n/strings_nb.g.dart +++ b/lib/i18n/strings_nb.g.dart @@ -376,6 +376,12 @@ class _TranslationsSettingsNb extends TranslationsSettingsEn { @override String get displaySwitchDelay => 'Forsinkelse ved skjermbytte'; @override String get tunneledPlayback => 'Tunnelert avspilling'; @override String get tunneledPlaybackDescription => 'Bruk videotunneling. Slå av hvis HDR-avspilling viser svart video.'; + @override String get dvConversionMode => 'Dolby Vision-konvertering'; + @override String get dvConversionModeDescription => 'Velg hvordan ExoPlayer håndterer Dolby Vision Profile 7-filer.'; + @override String get dvConversionAuto => 'Auto'; + @override String get dvConversionNative => 'Innebygd / deaktivert'; + @override String get dvConversionDv81 => 'P7 → P8.1'; + @override String get dvConversionHevcStrip => 'P7 → HEVC'; @override String get requireProfileSelectionOnOpen => 'Spør om profil ved appåpning'; @override String get requireProfileSelectionOnOpenDescription => 'Vis profilvalg hver gang appen åpnes'; @override String get forceTvMode => 'Tving TV-modus'; @@ -2033,6 +2039,12 @@ extension on TranslationsNb { 'settings.displaySwitchDelay' => 'Forsinkelse ved skjermbytte', 'settings.tunneledPlayback' => 'Tunnelert avspilling', 'settings.tunneledPlaybackDescription' => 'Bruk videotunneling. Slå av hvis HDR-avspilling viser svart video.', + 'settings.dvConversionMode' => 'Dolby Vision-konvertering', + 'settings.dvConversionModeDescription' => 'Velg hvordan ExoPlayer håndterer Dolby Vision Profile 7-filer.', + 'settings.dvConversionAuto' => 'Auto', + 'settings.dvConversionNative' => 'Innebygd / deaktivert', + 'settings.dvConversionDv81' => 'P7 → P8.1', + 'settings.dvConversionHevcStrip' => 'P7 → HEVC', 'settings.requireProfileSelectionOnOpen' => 'Spør om profil ved appåpning', 'settings.requireProfileSelectionOnOpenDescription' => 'Vis profilvalg hver gang appen åpnes', 'settings.forceTvMode' => 'Tving TV-modus', @@ -2301,14 +2313,14 @@ extension on TranslationsNb { 'profiles.signOut' => 'Logg ut', 'profiles.signOutPlexTitle' => 'Logge ut av Plex?', 'profiles.signOutPlexMessage' => ({required Object displayName}) => 'Fjerne ${displayName} og alle Plex Home-brukere? Du kan logge inn igjen når som helst.', + _ => null, + } ?? switch (path) { 'profiles.signedOutPlex' => 'Logget ut av Plex.', 'profiles.signOutFailed' => 'Utlogging mislyktes.', 'profiles.sectionTitle' => 'Profiler', 'profiles.summarySingle' => 'Legg til profiler for å blande administrerte brukere og lokale identiteter', 'profiles.summaryMultipleWithActive' => ({required Object count, required Object activeName}) => '${count} profiler · aktiv: ${activeName}', 'profiles.summaryMultiple' => ({required Object count}) => '${count} profiler', - _ => null, - } ?? switch (path) { 'profiles.removeConnectionTitle' => 'Fjerne tilkobling?', 'profiles.removeConnectionMessage' => ({required Object displayName, required Object connectionLabel}) => 'Fjern ${displayName}s tilgang til ${connectionLabel}. Andre profiler beholder den.', 'profiles.deleteProfileTitle' => 'Slette profil?', @@ -2815,14 +2827,14 @@ extension on TranslationsNb { 'metadataEdit.summary' => 'Sammendrag', 'metadataEdit.poster' => 'Plakat', 'metadataEdit.background' => 'Bakgrunn', + _ => null, + } ?? switch (path) { 'metadataEdit.logo' => 'Logo', 'metadataEdit.squareArt' => 'Kvadratisk bilde', 'metadataEdit.selectPoster' => 'Velg plakat', 'metadataEdit.selectBackground' => 'Velg bakgrunn', 'metadataEdit.selectLogo' => 'Velg logo', 'metadataEdit.selectSquareArt' => 'Velg kvadratisk bilde', - _ => null, - } ?? switch (path) { 'metadataEdit.fromUrl' => 'Fra URL', 'metadataEdit.uploadFile' => 'Last opp fil', 'metadataEdit.enterImageUrl' => 'Skriv inn bilde-URL', diff --git a/lib/i18n/strings_nl.g.dart b/lib/i18n/strings_nl.g.dart index 6d4e2a76..f7e010b1 100644 --- a/lib/i18n/strings_nl.g.dart +++ b/lib/i18n/strings_nl.g.dart @@ -376,6 +376,12 @@ class _TranslationsSettingsNl extends TranslationsSettingsEn { @override String get displaySwitchDelay => 'Vertraging bij schermwisseling'; @override String get tunneledPlayback => 'Getunnelde weergave'; @override String get tunneledPlaybackDescription => 'Gebruik videotunneling. Schakel uit als HDR-afspelen zwart beeld geeft.'; + @override String get dvConversionMode => 'Dolby Vision-conversie'; + @override String get dvConversionModeDescription => 'Kies hoe ExoPlayer Dolby Vision Profile 7-bestanden verwerkt.'; + @override String get dvConversionAuto => 'Auto'; + @override String get dvConversionNative => 'Native / uitgeschakeld'; + @override String get dvConversionDv81 => 'P7 → P8.1'; + @override String get dvConversionHevcStrip => 'P7 → HEVC'; @override String get requireProfileSelectionOnOpen => 'Vraag om profiel bij openen'; @override String get requireProfileSelectionOnOpenDescription => 'Toon profielselectie telkens wanneer de app wordt geopend'; @override String get forceTvMode => 'TV-modus forceren'; @@ -2033,6 +2039,12 @@ extension on TranslationsNl { 'settings.displaySwitchDelay' => 'Vertraging bij schermwisseling', 'settings.tunneledPlayback' => 'Getunnelde weergave', 'settings.tunneledPlaybackDescription' => 'Gebruik videotunneling. Schakel uit als HDR-afspelen zwart beeld geeft.', + 'settings.dvConversionMode' => 'Dolby Vision-conversie', + 'settings.dvConversionModeDescription' => 'Kies hoe ExoPlayer Dolby Vision Profile 7-bestanden verwerkt.', + 'settings.dvConversionAuto' => 'Auto', + 'settings.dvConversionNative' => 'Native / uitgeschakeld', + 'settings.dvConversionDv81' => 'P7 → P8.1', + 'settings.dvConversionHevcStrip' => 'P7 → HEVC', 'settings.requireProfileSelectionOnOpen' => 'Vraag om profiel bij openen', 'settings.requireProfileSelectionOnOpenDescription' => 'Toon profielselectie telkens wanneer de app wordt geopend', 'settings.forceTvMode' => 'TV-modus forceren', @@ -2301,14 +2313,14 @@ extension on TranslationsNl { 'profiles.signOut' => 'Afmelden', 'profiles.signOutPlexTitle' => 'Afmelden bij Plex?', 'profiles.signOutPlexMessage' => ({required Object displayName}) => '${displayName} en alle Plex Home-gebruikers verwijderen? Je kunt altijd opnieuw inloggen.', + _ => null, + } ?? switch (path) { 'profiles.signedOutPlex' => 'Afgemeld bij Plex.', 'profiles.signOutFailed' => 'Afmelden mislukt.', 'profiles.sectionTitle' => 'Profielen', 'profiles.summarySingle' => 'Voeg profielen toe om beheerde gebruikers en lokale identiteiten te combineren', 'profiles.summaryMultipleWithActive' => ({required Object count, required Object activeName}) => '${count} profielen · actief: ${activeName}', 'profiles.summaryMultiple' => ({required Object count}) => '${count} profielen', - _ => null, - } ?? switch (path) { 'profiles.removeConnectionTitle' => 'Verbinding verwijderen?', 'profiles.removeConnectionMessage' => ({required Object displayName, required Object connectionLabel}) => 'Verwijder ${displayName}s toegang tot ${connectionLabel}. Andere profielen behouden die.', 'profiles.deleteProfileTitle' => 'Profiel verwijderen?', @@ -2815,14 +2827,14 @@ extension on TranslationsNl { 'metadataEdit.summary' => 'Samenvatting', 'metadataEdit.poster' => 'Poster', 'metadataEdit.background' => 'Achtergrond', + _ => null, + } ?? switch (path) { 'metadataEdit.logo' => 'Logo', 'metadataEdit.squareArt' => 'Vierkante afbeelding', 'metadataEdit.selectPoster' => 'Poster selecteren', 'metadataEdit.selectBackground' => 'Achtergrond selecteren', 'metadataEdit.selectLogo' => 'Logo selecteren', 'metadataEdit.selectSquareArt' => 'Vierkante afbeelding selecteren', - _ => null, - } ?? switch (path) { 'metadataEdit.fromUrl' => 'Vanaf URL', 'metadataEdit.uploadFile' => 'Bestand uploaden', 'metadataEdit.enterImageUrl' => 'Voer afbeeldings-URL in', diff --git a/lib/i18n/strings_pl.g.dart b/lib/i18n/strings_pl.g.dart index 19bb7f53..0580ef28 100644 --- a/lib/i18n/strings_pl.g.dart +++ b/lib/i18n/strings_pl.g.dart @@ -376,6 +376,12 @@ class _TranslationsSettingsPl extends TranslationsSettingsEn { @override String get displaySwitchDelay => 'Opóźnienie przełączania ekranu'; @override String get tunneledPlayback => 'Tunelowane odtwarzanie'; @override String get tunneledPlaybackDescription => 'Użyj tunelowania wideo. Wyłącz, jeśli HDR pokazuje czarny obraz.'; + @override String get dvConversionMode => 'Konwersja Dolby Vision'; + @override String get dvConversionModeDescription => 'Wybierz, jak ExoPlayer obsługuje pliki Dolby Vision Profile 7.'; + @override String get dvConversionAuto => 'Automatycznie'; + @override String get dvConversionNative => 'Natywnie / wyłączone'; + @override String get dvConversionDv81 => 'P7 → P8.1'; + @override String get dvConversionHevcStrip => 'P7 → HEVC'; @override String get requireProfileSelectionOnOpen => 'Pytaj o profil przy otwarciu aplikacji'; @override String get requireProfileSelectionOnOpenDescription => 'Pokaż wybór profilu za każdym razem, gdy aplikacja jest otwierana'; @override String get forceTvMode => 'Wymuś tryb TV'; @@ -2033,6 +2039,12 @@ extension on TranslationsPl { 'settings.displaySwitchDelay' => 'Opóźnienie przełączania ekranu', 'settings.tunneledPlayback' => 'Tunelowane odtwarzanie', 'settings.tunneledPlaybackDescription' => 'Użyj tunelowania wideo. Wyłącz, jeśli HDR pokazuje czarny obraz.', + 'settings.dvConversionMode' => 'Konwersja Dolby Vision', + 'settings.dvConversionModeDescription' => 'Wybierz, jak ExoPlayer obsługuje pliki Dolby Vision Profile 7.', + 'settings.dvConversionAuto' => 'Automatycznie', + 'settings.dvConversionNative' => 'Natywnie / wyłączone', + 'settings.dvConversionDv81' => 'P7 → P8.1', + 'settings.dvConversionHevcStrip' => 'P7 → HEVC', 'settings.requireProfileSelectionOnOpen' => 'Pytaj o profil przy otwarciu aplikacji', 'settings.requireProfileSelectionOnOpenDescription' => 'Pokaż wybór profilu za każdym razem, gdy aplikacja jest otwierana', 'settings.forceTvMode' => 'Wymuś tryb TV', @@ -2301,14 +2313,14 @@ extension on TranslationsPl { 'profiles.signOut' => 'Wyloguj się', 'profiles.signOutPlexTitle' => 'Wylogować się z Plex?', 'profiles.signOutPlexMessage' => ({required Object displayName}) => 'Usunąć ${displayName} i wszystkich użytkowników Plex Home? Możesz zalogować się ponownie w każdej chwili.', + _ => null, + } ?? switch (path) { 'profiles.signedOutPlex' => 'Wylogowano z Plex.', 'profiles.signOutFailed' => 'Wylogowanie nie powiodło się.', 'profiles.sectionTitle' => 'Profile', 'profiles.summarySingle' => 'Dodaj profile, aby łączyć zarządzanych użytkowników i tożsamości lokalne', 'profiles.summaryMultipleWithActive' => ({required Object count, required Object activeName}) => '${count} profili · aktywny: ${activeName}', 'profiles.summaryMultiple' => ({required Object count}) => '${count} profili', - _ => null, - } ?? switch (path) { 'profiles.removeConnectionTitle' => 'Usunąć połączenie?', 'profiles.removeConnectionMessage' => ({required Object displayName, required Object connectionLabel}) => 'Usuń dostęp ${displayName} do ${connectionLabel}. Inne profile go zachowają.', 'profiles.deleteProfileTitle' => 'Usunąć profil?', @@ -2815,14 +2827,14 @@ extension on TranslationsPl { 'metadataEdit.summary' => 'Opis', 'metadataEdit.poster' => 'Plakat', 'metadataEdit.background' => 'Tło', + _ => null, + } ?? switch (path) { 'metadataEdit.logo' => 'Logo', 'metadataEdit.squareArt' => 'Kwadratowy obraz', 'metadataEdit.selectPoster' => 'Wybierz plakat', 'metadataEdit.selectBackground' => 'Wybierz tło', 'metadataEdit.selectLogo' => 'Wybierz logo', 'metadataEdit.selectSquareArt' => 'Wybierz kwadratowy obraz', - _ => null, - } ?? switch (path) { 'metadataEdit.fromUrl' => 'Z URL', 'metadataEdit.uploadFile' => 'Prześlij plik', 'metadataEdit.enterImageUrl' => 'Wprowadź URL obrazu', diff --git a/lib/i18n/strings_pt.g.dart b/lib/i18n/strings_pt.g.dart index 8de947b1..667449ce 100644 --- a/lib/i18n/strings_pt.g.dart +++ b/lib/i18n/strings_pt.g.dart @@ -376,6 +376,12 @@ class _TranslationsSettingsPt extends TranslationsSettingsEn { @override String get displaySwitchDelay => 'Atraso na Troca de Tela'; @override String get tunneledPlayback => 'Reprodução Tunelizada'; @override String get tunneledPlaybackDescription => 'Usar tunelamento de vídeo. Desative se HDR mostrar vídeo preto.'; + @override String get dvConversionMode => 'Conversão Dolby Vision'; + @override String get dvConversionModeDescription => 'Escolha como o ExoPlayer lida com arquivos Dolby Vision Profile 7.'; + @override String get dvConversionAuto => 'Automático'; + @override String get dvConversionNative => 'Nativo / desativado'; + @override String get dvConversionDv81 => 'P7 → P8.1'; + @override String get dvConversionHevcStrip => 'P7 → HEVC'; @override String get requireProfileSelectionOnOpen => 'Pedir perfil ao abrir o app'; @override String get requireProfileSelectionOnOpenDescription => 'Mostrar seleção de perfil toda vez que o app for aberto'; @override String get forceTvMode => 'Forçar modo TV'; @@ -2033,6 +2039,12 @@ extension on TranslationsPt { 'settings.displaySwitchDelay' => 'Atraso na Troca de Tela', 'settings.tunneledPlayback' => 'Reprodução Tunelizada', 'settings.tunneledPlaybackDescription' => 'Usar tunelamento de vídeo. Desative se HDR mostrar vídeo preto.', + 'settings.dvConversionMode' => 'Conversão Dolby Vision', + 'settings.dvConversionModeDescription' => 'Escolha como o ExoPlayer lida com arquivos Dolby Vision Profile 7.', + 'settings.dvConversionAuto' => 'Automático', + 'settings.dvConversionNative' => 'Nativo / desativado', + 'settings.dvConversionDv81' => 'P7 → P8.1', + 'settings.dvConversionHevcStrip' => 'P7 → HEVC', 'settings.requireProfileSelectionOnOpen' => 'Pedir perfil ao abrir o app', 'settings.requireProfileSelectionOnOpenDescription' => 'Mostrar seleção de perfil toda vez que o app for aberto', 'settings.forceTvMode' => 'Forçar modo TV', @@ -2301,14 +2313,14 @@ extension on TranslationsPt { 'profiles.signOut' => 'Sair', 'profiles.signOutPlexTitle' => 'Sair do Plex?', 'profiles.signOutPlexMessage' => ({required Object displayName}) => 'Remover ${displayName} e todos os usuários Plex Home? Você pode entrar novamente quando quiser.', + _ => null, + } ?? switch (path) { 'profiles.signedOutPlex' => 'Saiu do Plex.', 'profiles.signOutFailed' => 'Falha ao sair.', 'profiles.sectionTitle' => 'Perfis', 'profiles.summarySingle' => 'Adicione perfis para mesclar usuários gerenciados e identidades locais', 'profiles.summaryMultipleWithActive' => ({required Object count, required Object activeName}) => '${count} perfis · ativo: ${activeName}', 'profiles.summaryMultiple' => ({required Object count}) => '${count} perfis', - _ => null, - } ?? switch (path) { 'profiles.removeConnectionTitle' => 'Remover conexão?', 'profiles.removeConnectionMessage' => ({required Object displayName, required Object connectionLabel}) => 'Remover acesso de ${displayName} a ${connectionLabel}. Outros perfis mantêm o acesso.', 'profiles.deleteProfileTitle' => 'Excluir perfil?', @@ -2815,14 +2827,14 @@ extension on TranslationsPt { 'metadataEdit.summary' => 'Sinopse', 'metadataEdit.poster' => 'Poster', 'metadataEdit.background' => 'Plano de Fundo', + _ => null, + } ?? switch (path) { 'metadataEdit.logo' => 'Logo', 'metadataEdit.squareArt' => 'Imagem Quadrada', 'metadataEdit.selectPoster' => 'Selecionar Poster', 'metadataEdit.selectBackground' => 'Selecionar Plano de Fundo', 'metadataEdit.selectLogo' => 'Selecionar Logo', 'metadataEdit.selectSquareArt' => 'Selecionar Imagem Quadrada', - _ => null, - } ?? switch (path) { 'metadataEdit.fromUrl' => 'Da URL', 'metadataEdit.uploadFile' => 'Enviar Arquivo', 'metadataEdit.enterImageUrl' => 'Insira a URL da imagem', diff --git a/lib/i18n/strings_ru.g.dart b/lib/i18n/strings_ru.g.dart index 8dcc1777..fd73f425 100644 --- a/lib/i18n/strings_ru.g.dart +++ b/lib/i18n/strings_ru.g.dart @@ -376,6 +376,12 @@ class _TranslationsSettingsRu extends TranslationsSettingsEn { @override String get displaySwitchDelay => 'Задержка переключения дисплея'; @override String get tunneledPlayback => 'Туннельное воспроизведение'; @override String get tunneledPlaybackDescription => 'Использовать видеотуннелирование. Отключите, если HDR показывает черный экран.'; + @override String get dvConversionMode => 'Преобразование Dolby Vision'; + @override String get dvConversionModeDescription => 'Выберите, как ExoPlayer обрабатывает файлы Dolby Vision Profile 7.'; + @override String get dvConversionAuto => 'Авто'; + @override String get dvConversionNative => 'Нативно / отключено'; + @override String get dvConversionDv81 => 'P7 → P8.1'; + @override String get dvConversionHevcStrip => 'P7 → HEVC'; @override String get requireProfileSelectionOnOpen => 'Запрашивать профиль при запуске'; @override String get requireProfileSelectionOnOpenDescription => 'Показывать выбор профиля при каждом открытии приложения'; @override String get forceTvMode => 'Принудительный режим ТВ'; @@ -2033,6 +2039,12 @@ extension on TranslationsRu { 'settings.displaySwitchDelay' => 'Задержка переключения дисплея', 'settings.tunneledPlayback' => 'Туннельное воспроизведение', 'settings.tunneledPlaybackDescription' => 'Использовать видеотуннелирование. Отключите, если HDR показывает черный экран.', + 'settings.dvConversionMode' => 'Преобразование Dolby Vision', + 'settings.dvConversionModeDescription' => 'Выберите, как ExoPlayer обрабатывает файлы Dolby Vision Profile 7.', + 'settings.dvConversionAuto' => 'Авто', + 'settings.dvConversionNative' => 'Нативно / отключено', + 'settings.dvConversionDv81' => 'P7 → P8.1', + 'settings.dvConversionHevcStrip' => 'P7 → HEVC', 'settings.requireProfileSelectionOnOpen' => 'Запрашивать профиль при запуске', 'settings.requireProfileSelectionOnOpenDescription' => 'Показывать выбор профиля при каждом открытии приложения', 'settings.forceTvMode' => 'Принудительный режим ТВ', @@ -2301,14 +2313,14 @@ extension on TranslationsRu { 'profiles.signOut' => 'Выйти', 'profiles.signOutPlexTitle' => 'Выйти из Plex?', 'profiles.signOutPlexMessage' => ({required Object displayName}) => 'Удалить ${displayName} и всех пользователей Plex Home? Вы сможете войти снова в любое время.', + _ => null, + } ?? switch (path) { 'profiles.signedOutPlex' => 'Вы вышли из Plex.', 'profiles.signOutFailed' => 'Не удалось выйти.', 'profiles.sectionTitle' => 'Профили', 'profiles.summarySingle' => 'Добавьте профили, чтобы смешать управляемых пользователей и локальные идентификаторы', 'profiles.summaryMultipleWithActive' => ({required Object count, required Object activeName}) => '${count} профилей · активный: ${activeName}', 'profiles.summaryMultiple' => ({required Object count}) => '${count} профилей', - _ => null, - } ?? switch (path) { 'profiles.removeConnectionTitle' => 'Удалить соединение?', 'profiles.removeConnectionMessage' => ({required Object displayName, required Object connectionLabel}) => 'Удалить доступ ${displayName} к ${connectionLabel}. У других профилей он останется.', 'profiles.deleteProfileTitle' => 'Удалить профиль?', @@ -2815,14 +2827,14 @@ extension on TranslationsRu { 'metadataEdit.summary' => 'Описание', 'metadataEdit.poster' => 'Постер', 'metadataEdit.background' => 'Фон', + _ => null, + } ?? switch (path) { 'metadataEdit.logo' => 'Логотип', 'metadataEdit.squareArt' => 'Квадратное изображение', 'metadataEdit.selectPoster' => 'Выбрать постер', 'metadataEdit.selectBackground' => 'Выбрать фон', 'metadataEdit.selectLogo' => 'Выбрать логотип', 'metadataEdit.selectSquareArt' => 'Выбрать квадратное изображение', - _ => null, - } ?? switch (path) { 'metadataEdit.fromUrl' => 'По URL', 'metadataEdit.uploadFile' => 'Загрузить файл', 'metadataEdit.enterImageUrl' => 'Введите URL изображения', diff --git a/lib/i18n/strings_sv.g.dart b/lib/i18n/strings_sv.g.dart index be687bf1..66ed0f5c 100644 --- a/lib/i18n/strings_sv.g.dart +++ b/lib/i18n/strings_sv.g.dart @@ -376,6 +376,12 @@ class _TranslationsSettingsSv extends TranslationsSettingsEn { @override String get displaySwitchDelay => 'Fördröjning vid skärmbyte'; @override String get tunneledPlayback => 'Tunneluppspelning'; @override String get tunneledPlaybackDescription => 'Använd videotunnling. Inaktivera om HDR-uppspelning visar svart video.'; + @override String get dvConversionMode => 'Dolby Vision-konvertering'; + @override String get dvConversionModeDescription => 'Välj hur ExoPlayer hanterar Dolby Vision Profile 7-filer.'; + @override String get dvConversionAuto => 'Auto'; + @override String get dvConversionNative => 'Inbyggt / inaktiverat'; + @override String get dvConversionDv81 => 'P7 → P8.1'; + @override String get dvConversionHevcStrip => 'P7 → HEVC'; @override String get requireProfileSelectionOnOpen => 'Fråga efter profil vid appstart'; @override String get requireProfileSelectionOnOpenDescription => 'Visa profilval varje gång appen öppnas'; @override String get forceTvMode => 'Tvinga TV-läge'; @@ -2033,6 +2039,12 @@ extension on TranslationsSv { 'settings.displaySwitchDelay' => 'Fördröjning vid skärmbyte', 'settings.tunneledPlayback' => 'Tunneluppspelning', 'settings.tunneledPlaybackDescription' => 'Använd videotunnling. Inaktivera om HDR-uppspelning visar svart video.', + 'settings.dvConversionMode' => 'Dolby Vision-konvertering', + 'settings.dvConversionModeDescription' => 'Välj hur ExoPlayer hanterar Dolby Vision Profile 7-filer.', + 'settings.dvConversionAuto' => 'Auto', + 'settings.dvConversionNative' => 'Inbyggt / inaktiverat', + 'settings.dvConversionDv81' => 'P7 → P8.1', + 'settings.dvConversionHevcStrip' => 'P7 → HEVC', 'settings.requireProfileSelectionOnOpen' => 'Fråga efter profil vid appstart', 'settings.requireProfileSelectionOnOpenDescription' => 'Visa profilval varje gång appen öppnas', 'settings.forceTvMode' => 'Tvinga TV-läge', @@ -2301,14 +2313,14 @@ extension on TranslationsSv { 'profiles.signOut' => 'Logga ut', 'profiles.signOutPlexTitle' => 'Logga ut från Plex?', 'profiles.signOutPlexMessage' => ({required Object displayName}) => 'Ta bort ${displayName} och alla Plex Home-användare? Du kan logga in igen när som helst.', + _ => null, + } ?? switch (path) { 'profiles.signedOutPlex' => 'Utloggad från Plex.', 'profiles.signOutFailed' => 'Utloggningen misslyckades.', 'profiles.sectionTitle' => 'Profiler', 'profiles.summarySingle' => 'Lägg till profiler för att blanda hanterade användare och lokala identiteter', 'profiles.summaryMultipleWithActive' => ({required Object count, required Object activeName}) => '${count} profiler · aktiv: ${activeName}', 'profiles.summaryMultiple' => ({required Object count}) => '${count} profiler', - _ => null, - } ?? switch (path) { 'profiles.removeConnectionTitle' => 'Ta bort anslutning?', 'profiles.removeConnectionMessage' => ({required Object displayName, required Object connectionLabel}) => 'Ta bort ${displayName}s åtkomst till ${connectionLabel}. Andra profiler behåller den.', 'profiles.deleteProfileTitle' => 'Ta bort profil?', @@ -2815,14 +2827,14 @@ extension on TranslationsSv { 'metadataEdit.summary' => 'Sammanfattning', 'metadataEdit.poster' => 'Poster', 'metadataEdit.background' => 'Bakgrund', + _ => null, + } ?? switch (path) { 'metadataEdit.logo' => 'Logotyp', 'metadataEdit.squareArt' => 'Kvadratisk bild', 'metadataEdit.selectPoster' => 'Välj poster', 'metadataEdit.selectBackground' => 'Välj bakgrund', 'metadataEdit.selectLogo' => 'Välj logotyp', 'metadataEdit.selectSquareArt' => 'Välj kvadratisk bild', - _ => null, - } ?? switch (path) { 'metadataEdit.fromUrl' => 'Från URL', 'metadataEdit.uploadFile' => 'Ladda upp fil', 'metadataEdit.enterImageUrl' => 'Ange bild-URL', diff --git a/lib/i18n/strings_zh.g.dart b/lib/i18n/strings_zh.g.dart index 48ea386d..4563b888 100644 --- a/lib/i18n/strings_zh.g.dart +++ b/lib/i18n/strings_zh.g.dart @@ -376,6 +376,12 @@ class _TranslationsSettingsZh extends TranslationsSettingsEn { @override String get displaySwitchDelay => '显示切换延迟'; @override String get tunneledPlayback => '通道化播放'; @override String get tunneledPlaybackDescription => '使用视频隧道。若 HDR 播放出现黑屏,请禁用。'; + @override String get dvConversionMode => 'Dolby Vision 转换'; + @override String get dvConversionModeDescription => '选择 ExoPlayer 如何处理 Dolby Vision Profile 7 文件。'; + @override String get dvConversionAuto => '自动'; + @override String get dvConversionNative => '原生 / 禁用'; + @override String get dvConversionDv81 => 'P7 → P8.1'; + @override String get dvConversionHevcStrip => 'P7 → HEVC'; @override String get requireProfileSelectionOnOpen => '打开应用时询问配置文件'; @override String get requireProfileSelectionOnOpenDescription => '每次打开应用时显示配置文件选择'; @override String get forceTvMode => '强制 TV 模式'; @@ -2033,6 +2039,12 @@ extension on TranslationsZh { 'settings.displaySwitchDelay' => '显示切换延迟', 'settings.tunneledPlayback' => '通道化播放', 'settings.tunneledPlaybackDescription' => '使用视频隧道。若 HDR 播放出现黑屏,请禁用。', + 'settings.dvConversionMode' => 'Dolby Vision 转换', + 'settings.dvConversionModeDescription' => '选择 ExoPlayer 如何处理 Dolby Vision Profile 7 文件。', + 'settings.dvConversionAuto' => '自动', + 'settings.dvConversionNative' => '原生 / 禁用', + 'settings.dvConversionDv81' => 'P7 → P8.1', + 'settings.dvConversionHevcStrip' => 'P7 → HEVC', 'settings.requireProfileSelectionOnOpen' => '打开应用时询问配置文件', 'settings.requireProfileSelectionOnOpenDescription' => '每次打开应用时显示配置文件选择', 'settings.forceTvMode' => '强制 TV 模式', @@ -2301,14 +2313,14 @@ extension on TranslationsZh { 'profiles.signOut' => '退出登录', 'profiles.signOutPlexTitle' => '退出 Plex 登录?', 'profiles.signOutPlexMessage' => ({required Object displayName}) => '要移除 ${displayName} 和所有 Plex Home 用户吗?可随时重新登录。', + _ => null, + } ?? switch (path) { 'profiles.signedOutPlex' => '已退出 Plex 登录。', 'profiles.signOutFailed' => '退出登录失败。', 'profiles.sectionTitle' => '配置文件', 'profiles.summarySingle' => '添加配置文件以混合托管用户和本地身份', 'profiles.summaryMultipleWithActive' => ({required Object count, required Object activeName}) => '${count} 个配置文件 · 活跃:${activeName}', 'profiles.summaryMultiple' => ({required Object count}) => '${count} 个配置文件', - _ => null, - } ?? switch (path) { 'profiles.removeConnectionTitle' => '移除连接?', 'profiles.removeConnectionMessage' => ({required Object displayName, required Object connectionLabel}) => '移除 ${displayName} 对 ${connectionLabel} 的访问。其他个人资料仍保留。', 'profiles.deleteProfileTitle' => '删除配置文件?', @@ -2815,14 +2827,14 @@ extension on TranslationsZh { 'metadataEdit.summary' => '简介', 'metadataEdit.poster' => '海报', 'metadataEdit.background' => '背景', + _ => null, + } ?? switch (path) { 'metadataEdit.logo' => '标志', 'metadataEdit.squareArt' => '方形图片', 'metadataEdit.selectPoster' => '选择海报', 'metadataEdit.selectBackground' => '选择背景', 'metadataEdit.selectLogo' => '选择标志', 'metadataEdit.selectSquareArt' => '选择方形图片', - _ => null, - } ?? switch (path) { 'metadataEdit.fromUrl' => '从 URL', 'metadataEdit.uploadFile' => '上传文件', 'metadataEdit.enterImageUrl' => '输入图片 URL', diff --git a/lib/i18n/sv.i18n.json b/lib/i18n/sv.i18n.json index bb725c6b..f8b2281e 100644 --- a/lib/i18n/sv.i18n.json +++ b/lib/i18n/sv.i18n.json @@ -248,6 +248,12 @@ "displaySwitchDelay": "Fördröjning vid skärmbyte", "tunneledPlayback": "Tunneluppspelning", "tunneledPlaybackDescription": "Använd videotunnling. Inaktivera om HDR-uppspelning visar svart video.", + "dvConversionMode": "Dolby Vision-konvertering", + "dvConversionModeDescription": "Välj hur ExoPlayer hanterar Dolby Vision Profile 7-filer.", + "dvConversionAuto": "Auto", + "dvConversionNative": "Inbyggt / inaktiverat", + "dvConversionDv81": "P7 → P8.1", + "dvConversionHevcStrip": "P7 → HEVC", "requireProfileSelectionOnOpen": "Fråga efter profil vid appstart", "requireProfileSelectionOnOpenDescription": "Visa profilval varje gång appen öppnas", "forceTvMode": "Tvinga TV-läge", diff --git a/lib/i18n/zh.i18n.json b/lib/i18n/zh.i18n.json index bfd41a7f..55c61a38 100644 --- a/lib/i18n/zh.i18n.json +++ b/lib/i18n/zh.i18n.json @@ -248,6 +248,12 @@ "displaySwitchDelay": "显示切换延迟", "tunneledPlayback": "通道化播放", "tunneledPlaybackDescription": "使用视频隧道。若 HDR 播放出现黑屏,请禁用。", + "dvConversionMode": "Dolby Vision 转换", + "dvConversionModeDescription": "选择 ExoPlayer 如何处理 Dolby Vision Profile 7 文件。", + "dvConversionAuto": "自动", + "dvConversionNative": "原生 / 禁用", + "dvConversionDv81": "P7 → P8.1", + "dvConversionHevcStrip": "P7 → HEVC", "requireProfileSelectionOnOpen": "打开应用时询问配置文件", "requireProfileSelectionOnOpenDescription": "每次打开应用时显示配置文件选择", "forceTvMode": "强制 TV 模式", diff --git a/lib/mpv/player/platform/player_android.dart b/lib/mpv/player/platform/player_android.dart index c5d05047..2dfe81c5 100644 --- a/lib/mpv/player/platform/player_android.dart +++ b/lib/mpv/player/platform/player_android.dart @@ -11,6 +11,7 @@ class PlayerAndroid extends PlayerBase { int? _bufferSizeBytes; bool _tunnelingEnabled = true; + String _dvConversionMode = 'auto'; String? _hiddenSubtitleTrackId; @@ -60,6 +61,7 @@ class PlayerAndroid extends PlayerBase { final result = await invoke('initialize', { 'bufferSizeBytes': _bufferSizeBytes, 'tunnelingEnabled': _tunnelingEnabled, + 'dvConversionMode': _dvConversionMode, }); if (result != true) { throw Exception('Failed to initialize ExoPlayer'); @@ -192,7 +194,8 @@ class PlayerAndroid extends PlayerBase { _tunnelingEnabled = value != 'no'; break; case 'dv-conversion-mode': - await invoke('setDvConversionMode', {'mode': value}); + _dvConversionMode = value; + if (initialized) await invoke('setDvConversionMode', {'mode': value}); break; case 'sub-visibility': if (value == 'no') { diff --git a/lib/screens/settings/playback_settings_screen.dart b/lib/screens/settings/playback_settings_screen.dart index c8dcec01..aac6d791 100644 --- a/lib/screens/settings/playback_settings_screen.dart +++ b/lib/screens/settings/playback_settings_screen.dart @@ -59,6 +59,7 @@ class _PlaybackSettingsScreenState extends State { if (Platform.isWindows) _matchDynamicRangeTile(), _displaySwitchDelayTile(), _tunneledPlaybackTile(), + _dvConversionModeTile(), _bufferSizeTile(), _defaultQualityTile(), @@ -311,6 +312,31 @@ class _PlaybackSettingsScreenState extends State { }, ); + Widget _dvConversionModeTile() => SettingValueBuilder( + pref: SettingsService.useExoPlayer, + builder: (_, useExo, _) { + if (!Platform.isAndroid || !useExo) return const SizedBox.shrink(); + return SettingSelectionTile( + pref: SettingsService.dvConversionMode, + icon: Symbols.hdr_strong_rounded, + title: t.settings.dvConversionMode, + subtitleBuilder: (mode) => '${_dvConversionModeLabel(mode)} · ${t.settings.dvConversionModeDescription}', + options: DvConversionModePreference.values + .map((m) => DialogOption(value: m, title: _dvConversionModeLabel(m))) + .toList(), + decode: (m) => m, + encode: (m) => m, + ); + }, + ); + + String _dvConversionModeLabel(DvConversionModePreference mode) => switch (mode) { + DvConversionModePreference.auto => t.settings.dvConversionAuto, + DvConversionModePreference.disabled => t.settings.dvConversionNative, + DvConversionModePreference.dv81 => t.settings.dvConversionDv81, + DvConversionModePreference.hevcStrip => t.settings.dvConversionHevcStrip, + }; + Widget _bufferSizeTile() { final bufferOptions = const [0, 64, 128, 256, 512, 1024]; return SettingSelectionTile( diff --git a/lib/screens/video_player_screen.dart b/lib/screens/video_player_screen.dart index 94acfd47..96a761c2 100644 --- a/lib/screens/video_player_screen.dart +++ b/lib/screens/video_player_screen.dart @@ -627,6 +627,8 @@ class VideoPlayerScreenState extends State with WidgetsBindin if (Platform.isAndroid && useExoPlayer) { final tunneledPlayback = settingsService.read(SettingsService.tunneledPlayback); await currentPlayer.setProperty('tunneled-playback', tunneledPlayback ? 'yes' : 'no'); + final dvConversionMode = settingsService.read(SettingsService.dvConversionMode); + await currentPlayer.setProperty('dv-conversion-mode', dvConversionMode.nativeValue); } if (bufferSizeMB > 0) { final bufferSizeBytes = bufferSizeMB * 1024 * 1024; diff --git a/lib/services/settings_service.dart b/lib/services/settings_service.dart index 55e628db..03affd02 100644 --- a/lib/services/settings_service.dart +++ b/lib/services/settings_service.dart @@ -35,6 +35,17 @@ enum EpisodePosterMode { seriesPoster, seasonPoster, episodeThumbnail } enum SubAssOverride { no, yes, scale, force, strip } +enum DvConversionModePreference { auto, disabled, dv81, hevcStrip } + +extension DvConversionModePreferenceNativeValue on DvConversionModePreference { + String get nativeValue => switch (this) { + DvConversionModePreference.auto => 'auto', + DvConversionModePreference.disabled => 'disabled', + DvConversionModePreference.dv81 => 'dv81', + DvConversionModePreference.hevcStrip => 'hevc_strip', + }; +} + const String _bufferSizeMigratedKey = 'buffer_size_migrated_to_auto'; const String _legacyUseSeasonPosterKey = 'use_season_poster'; const String _legacyMpvConfigEntriesKey = 'mpv_config_entries'; @@ -313,6 +324,11 @@ class SettingsService extends BaseSharedPreferencesService { static const enableSimklScrobble = BoolPref('enable_simkl_scrobble', defaultValue: true); static const matchContentFrameRate = BoolPref('match_content_frame_rate'); static const tunneledPlayback = BoolPref('tunneled_playback', defaultValue: true); + static const dvConversionMode = EnumPref( + 'dv_conversion_mode', + values: DvConversionModePreference.values, + defaultValue: DvConversionModePreference.auto, + ); static const defaultQualityPreset = EnumPref( 'default_quality_preset', values: TranscodeQualityPreset.values, @@ -686,6 +702,7 @@ class SettingsService extends BaseSharedPreferencesService { enableSimklScrobble, matchContentFrameRate, tunneledPlayback, + dvConversionMode, defaultPlaybackSpeed, defaultBoxFitMode, autoPlayNextEpisode,