|
@@ -870,33 +870,47 @@ namespace MediaBrowser.Api.Playback
|
|
|
inputChannels = null;
|
|
|
}
|
|
|
|
|
|
- int? resultChannels = null;
|
|
|
+ int? transcoderChannelLimit = null;
|
|
|
var codec = outputAudioCodec ?? string.Empty;
|
|
|
|
|
|
if (codec.IndexOf("wma", StringComparison.OrdinalIgnoreCase) != -1)
|
|
|
{
|
|
|
// wmav2 currently only supports two channel output
|
|
|
- resultChannels = Math.Min(2, inputChannels ?? 2);
|
|
|
+ transcoderChannelLimit = 2;
|
|
|
}
|
|
|
|
|
|
- else if (request.MaxAudioChannels.HasValue)
|
|
|
+ else if (codec.IndexOf("mp3", StringComparison.OrdinalIgnoreCase) != -1)
|
|
|
+ {
|
|
|
+ // libmp3lame currently only supports two channel output
|
|
|
+ transcoderChannelLimit = 2;
|
|
|
+ }
|
|
|
+ else
|
|
|
{
|
|
|
- var channelLimit = codec.IndexOf("mp3", StringComparison.OrdinalIgnoreCase) != -1
|
|
|
- ? 2
|
|
|
- : 6;
|
|
|
+ // If we don't have any media info then limit it to 6 to prevent encoding errors due to asking for too many channels
|
|
|
+ transcoderChannelLimit = 6;
|
|
|
+ }
|
|
|
|
|
|
- if (inputChannels.HasValue)
|
|
|
- {
|
|
|
- channelLimit = Math.Min(channelLimit, inputChannels.Value);
|
|
|
- }
|
|
|
+ var isTranscodingAudio = !string.Equals(codec, "copy", StringComparison.OrdinalIgnoreCase);
|
|
|
+
|
|
|
+ int? resultChannels = null;
|
|
|
+ if (isTranscodingAudio)
|
|
|
+ {
|
|
|
+ resultChannels = request.TranscodingMaxAudioChannels;
|
|
|
+ }
|
|
|
+ resultChannels = resultChannels ?? request.MaxAudioChannels ?? request.AudioChannels;
|
|
|
|
|
|
- // If we don't have any media info then limit it to 5 to prevent encoding errors due to asking for too many channels
|
|
|
- resultChannels = Math.Min(request.MaxAudioChannels.Value, channelLimit);
|
|
|
+ if (inputChannels.HasValue)
|
|
|
+ {
|
|
|
+ resultChannels = resultChannels.HasValue
|
|
|
+ ? Math.Min(resultChannels.Value, inputChannels.Value)
|
|
|
+ : inputChannels.Value;
|
|
|
}
|
|
|
|
|
|
- if (request.TranscodingMaxAudioChannels.HasValue && !string.Equals(codec, "copy", StringComparison.OrdinalIgnoreCase))
|
|
|
+ if (isTranscodingAudio && transcoderChannelLimit.HasValue)
|
|
|
{
|
|
|
- resultChannels = Math.Min(request.TranscodingMaxAudioChannels.Value, resultChannels ?? inputChannels ?? request.TranscodingMaxAudioChannels.Value);
|
|
|
+ resultChannels = resultChannels.HasValue
|
|
|
+ ? Math.Min(resultChannels.Value, transcoderChannelLimit.Value)
|
|
|
+ : transcoderChannelLimit.Value;
|
|
|
}
|
|
|
|
|
|
return resultChannels ?? request.AudioChannels;
|