Skip to content

Commit c7c26bb

Browse files
Paul Gardinerbennettpeter
Paul Gardiner
authored andcommitted
Attempt to match forced track language to that of the selected main track
1 parent e307547 commit c7c26bb

File tree

2 files changed

+16
-2
lines changed

2 files changed

+16
-2
lines changed

mythtv/libs/libmythtv/decoders/decoderbase.cpp

+15-1
Original file line numberDiff line numberDiff line change
@@ -975,6 +975,13 @@ int DecoderBase::SetTrack(uint Type, int TrackNo)
975975
{
976976
m_wantedTrack[Type] = m_tracks[Type][static_cast<size_t>(m_currentTrack[Type])];
977977
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+
}
978985
}
979986

980987
return m_currentTrack[Type];
@@ -1047,11 +1054,14 @@ bool DecoderBase::InsertTrack(uint Type, const StreamInfo &Info)
10471054
* Whether to favor or disfavor forced is controlled by the second
10481055
* parameter.
10491056
*
1057+
* A preferredlanguage can be specified as third parameter, which
1058+
* will override the user's preferrence list.
1059+
*
10501060
* This function must not be called without taking m_trackLock
10511061
*
10521062
* \return the highest weighted track, or -1 if none.
10531063
*/
1054-
int DecoderBase::BestTrack(uint Type, bool forcedPreferred)
1064+
int DecoderBase::BestTrack(uint Type, bool forcedPreferred, int preferredLanguage)
10551065
{
10561066
LOG(VB_PLAYBACK, LOG_INFO, LOC + QString("Trying to select track (w/lang & %1forced)")
10571067
.arg(forcedPreferred ? "" : "!"));
@@ -1068,6 +1078,10 @@ int DecoderBase::BestTrack(uint Type, bool forcedPreferred)
10681078
m_tracks[Type][i].m_forced);
10691079
int position = static_cast<int>(numStreams) - static_cast<int>(i);
10701080
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+
}
10711085
for (uint j = 0; (language == 0) && (j < m_languagePreference.size()); ++j)
10721086
{
10731087
if (m_tracks[Type][i].m_language == m_languagePreference[j])

mythtv/libs/libmythtv/decoders/decoderbase.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,7 @@ class DecoderBase
264264
static AVPixelFormat GetBestVideoFormat(AVPixelFormat* Formats, const VideoFrameTypes* RenderFormats);
265265

266266
protected:
267-
int BestTrack(uint Type, bool forcedPreferred);
267+
int BestTrack(uint Type, bool forcedPreferred, int preferredLanguage = 0);
268268
virtual int AutoSelectTrack(uint Type);
269269
void AutoSelectTracks(void);
270270
void ResetTracks(void);

0 commit comments

Comments
 (0)