diff --git a/app/src/main/java/org/jellyfin/androidtv/di/PlaybackModule.kt b/app/src/main/java/org/jellyfin/androidtv/di/PlaybackModule.kt index 57ff01cfb3..670fa28a44 100644 --- a/app/src/main/java/org/jellyfin/androidtv/di/PlaybackModule.kt +++ b/app/src/main/java/org/jellyfin/androidtv/di/PlaybackModule.kt @@ -30,7 +30,7 @@ import kotlin.time.Duration.Companion.milliseconds import org.jellyfin.androidtv.ui.playback.PlaybackManager as LegacyPlaybackManager val playbackModule = module { - single { LegacyPlaybackManager(get()) } + single { LegacyPlaybackManager(get(), get()) } single { VideoQueueManager() } single { RewriteMediaManager(get(), get(), get(), get()) } diff --git a/app/src/main/java/org/jellyfin/androidtv/preference/UserPreferences.kt b/app/src/main/java/org/jellyfin/androidtv/preference/UserPreferences.kt index 7e39d2e662..eba3c1b8db 100644 --- a/app/src/main/java/org/jellyfin/androidtv/preference/UserPreferences.kt +++ b/app/src/main/java/org/jellyfin/androidtv/preference/UserPreferences.kt @@ -185,6 +185,11 @@ class UserPreferences(context: Context) : SharedPreferenceStore( */ var subtitlesTextSize = floatPreference("subtitles_text_size", 1f) + /** + * Always burn in subtitles when transcoding + */ + var alwaysBurnInSubtitleWhenTranscoding = booleanPreference("always_burn_in_subtitle_when_transcoding", false) + /** * Show screensaver in app */ diff --git a/app/src/main/java/org/jellyfin/androidtv/ui/playback/PlaybackController.java b/app/src/main/java/org/jellyfin/androidtv/ui/playback/PlaybackController.java index c63a8577c6..0129b8b196 100644 --- a/app/src/main/java/org/jellyfin/androidtv/ui/playback/PlaybackController.java +++ b/app/src/main/java/org/jellyfin/androidtv/ui/playback/PlaybackController.java @@ -546,7 +546,14 @@ public void onResponse(StreamInfo internalResponse) { if (mVideoManager == null) return; mCurrentOptions = internalOptions; - if (internalOptions.getSubtitleStreamIndex() == null) burningSubs = internalResponse.getSubtitleDeliveryMethod() == SubtitleDeliveryMethod.ENCODE; + + if (internalOptions.getSubtitleStreamIndex() == null) { + boolean alwaysBurnTranscode = userPreferences.getValue().get(UserPreferences.Companion.getAlwaysBurnInSubtitleWhenTranscoding()); + boolean transcoding = internalResponse.getPlayMethod().equals(PlayMethod.TRANSCODE); + boolean encodedSubs =internalResponse.getSubtitleDeliveryMethod() == SubtitleDeliveryMethod.ENCODE; + burningSubs = encodedSubs || (transcoding && alwaysBurnTranscode); + } + startItem(item, position, internalResponse); } diff --git a/app/src/main/java/org/jellyfin/androidtv/ui/playback/PlaybackManager.kt b/app/src/main/java/org/jellyfin/androidtv/ui/playback/PlaybackManager.kt index 7883901f05..b2314c436b 100644 --- a/app/src/main/java/org/jellyfin/androidtv/ui/playback/PlaybackManager.kt +++ b/app/src/main/java/org/jellyfin/androidtv/ui/playback/PlaybackManager.kt @@ -6,6 +6,7 @@ import kotlinx.coroutines.launch import org.jellyfin.androidtv.data.compat.PlaybackException import org.jellyfin.androidtv.data.compat.StreamInfo import org.jellyfin.androidtv.data.compat.VideoOptions +import org.jellyfin.androidtv.preference.UserPreferences import org.jellyfin.androidtv.util.apiclient.Response import org.jellyfin.sdk.api.client.ApiClient import org.jellyfin.sdk.api.client.extensions.hlsSegmentApi @@ -52,7 +53,8 @@ private fun createStreamInfo( } class PlaybackManager( - private val api: ApiClient + private val api: ApiClient, + private val userPreferences: UserPreferences ) { fun getVideoStreamInfo( lifecycleOwner: LifecycleOwner, @@ -101,6 +103,7 @@ class PlaybackManager( allowVideoStreamCopy = true, allowAudioStreamCopy = true, autoOpenLiveStream = true, + alwaysBurnInSubtitleWhenTranscoding = userPreferences[UserPreferences.alwaysBurnInSubtitleWhenTranscoding] ) ) diff --git a/app/src/main/java/org/jellyfin/androidtv/ui/preference/screen/PlaybackPreferencesScreen.kt b/app/src/main/java/org/jellyfin/androidtv/ui/preference/screen/PlaybackPreferencesScreen.kt index b57c30538f..9cce67e327 100644 --- a/app/src/main/java/org/jellyfin/androidtv/ui/preference/screen/PlaybackPreferencesScreen.kt +++ b/app/src/main/java/org/jellyfin/androidtv/ui/preference/screen/PlaybackPreferencesScreen.kt @@ -161,6 +161,12 @@ class PlaybackPreferencesScreen : OptionsFragment() { default { (UserPreferences.subtitlesTextSize.defaultValue * 100f).roundToInt() } } } + + checkbox { + setTitle(R.string.lbl_always_burn_in_subtitle_when_transcoding) + setContent(R.string.sum_always_burn_in_subtitle_when_transcoding) + bind(userPreferences, UserPreferences.alwaysBurnInSubtitleWhenTranscoding) + } } category { diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 84ab1f7be7..7e9ed33efa 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -526,6 +526,8 @@ Unknown segments Skip forward length Enable trickplay in video player + Always burn in subtitle when transcoding + Burn in all subtitles when transcoding is triggered. This ensures subtitle synchronisation after transcoding at the cost of reduced transcoding speed. %1$s second %1$s seconds