Browse Source

process missing language as und (#2081)

pull/2082/head
Jason Dove 2 months ago committed by GitHub
parent
commit
6e2c19d354
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 33
      ErsatzTV.Core.Tests/FFmpeg/CustomStreamSelectorTests.cs
  2. 18
      ErsatzTV.Core/FFmpeg/CustomStreamSelector.cs

33
ErsatzTV.Core.Tests/FFmpeg/CustomStreamSelectorTests.cs

@ -67,6 +67,31 @@ items: @@ -67,6 +67,31 @@ items:
}
}
[Test]
public async Task Should_Select_und_Audio_Missing_Language()
{
const string YAML =
"""
---
items:
- audio_language: ["und"]
""";
var streamSelector = new CustomStreamSelector(
new FakeLocalFileSystem([new FakeFileEntry(TestFileName) { Contents = YAML }]),
new NullLogger<CustomStreamSelector>());
StreamSelectorResult result = await streamSelector.SelectStreams(_channel, _audioVersion, _subtitles);
result.AudioStream.IsSome.ShouldBeTrue();
foreach (MediaStream audioStream in result.AudioStream)
{
audioStream.Index.ShouldBe(3);
audioStream.Language.ShouldBeNullOrWhiteSpace();
}
}
[Test]
public async Task Should_Select_eng_Audio_Exact_Match_Multiple_Audio_Languages()
{
@ -690,7 +715,13 @@ items: @@ -690,7 +715,13 @@ items:
Channels = 6,
Language = englishLanguage,
Title = "Movie Title",
Default = true
},
new MediaStream
{
Index = 3,
MediaStreamKind = MediaStreamKind.Audio,
Channels = 2,
Title = "Who Knows",
}
]
};

18
ErsatzTV.Core/FFmpeg/CustomStreamSelector.cs

@ -43,7 +43,8 @@ public class CustomStreamSelector(ILocalFileSystem localFileSystem, ILogger<Cust @@ -43,7 +43,8 @@ public class CustomStreamSelector(ILocalFileSystem localFileSystem, ILogger<Cust
foreach (MediaStream audioStream in audioStreams.ToList())
{
var matches = false;
string safeTitle = audioStream.Title ?? string.Empty;
string safeTitle = (audioStream.Title ?? string.Empty).ToLowerInvariant();
string safeLanguage = (audioStream.Language ?? "und").ToLowerInvariant();
if (streamSelectorItem.AudioLanguages.Count > 0)
{
@ -60,7 +61,7 @@ public class CustomStreamSelector(ILocalFileSystem localFileSystem, ILogger<Cust @@ -60,7 +61,7 @@ public class CustomStreamSelector(ILocalFileSystem localFileSystem, ILogger<Cust
matches = matches || FileSystemName.MatchesSimpleExpression(
audioLanguage.ToLowerInvariant(),
audioStream.Language.ToLowerInvariant());
safeLanguage);
// store lang index for prioritizing later
if (matches && candidateAudioStreams[audioStream] == int.MaxValue)
@ -105,7 +106,7 @@ public class CustomStreamSelector(ILocalFileSystem localFileSystem, ILogger<Cust @@ -105,7 +106,7 @@ public class CustomStreamSelector(ILocalFileSystem localFileSystem, ILogger<Cust
logger.LogDebug(
"Audio stream {@Stream} does not match selector item {@SelectorItem}",
new { audioStream.Language, audioStream.Title },
new { Language = safeLanguage, Title = safeTitle },
streamSelectorItem);
}
else
@ -114,7 +115,7 @@ public class CustomStreamSelector(ILocalFileSystem localFileSystem, ILogger<Cust @@ -114,7 +115,7 @@ public class CustomStreamSelector(ILocalFileSystem localFileSystem, ILogger<Cust
logger.LogDebug(
"Audio stream {@Stream} matches selector item {@SelectorItem}",
new { audioStream.Language, audioStream.Title },
new { Language = safeLanguage, Title = safeTitle },
streamSelectorItem);
}
}
@ -130,7 +131,8 @@ public class CustomStreamSelector(ILocalFileSystem localFileSystem, ILogger<Cust @@ -130,7 +131,8 @@ public class CustomStreamSelector(ILocalFileSystem localFileSystem, ILogger<Cust
foreach (Subtitle subtitle in allSubtitles.ToList())
{
var matches = false;
string safeTitle = subtitle.Title ?? string.Empty;
string safeTitle = (subtitle.Title ?? string.Empty).ToLowerInvariant();
string safeLanguage = (subtitle.Language ?? "und").ToLowerInvariant();
if (streamSelectorItem.SubtitleLanguages.Count > 0)
{
@ -147,7 +149,7 @@ public class CustomStreamSelector(ILocalFileSystem localFileSystem, ILogger<Cust @@ -147,7 +149,7 @@ public class CustomStreamSelector(ILocalFileSystem localFileSystem, ILogger<Cust
matches = matches || FileSystemName.MatchesSimpleExpression(
subtitleLanguage,
subtitle.Language);
safeLanguage);
// store lang index for prioritizing later
if (matches && candidateSubtitles[subtitle] == int.MaxValue)
@ -192,7 +194,7 @@ public class CustomStreamSelector(ILocalFileSystem localFileSystem, ILogger<Cust @@ -192,7 +194,7 @@ public class CustomStreamSelector(ILocalFileSystem localFileSystem, ILogger<Cust
logger.LogDebug(
"Subtitle {@Subtitle} does not match selector item {@SelectorItem}",
new { subtitle.Language, subtitle.Title },
new { Language = safeLanguage, Title = safeTitle },
streamSelectorItem);
}
else
@ -201,7 +203,7 @@ public class CustomStreamSelector(ILocalFileSystem localFileSystem, ILogger<Cust @@ -201,7 +203,7 @@ public class CustomStreamSelector(ILocalFileSystem localFileSystem, ILogger<Cust
logger.LogDebug(
"Subtitle {@Subtitle} matches selector item {@SelectorItem}",
new { subtitle.Language, subtitle.Title },
new { Language = safeLanguage, Title = safeTitle },
streamSelectorItem);
}
}

Loading…
Cancel
Save