@@ -975,6 +975,13 @@ int DecoderBase::SetTrack(uint Type, int TrackNo)
975
975
{
976
976
m_wantedTrack[Type] = m_tracks[Type][static_cast <size_t >(m_currentTrack[Type])];
977
977
m_selectedTrack[Type] = m_tracks[Type][static_cast <size_t >(m_currentTrack[Type])];
978
+ if (Type == kTrackTypeSubtitle )
979
+ {
980
+ // Rechoose the associated forced track, preferring the same language
981
+ int forcedTrackIndex = BestTrack (Type, true , m_selectedTrack[Type].m_language );
982
+ if (m_tracks[Type][forcedTrackIndex].m_forced )
983
+ m_selectedForcedTrack[Type] = m_tracks[Type][forcedTrackIndex];
984
+ }
978
985
}
979
986
980
987
return m_currentTrack[Type];
@@ -1047,11 +1054,14 @@ bool DecoderBase::InsertTrack(uint Type, const StreamInfo &Info)
1047
1054
* Whether to favor or disfavor forced is controlled by the second
1048
1055
* parameter.
1049
1056
*
1057
+ * A preferredlanguage can be specified as third parameter, which
1058
+ * will override the user's preferrence list.
1059
+ *
1050
1060
* This function must not be called without taking m_trackLock
1051
1061
*
1052
1062
* \return the highest weighted track, or -1 if none.
1053
1063
*/
1054
- int DecoderBase::BestTrack (uint Type, bool forcedPreferred)
1064
+ int DecoderBase::BestTrack (uint Type, bool forcedPreferred, int preferredLanguage )
1055
1065
{
1056
1066
LOG (VB_PLAYBACK, LOG_INFO, LOC + QString (" Trying to select track (w/lang & %1forced)" )
1057
1067
.arg (forcedPreferred ? " " : " !" ));
@@ -1068,6 +1078,10 @@ int DecoderBase::BestTrack(uint Type, bool forcedPreferred)
1068
1078
m_tracks[Type][i].m_forced );
1069
1079
int position = static_cast <int >(numStreams) - static_cast <int >(i);
1070
1080
int language = 0 ;
1081
+ if (preferredLanguage != 0 && m_tracks[Type][i].m_language == preferredLanguage)
1082
+ {
1083
+ language = static_cast <int >(m_languagePreference.size ()) + 1 ;
1084
+ }
1071
1085
for (uint j = 0 ; (language == 0 ) && (j < m_languagePreference.size ()); ++j)
1072
1086
{
1073
1087
if (m_tracks[Type][i].m_language == m_languagePreference[j])
0 commit comments