mirror of
https://github.com/Radarr/Radarr
synced 2026-05-07 14:31:22 +02:00
Refactor: Simplify AudioCodecHelper and GetBestAudioStream
- Replace nested if/else chain with flat tuple pattern match - Replace manual loop with MaxBy in GetBestAudioStream - Remove unnecessary GetAudioCodecRank wrapper
This commit is contained in:
parent
6b72400fc0
commit
964ad10541
2 changed files with 55 additions and 168 deletions
|
|
@ -30,147 +30,63 @@ public static class AudioCodecHelper
|
|||
{
|
||||
public static AudioCodec Resolve(string format, string codecID, string profile)
|
||||
{
|
||||
format = format ?? string.Empty;
|
||||
codecID = codecID ?? string.Empty;
|
||||
profile = profile ?? string.Empty;
|
||||
format ??= string.Empty;
|
||||
codecID ??= string.Empty;
|
||||
profile ??= string.Empty;
|
||||
|
||||
if (codecID == "thd+")
|
||||
return (codecID, format, profile) switch
|
||||
{
|
||||
return AudioCodec.TrueHDAtmos;
|
||||
}
|
||||
|
||||
if (format == "truehd")
|
||||
{
|
||||
return AudioCodec.TrueHD;
|
||||
}
|
||||
|
||||
if (format == "flac")
|
||||
{
|
||||
return AudioCodec.FLAC;
|
||||
}
|
||||
|
||||
if (format == "dts")
|
||||
{
|
||||
if (profile == "DTS:X")
|
||||
{
|
||||
return AudioCodec.DTS_X;
|
||||
}
|
||||
|
||||
if (profile == "DTS-HD MA")
|
||||
{
|
||||
return AudioCodec.DTS_HD_MA;
|
||||
}
|
||||
|
||||
if (profile == "DTS-ES")
|
||||
{
|
||||
return AudioCodec.DTS_ES;
|
||||
}
|
||||
|
||||
if (profile == "DTS-HD HRA")
|
||||
{
|
||||
return AudioCodec.DTS_HD_HRA;
|
||||
}
|
||||
|
||||
if (profile == "DTS Express")
|
||||
{
|
||||
return AudioCodec.DTS_Express;
|
||||
}
|
||||
|
||||
if (profile == "DTS 96/24")
|
||||
{
|
||||
return AudioCodec.DTS_9624;
|
||||
}
|
||||
|
||||
return AudioCodec.DTS;
|
||||
}
|
||||
|
||||
if (codecID == "ec+3")
|
||||
{
|
||||
return AudioCodec.EAC3Atmos;
|
||||
}
|
||||
|
||||
if (format == "eac3")
|
||||
{
|
||||
return AudioCodec.EAC3;
|
||||
}
|
||||
|
||||
if (format == "ac3")
|
||||
{
|
||||
return AudioCodec.AC3;
|
||||
}
|
||||
|
||||
if (format == "aac")
|
||||
{
|
||||
if (codecID == "A_AAC/MPEG4/LC/SBR")
|
||||
{
|
||||
return AudioCodec.HE_AAC;
|
||||
}
|
||||
|
||||
return AudioCodec.AAC;
|
||||
}
|
||||
|
||||
if (format == "mp3")
|
||||
{
|
||||
return AudioCodec.MP3;
|
||||
}
|
||||
|
||||
if (format == "mp2")
|
||||
{
|
||||
return AudioCodec.MP2;
|
||||
}
|
||||
|
||||
if (format == "opus")
|
||||
{
|
||||
return AudioCodec.Opus;
|
||||
}
|
||||
|
||||
if (format.StartsWith("pcm_") || format.StartsWith("adpcm_"))
|
||||
{
|
||||
return AudioCodec.PCM;
|
||||
}
|
||||
|
||||
if (format == "vorbis")
|
||||
{
|
||||
return AudioCodec.Vorbis;
|
||||
}
|
||||
|
||||
if (format == "wmav1" ||
|
||||
format == "wmav2" ||
|
||||
format == "wmapro")
|
||||
{
|
||||
return AudioCodec.WMA;
|
||||
}
|
||||
|
||||
return AudioCodec.Unknown;
|
||||
}
|
||||
|
||||
public static string GetDisplayName(AudioCodec codec)
|
||||
{
|
||||
return codec switch
|
||||
{
|
||||
AudioCodec.TrueHDAtmos => "TrueHD Atmos",
|
||||
AudioCodec.TrueHD => "TrueHD",
|
||||
AudioCodec.DTS_X => "DTS-X",
|
||||
AudioCodec.DTS_HD_MA => "DTS-HD MA",
|
||||
AudioCodec.DTS_HD_HRA => "DTS-HD HRA",
|
||||
AudioCodec.DTS_ES => "DTS-ES",
|
||||
AudioCodec.DTS_Express => "DTS Express",
|
||||
AudioCodec.DTS_9624 => "DTS 96/24",
|
||||
AudioCodec.DTS => "DTS",
|
||||
AudioCodec.EAC3Atmos => "EAC3 Atmos",
|
||||
AudioCodec.EAC3 => "EAC3",
|
||||
AudioCodec.FLAC => "FLAC",
|
||||
AudioCodec.AC3 => "AC3",
|
||||
AudioCodec.HE_AAC => "HE-AAC",
|
||||
AudioCodec.AAC => "AAC",
|
||||
AudioCodec.MP3 => "MP3",
|
||||
AudioCodec.MP2 => "MP2",
|
||||
AudioCodec.Opus => "Opus",
|
||||
AudioCodec.PCM => "PCM",
|
||||
AudioCodec.Vorbis => "Vorbis",
|
||||
AudioCodec.WMA => "WMA",
|
||||
_ => string.Empty
|
||||
("thd+", _, _) => AudioCodec.TrueHDAtmos,
|
||||
("ec+3", _, _) => AudioCodec.EAC3Atmos,
|
||||
(_, "truehd", _) => AudioCodec.TrueHD,
|
||||
(_, "flac", _) => AudioCodec.FLAC,
|
||||
(_, "dts", "DTS:X") => AudioCodec.DTS_X,
|
||||
(_, "dts", "DTS-HD MA") => AudioCodec.DTS_HD_MA,
|
||||
(_, "dts", "DTS-HD HRA") => AudioCodec.DTS_HD_HRA,
|
||||
(_, "dts", "DTS-ES") => AudioCodec.DTS_ES,
|
||||
(_, "dts", "DTS Express") => AudioCodec.DTS_Express,
|
||||
(_, "dts", "DTS 96/24") => AudioCodec.DTS_9624,
|
||||
(_, "dts", _) => AudioCodec.DTS,
|
||||
(_, "eac3", _) => AudioCodec.EAC3,
|
||||
(_, "ac3", _) => AudioCodec.AC3,
|
||||
("A_AAC/MPEG4/LC/SBR", "aac", _) => AudioCodec.HE_AAC,
|
||||
(_, "aac", _) => AudioCodec.AAC,
|
||||
(_, "mp3", _) => AudioCodec.MP3,
|
||||
(_, "mp2", _) => AudioCodec.MP2,
|
||||
(_, "opus", _) => AudioCodec.Opus,
|
||||
(_, "vorbis", _) => AudioCodec.Vorbis,
|
||||
(_, "wmav1", _) => AudioCodec.WMA,
|
||||
(_, "wmav2", _) => AudioCodec.WMA,
|
||||
(_, "wmapro", _) => AudioCodec.WMA,
|
||||
_ when format.StartsWith("pcm_") || format.StartsWith("adpcm_") => AudioCodec.PCM,
|
||||
_ => AudioCodec.Unknown
|
||||
};
|
||||
}
|
||||
|
||||
public static string GetDisplayName(AudioCodec codec) => codec switch
|
||||
{
|
||||
AudioCodec.TrueHDAtmos => "TrueHD Atmos",
|
||||
AudioCodec.TrueHD => "TrueHD",
|
||||
AudioCodec.DTS_X => "DTS-X",
|
||||
AudioCodec.DTS_HD_MA => "DTS-HD MA",
|
||||
AudioCodec.DTS_HD_HRA => "DTS-HD HRA",
|
||||
AudioCodec.DTS_ES => "DTS-ES",
|
||||
AudioCodec.DTS_Express => "DTS Express",
|
||||
AudioCodec.DTS_9624 => "DTS 96/24",
|
||||
AudioCodec.DTS => "DTS",
|
||||
AudioCodec.EAC3Atmos => "EAC3 Atmos",
|
||||
AudioCodec.EAC3 => "EAC3",
|
||||
AudioCodec.FLAC => "FLAC",
|
||||
AudioCodec.AC3 => "AC3",
|
||||
AudioCodec.HE_AAC => "HE-AAC",
|
||||
AudioCodec.AAC => "AAC",
|
||||
AudioCodec.MP3 => "MP3",
|
||||
AudioCodec.MP2 => "MP2",
|
||||
AudioCodec.Opus => "Opus",
|
||||
AudioCodec.PCM => "PCM",
|
||||
AudioCodec.Vorbis => "Vorbis",
|
||||
AudioCodec.WMA => "WMA",
|
||||
_ => string.Empty
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -201,36 +201,7 @@ private FFProbePixelFormat GetPixelFormat(string format)
|
|||
|
||||
private static AudioStream GetBestAudioStream(List<AudioStream> audioStreams)
|
||||
{
|
||||
if (audioStreams == null || audioStreams.Count == 0)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
if (audioStreams.Count == 1)
|
||||
{
|
||||
return audioStreams[0];
|
||||
}
|
||||
|
||||
AudioStream best = null;
|
||||
var bestRank = -1;
|
||||
|
||||
foreach (var stream in audioStreams)
|
||||
{
|
||||
var rank = GetAudioCodecRank(stream.CodecName, stream.CodecTagString, stream.Profile);
|
||||
|
||||
if (rank > bestRank)
|
||||
{
|
||||
bestRank = rank;
|
||||
best = stream;
|
||||
}
|
||||
}
|
||||
|
||||
return best;
|
||||
}
|
||||
|
||||
private static int GetAudioCodecRank(string format, string codecID, string profile)
|
||||
{
|
||||
return (int)AudioCodecHelper.Resolve(format, codecID, profile);
|
||||
return audioStreams?.MaxBy(stream => AudioCodecHelper.Resolve(stream.CodecName, stream.CodecTagString, stream.Profile));
|
||||
}
|
||||
|
||||
public static HdrFormat GetHdrFormat(int bitDepth, string colorPrimaries, string transferFunction, List<SideData> sideData)
|
||||
|
|
|
|||
Loading…
Reference in a new issue