|
@@ -71,6 +71,21 @@ namespace MediaBrowser.Controller.MediaEncoding
|
|
|
"m4v",
|
|
|
};
|
|
|
|
|
|
+ // Set max transcoding channels for encoders that can't handle more than a set amount of channels
|
|
|
+ // AAC, FLAC, ALAC, libopus, libvorbis encoders all support at least 8 channels
|
|
|
+ private static readonly Dictionary<string, int> _audioTranscodeChannelLookup = new(StringComparer.OrdinalIgnoreCase)
|
|
|
+ {
|
|
|
+ { "wmav2", 2 },
|
|
|
+ { "libmp3lame", 2 },
|
|
|
+ { "libfdk_aac", 6 },
|
|
|
+ { "aac_at", 6 },
|
|
|
+ { "ac3", 6 },
|
|
|
+ { "eac3", 6 },
|
|
|
+ { "dts", 6 },
|
|
|
+ { "mlp", 6 },
|
|
|
+ { "truehd", 6 },
|
|
|
+ };
|
|
|
+
|
|
|
public EncodingHelper(
|
|
|
IApplicationPaths appPaths,
|
|
|
IMediaEncoder mediaEncoder,
|
|
@@ -2231,25 +2246,14 @@ namespace MediaBrowser.Controller.MediaEncoding
|
|
|
|
|
|
if (isTranscodingAudio)
|
|
|
{
|
|
|
- // Set max transcoding channels for encoders that can't handle more than a set amount of channels
|
|
|
- // AAC, FLAC, ALAC, libopus, libvorbis encoders all support at least 8 channels
|
|
|
- int transcoderChannelLimit = GetAudioEncoder(state) switch
|
|
|
- {
|
|
|
- string audioEncoder when audioEncoder.Equals("wmav2", StringComparison.OrdinalIgnoreCase)
|
|
|
- || audioEncoder.Equals("libmp3lame", StringComparison.OrdinalIgnoreCase) => 2,
|
|
|
- string audioEncoder when audioEncoder.Equals("libfdk_aac", StringComparison.OrdinalIgnoreCase)
|
|
|
- || audioEncoder.Equals("aac_at", StringComparison.OrdinalIgnoreCase)
|
|
|
- || audioEncoder.Equals("ac3", StringComparison.OrdinalIgnoreCase)
|
|
|
- || audioEncoder.Equals("eac3", StringComparison.OrdinalIgnoreCase)
|
|
|
- || audioEncoder.Equals("dts", StringComparison.OrdinalIgnoreCase)
|
|
|
- || audioEncoder.Equals("mlp", StringComparison.OrdinalIgnoreCase)
|
|
|
- || audioEncoder.Equals("truehd", StringComparison.OrdinalIgnoreCase) => 6,
|
|
|
- // Set default max transcoding channels to 8 to prevent encoding errors due to asking for too many channels
|
|
|
- _ => 8,
|
|
|
- };
|
|
|
+ var audioEncoder = GetAudioEncoder(state);
|
|
|
+ if (!_audioTranscodeChannelLookup.TryGetValue(audioEncoder, out var transcoderChannelLimit))
|
|
|
+ {
|
|
|
+ // Set default max transcoding channels to 8 to prevent encoding errors due to asking for too many channels.
|
|
|
+ transcoderChannelLimit = 8;
|
|
|
+ }
|
|
|
|
|
|
// Set resultChannels to minimum between resultChannels, TranscodingMaxAudioChannels, transcoderChannelLimit
|
|
|
-
|
|
|
resultChannels = transcoderChannelLimit < resultChannels ? transcoderChannelLimit : resultChannels ?? transcoderChannelLimit;
|
|
|
|
|
|
if (request.TranscodingMaxAudioChannels < resultChannels)
|