private void GetPreferredStreams(Dictionary<uint, InputstreamInfo> inputstreamInfos, StreamPreferences preferences)
{
List<int> selectedIds = new List<int>();
// Video
var videoStreamId = inputstreamInfos.Values.FirstOrDefault(i => i.StreamType == StreamType.Video).StreamId;
if (videoStreamId != 0)
selectedIds.Add((int)videoStreamId);
// Audio, prefer language then multichannel
var audioStreams = inputstreamInfos.Values.Where(i => i.StreamType == StreamType.Audio).ToList();
var langStreams = audioStreams.Where(i => i.Language == preferences.ThreeLetterLangCode).ToList();
// Prefer matching language, then all languages
foreach (var streams in new[] { langStreams, audioStreams })
{
var matchingStreams = preferences.PreferMultiChannel ?
streams.OrderByDescending(i => i.Channels).ThenBy(i => i.CodecInternalName) :
streams.OrderBy(CustomChannelCountSorting).ThenBy(i => i.CodecInternalName);
var audioStream = matchingStreams.Any() ? matchingStreams.First().StreamId : 0;
if (audioStream != 0)
{
selectedIds.Add((int)audioStream);
break;
}
}
_enabledStreams = selectedIds.ToList();
}