public SubtitleSelector(TSReaderPlayer.ISubtitleStream dvbStreams, SubtitleRenderer subRender,
TeletextSubtitleDecoder subDecoder)
{
Log.Debug("SubtitleSelector ctor");
this.dvbStreams = dvbStreams;
this.subRender = subRender;
// load preferences
using (Settings reader = new MPSettings())
{
preferedLanguages = new List<string>();
string languages;
if (g_Player.IsDVD)
{
languages = BDPlayer.Settings.subtitleLang;
}
else
{
languages = reader.GetValueAsString("tvservice", "preferredsublanguages", "");
}
Log.Debug("SubtitleSelector: sublangs entry content: " + languages);
StringTokenizer st = new StringTokenizer(languages, ";");
while (st.HasMore)
{
string lang = st.NextToken();
if (lang.Length != 3)
{
Log.Warn("Language {0} is not in the correct format!", lang);
}
else
{
preferedLanguages.Add(lang);
Log.Info("Prefered language {0} is {1}", preferedLanguages.Count, lang);
}
}
}
pageEntries = new Dictionary<int, TeletextPageEntry>();
bitmapSubtitleCache = new List<SubtitleOption>();
lock (syncLock)
{
if (subDecoder != null)
{
subDecoder.SetPageInfoCallback(new TeletextSubtitleDecoder.PageInfoCallback(OnPageInfo));
}
if (dvbStreams != null)
{
RetrieveBitmapSubtitles();
subStreamCallback = new SubtitleStreamEventCallback(OnSubtitleReset);
IntPtr pSubStreamCallback = Marshal.GetFunctionPointerForDelegate(subStreamCallback);
Log.Debug("Calling SetSubtitleStreamEventCallback");
dvbStreams.SetSubtitleResetCallback(pSubStreamCallback);
}
if (preferedLanguages.Count > 0)
{
autoSelectOption = new SubtitleOption();
autoSelectOption.language = "None";
autoSelectOption.isAuto = true;
autoSelectOption.type = SubtitleType.None;
SetOption(0); // the autoselect mode will have index 0 (ugly)
}
}
Log.Debug("End SubtitleSelector ctor");
}