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