mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-04-27 04:24:52 +01:00
Fix SubtitleEncoder and add regression tests
This commit is contained in:
@@ -195,7 +195,7 @@ namespace MediaBrowser.MediaEncoding.Subtitles
|
||||
return AsyncFile.OpenRead(fileInfo.Path);
|
||||
}
|
||||
|
||||
private async Task<SubtitleInfo> GetReadableFile(
|
||||
internal async Task<SubtitleInfo> GetReadableFile(
|
||||
MediaSourceInfo mediaSource,
|
||||
MediaStream subtitleStream,
|
||||
CancellationToken cancellationToken)
|
||||
@@ -205,9 +205,9 @@ namespace MediaBrowser.MediaEncoding.Subtitles
|
||||
string outputFormat;
|
||||
string outputCodec;
|
||||
|
||||
if (string.Equals(subtitleStream.Codec, "ass", StringComparison.OrdinalIgnoreCase) ||
|
||||
string.Equals(subtitleStream.Codec, "ssa", StringComparison.OrdinalIgnoreCase) ||
|
||||
string.Equals(subtitleStream.Codec, "srt", StringComparison.OrdinalIgnoreCase))
|
||||
if (string.Equals(subtitleStream.Codec, "ass", StringComparison.OrdinalIgnoreCase)
|
||||
|| string.Equals(subtitleStream.Codec, "ssa", StringComparison.OrdinalIgnoreCase)
|
||||
|| string.Equals(subtitleStream.Codec, "srt", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
// Extract
|
||||
outputCodec = "copy";
|
||||
@@ -238,7 +238,7 @@ namespace MediaBrowser.MediaEncoding.Subtitles
|
||||
var currentFormat = (Path.GetExtension(subtitleStream.Path) ?? subtitleStream.Codec)
|
||||
.TrimStart('.');
|
||||
|
||||
if (TryGetReader(currentFormat, out _))
|
||||
if (!TryGetReader(currentFormat, out _))
|
||||
{
|
||||
// Convert
|
||||
var outputPath = GetSubtitleCachePath(mediaSource, subtitleStream.Index, ".srt");
|
||||
@@ -248,12 +248,8 @@ namespace MediaBrowser.MediaEncoding.Subtitles
|
||||
return new SubtitleInfo(outputPath, MediaProtocol.File, "srt", true);
|
||||
}
|
||||
|
||||
if (subtitleStream.IsExternal)
|
||||
{
|
||||
return new SubtitleInfo(subtitleStream.Path, _mediaSourceManager.GetPathProtocol(subtitleStream.Path), currentFormat, true);
|
||||
}
|
||||
|
||||
return new SubtitleInfo(subtitleStream.Path, mediaSource.Protocol, currentFormat, true);
|
||||
// It's possbile that the subtitleStream and mediaSource don't share the same protocol (e.g. .STRM file with local subs)
|
||||
return new SubtitleInfo(subtitleStream.Path, _mediaSourceManager.GetPathProtocol(subtitleStream.Path), currentFormat, true);
|
||||
}
|
||||
|
||||
private bool TryGetReader(string format, [NotNullWhen(true)] out ISubtitleParser? value)
|
||||
@@ -756,7 +752,7 @@ namespace MediaBrowser.MediaEncoding.Subtitles
|
||||
}
|
||||
}
|
||||
|
||||
private struct SubtitleInfo
|
||||
internal readonly struct SubtitleInfo
|
||||
{
|
||||
public SubtitleInfo(string path, MediaProtocol protocol, string format, bool isExternal)
|
||||
{
|
||||
@@ -766,13 +762,13 @@ namespace MediaBrowser.MediaEncoding.Subtitles
|
||||
IsExternal = isExternal;
|
||||
}
|
||||
|
||||
public string Path { get; set; }
|
||||
public string Path { get; }
|
||||
|
||||
public MediaProtocol Protocol { get; set; }
|
||||
public MediaProtocol Protocol { get; }
|
||||
|
||||
public string Format { get; set; }
|
||||
public string Format { get; }
|
||||
|
||||
public bool IsExternal { get; set; }
|
||||
public bool IsExternal { get; }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user