Patch for adding preferred subtitle language tracks and preferred audio language tracks for Android devices
"Miller, Kyle via vlc-devel" <[email protected]>
| Newsgroups | gmane.comp.video.videolan.vlc.devel |
|---|---|
| Message-ID | <BL0PR01MB47546473644FFB2F5F2C2E60CEB19@BL0PR01MB4754.prod.exchangelabs.com> |
This has been a feature mentioned maybe as many as 8 years ago if I recall from reading the requests correctly. I have use for it, so I implemented it for my FireTV. I was not sure how to make the test suite checks or anything, but I tested the code a few times and it seems to work. There were 2 lines of code I was not sure about replacing but it seemed necessary for this patch to work correctly. That part is checking to see if media.id == 0L. I cannot figure out the purpose of this check and it breaks my code if I keep it. _______________________________________________ vlc-devel mailing list To unsubscribe or modify your subscription options: https://mailman.videolan.org/listinfo/vlc-devel
0001-Implemented-subtitle-track-langauge-preferences-and-.patch
(text/x-patch, 7.3 KB)
From 5fa5de051da8827bffa41f409f222135af993336 Mon Sep 17 00:00:00 2001 From: Kyle Miller <[email protected]> Date: Thu, 7 Oct 2021 10:24:54 -0400 Subject: [PATCH] Implemented subtitle track langauge preferences and audio track language preferences --- .../resources/src/main/res/values/strings.xml | 2 ++ .../vlc-android/res/xml/preferences_audio.xml | 6 ++++ .../res/xml/preferences_subtitles.xml | 5 +++ .../vlc/gui/video/VideoPlayerActivity.kt | 34 ++++++++++++++++--- 4 files changed, 43 insertions(+), 4 deletions(-) diff --git a/application/resources/src/main/res/values/strings.xml b/application/resources/src/main/res/values/strings.xml index e2da8afd4..b8be7c62e 100644 --- a/application/resources/src/main/res/values/strings.xml +++ b/application/resources/src/main/res/values/strings.xml @@ -291,6 +291,7 @@ <string name="screen_orientation_last_locked">Last locked orientation</string> <string name="enable_black_theme">Black theme</string> <string name="subtitle_text_encoding">Subtitle text encoding</string> + <string name="subtitle_preferred_language">Preferred subtitle language</string> <string name="daynight_title">DayNight mode</string> <string name="daynight_follow_system_title">Follow system mode</string> @@ -589,6 +590,7 @@ <string name="audio_digital_failed">Failed to change Audio Digital Output state</string> <string name="audio_digital_output_enabled">Audio Digital Output enabled</string> <string name="audio_digital_output_disabled">Audio Digital Output disabled</string> + <string name="audio_preferred_language">Preferred audio language</string> <string name="audio_digital_title">Digital audio output (passthrough)</string> <string name="audio_task_cleared_title">Stop on application swipe</string> <string name="audio_task_cleared_summary">Stop playback when application is dismissed</string> diff --git a/application/vlc-android/res/xml/preferences_audio.xml b/application/vlc-android/res/xml/preferences_audio.xml index 2cc8a86e6..961a7f168 100644 --- a/application/vlc-android/res/xml/preferences_audio.xml +++ b/application/vlc-android/res/xml/preferences_audio.xml @@ -31,6 +31,12 @@ android:key="audio_digital_output" android:title="@string/audio_digital_title"/> + <EditTextPreference + android:defaultValue="" + android:key="audio_preferred_language" + android:persistent="true" + android:title="@string/audio_preferred_language"/> + <PreferenceCategory android:title="@string/headset_prefs_category" android:key="headset_prefs_category"> diff --git a/application/vlc-android/res/xml/preferences_subtitles.xml b/application/vlc-android/res/xml/preferences_subtitles.xml index 5c053410d..bfd303a83 100644 --- a/application/vlc-android/res/xml/preferences_subtitles.xml +++ b/application/vlc-android/res/xml/preferences_subtitles.xml @@ -41,5 +41,10 @@ android:key="subtitle_text_encoding" android:persistent="true" android:title="@string/subtitle_text_encoding"/> + <EditTextPreference + android:defaultValue="" + android:key="subtitle_preferred_language" + android:persistent="true" + android:title="@string/subtitle_preferred_language"/> </androidx.preference.PreferenceScreen> diff --git a/application/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.kt b/application/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.kt index 05763ed3a..db96ff332 100644 --- a/application/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.kt +++ b/application/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerActivity.kt @@ -1246,20 +1246,46 @@ open class VideoPlayerActivity : AppCompatActivity(), PlaybackService.Callback, if (event.esChangedType == IMedia.Track.Type.Audio) { lifecycleScope.launch(Dispatchers.IO) { val media = medialibrary.findMedia(mw) - val audioTrack = media.getMetaLong(MediaWrapper.META_AUDIOTRACK).toInt() + var preferredTrack: Int = 0 + val contains = settings.getString("audio_preferred_language", null) + val it = PlaybackService.instance?.audioTracks?.iterator() + while (it?.hasNext() === true) { + val next = it?.next() + if (next.name.contains(contains.toString(), ignoreCase = true)) { + preferredTrack = next.id + break + } + } + val audioTrack = when (val savedTrack = media.getMetaLong(MediaWrapper.META_AUDIOTRACK).toInt()) { + 0 -> preferredTrack + else -> savedTrack + } if (audioTrack != 0 || currentAudioTrack != -2) - service.setAudioTrack(if (media.id == 0L) currentAudioTrack else audioTrack) + service.setAudioTrack(audioTrack) } } else if (event.esChangedType == IMedia.Track.Type.Text) { lifecycleScope.launch(Dispatchers.IO) { val media = medialibrary.findMedia(mw) - val spuTrack = media.getMetaLong(MediaWrapper.META_SUBTITLE_TRACK).toInt() + var preferredTrack: Int = 0 + val contains = settings.getString("subtitle_preferred_language", null) + val it = PlaybackService.instance?.spuTracks?.iterator() + while (it?.hasNext() === true) { + val next = it?.next() + if (next.name.contains(contains.toString(), ignoreCase = true)) { + preferredTrack = next.id + break + } + } + val spuTrack = when (val savedTrack = media.getMetaLong(MediaWrapper.META_SUBTITLE_TRACK).toInt()) { + 0 -> preferredTrack + else -> savedTrack + } if (addNextTrack) { val tracks = service.spuTracks if (!(tracks as Array<MediaPlayer.TrackDescription>).isNullOrEmpty()) service.setSpuTrack(tracks[tracks.size - 1].id) addNextTrack = false } else if (spuTrack != 0 || currentSpuTrack != -2) { - service.setSpuTrack(if (media.id == 0L) currentSpuTrack else spuTrack) + service.setSpuTrack(spuTrack) lastSpuTrack = -2 } } -- 2.25.1