|
|
|
@ -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;
|
|
|
|
|