@ -27,7 +27,7 @@ namespace Jellyfin.Model.Tests
[InlineData("Chrome", "mp4-h264-ac3-srt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioCodecNotSupported)] // #6450
[InlineData("Chrome", "mp4-hevc-aac-srt-15200k", PlayMethod.Transcode, TranscodeReason.VideoCodecNotSupported, "Transcode")]
[InlineData("Chrome", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.Transcode, TranscodeReason.VideoCodecNotSupported, "Transcode")]
[InlineData("Chrome", "mkv-vp9-aac-srt-2600k", PlayMethod.DirectStream, TranscodeReason. AudioCodec NotSupported)] // #6450
[InlineData("Chrome", "mkv-vp9-aac-srt-2600k", PlayMethod.DirectStream, TranscodeReason. Container NotSupported)] // #6450
[InlineData("Chrome", "mkv-vp9-ac3-srt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioCodecNotSupported)] // #6450
[InlineData("Chrome", "mkv-vp9-vorbis-vtt-2600k", PlayMethod.DirectPlay, (TranscodeReason)0, "Remux")] // #6450
// Firefox
@ -38,7 +38,7 @@ namespace Jellyfin.Model.Tests
[InlineData("Firefox", "mp4-h264-ac3-srt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioCodecNotSupported)] // #6450
[InlineData("Firefox", "mp4-hevc-aac-srt-15200k", PlayMethod.Transcode, TranscodeReason.VideoCodecNotSupported, "Transcode")]
[InlineData("Firefox", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.Transcode, TranscodeReason.VideoCodecNotSupported, "Transcode")]
[InlineData("Firefox", "mkv-vp9-aac-srt-2600k", PlayMethod.DirectStream, TranscodeReason. AudioCodec NotSupported)] // #6450
[InlineData("Firefox", "mkv-vp9-aac-srt-2600k", PlayMethod.DirectStream, TranscodeReason. Container NotSupported)] // #6450
[InlineData("Firefox", "mkv-vp9-ac3-srt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioCodecNotSupported)] // #6450
[InlineData("Firefox", "mkv-vp9-vorbis-vtt-2600k", PlayMethod.DirectPlay, (TranscodeReason)0, "Remux")] // #6450
// Safari
@ -89,7 +89,7 @@ namespace Jellyfin.Model.Tests
[InlineData("Chrome-NoHLS", "mp4-h264-ac3-srt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioCodecNotSupported)] // #6450
[InlineData("Chrome-NoHLS", "mp4-hevc-aac-srt-15200k", PlayMethod.Transcode, TranscodeReason.VideoCodecNotSupported, "Transcode", "http")]
[InlineData("Chrome-NoHLS", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.Transcode, TranscodeReason.VideoCodecNotSupported, "Transcode", "http")]
[InlineData("Chrome-NoHLS", "mkv-vp9-aac-srt-2600k", PlayMethod.DirectStream, TranscodeReason. AudioCodec NotSupported)] // #6450
[InlineData("Chrome-NoHLS", "mkv-vp9-aac-srt-2600k", PlayMethod.DirectStream, TranscodeReason. Container NotSupported)] // #6450
[InlineData("Chrome-NoHLS", "mkv-vp9-ac3-srt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioCodecNotSupported)] // #6450
[InlineData("Chrome-NoHLS", "mkv-vp9-vorbis-vtt-2600k", PlayMethod.DirectPlay, (TranscodeReason)0, "Remux")] // #6450
// TranscodeMedia
@ -177,7 +177,7 @@ namespace Jellyfin.Model.Tests
[InlineData("Chrome", "mp4-h264-ac3-srt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioCodecNotSupported)] // #6450
[InlineData("Chrome", "mp4-hevc-aac-srt-15200k", PlayMethod.Transcode, TranscodeReason.VideoCodecNotSupported, "Transcode")]
[InlineData("Chrome", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.Transcode, TranscodeReason.VideoCodecNotSupported, "Transcode")]
[InlineData("Chrome", "mkv-vp9-aac-srt-2600k", PlayMethod.DirectStream, TranscodeReason. AudioCodec NotSupported)] // #6450
[InlineData("Chrome", "mkv-vp9-aac-srt-2600k", PlayMethod.DirectStream, TranscodeReason. Container NotSupported)] // #6450
[InlineData("Chrome", "mkv-vp9-ac3-srt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioCodecNotSupported)] // #6450
[InlineData("Chrome", "mkv-vp9-vorbis-vtt-2600k", PlayMethod.DirectPlay, (TranscodeReason)0, "Remux")] // #6450
// Firefox
@ -187,7 +187,7 @@ namespace Jellyfin.Model.Tests
[InlineData("Firefox", "mp4-h264-ac3-srt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioCodecNotSupported)] // #6450
[InlineData("Firefox", "mp4-hevc-aac-srt-15200k", PlayMethod.Transcode, TranscodeReason.VideoCodecNotSupported, "Transcode")]
[InlineData("Firefox", "mp4-hevc-ac3-aac-srt-15200k", PlayMethod.Transcode, TranscodeReason.VideoCodecNotSupported, "Transcode")]
[InlineData("Firefox", "mkv-vp9-aac-srt-2600k", PlayMethod.DirectStream, TranscodeReason. AudioCodec NotSupported)] // #6450
[InlineData("Firefox", "mkv-vp9-aac-srt-2600k", PlayMethod.DirectStream, TranscodeReason. Container NotSupported)] // #6450
[InlineData("Firefox", "mkv-vp9-ac3-srt-2600k", PlayMethod.DirectStream, TranscodeReason.AudioCodecNotSupported)] // #6450
[InlineData("Firefox", "mkv-vp9-vorbis-vtt-2600k", PlayMethod.DirectPlay, (TranscodeReason)0, "Remux")] // #6450
// Safari
@ -338,23 +338,23 @@ namespace Jellyfin.Model.Tests
Assert . NotNull ( mediaSource ) ;
var videoStreams = mediaSource . MediaStreams . Where ( stream = > stream . Type = = MediaStreamType . Video ) ;
var audioStreams = mediaSource . MediaStreams . Where ( stream = > stream . Type = = MediaStreamType . Audio ) ;
// TODO: c heck AudioStreamIndex vs options.AudioStreamIndex
// TODO: C heck AudioStreamIndex vs options.AudioStreamIndex
var inputAudioStream = mediaSource . GetDefaultAudioStream ( audioStreamIndexInput ? ? mediaSource . DefaultAudioStreamIndex ) ;
var uri = ParseUri ( val ) ;
if ( playMethod = = PlayMethod . DirectPlay )
{
// c heck expected container
// C heck expected container
var containers = ContainerProfile . SplitValue ( mediaSource . Container ) ;
// TODO: t est transcode too
// TODO: T est transcode too
// Assert.Contains(uri.Extension, containers);
// c heck expected video codec (1)
// C heck expected video codec (1)
Assert . Contains ( targetVideoStream . Codec , val . TargetVideoCodec ) ;
Assert . Single ( val . TargetVideoCodec ) ;
// c heck expected audio codecs (1)
// C heck expected audio codecs (1)
Assert . Contains ( targetAudioStream . Codec , val . TargetAudioCodec ) ;
Assert . Single ( val . TargetAudioCodec ) ;
// Assert.Single(val.AudioCodecs);
@ -370,7 +370,7 @@ namespace Jellyfin.Model.Tests
Assert . NotEmpty ( val . VideoCodecs ) ;
Assert . NotEmpty ( val . AudioCodecs ) ;
// c heck expected container (todo: this could be a test param)
// C heck expected container (todo: this could be a test param)
if ( transcodeProtocol = = "http" )
{
// Assert.Equal("webm", val.Container);
@ -403,32 +403,39 @@ namespace Jellyfin.Model.Tests
stream = > Assert . DoesNotContain ( stream . Codec , val . VideoCodecs ) ) ;
}
// todo: f ill out tests here
// TODO: F ill out tests here
}
// DirectStream and Remux
else
{
// c heck expected video codec (1)
// C heck expected video codec (1)
Assert . Contains ( targetVideoStream . Codec , val . TargetVideoCodec ) ;
Assert . Single ( val . TargetVideoCodec ) ;
if ( transcodeMode = = "DirectStream" )
{
// Check expected audio codecs (1)
if ( ! targetAudioStream . IsExternal )
{
// check expected audio codecs (1)
Assert . DoesNotContain ( targetAudioStream . Codec , val . AudioCodecs ) ;
if ( val . TranscodeReasons . HasFlag ( TranscodeReason . ContainerNotSupported ) )
{
Assert . Contains ( targetAudioStream . Codec , val . AudioCodecs ) ;
}
else
{
Assert . DoesNotContain ( targetAudioStream . Codec , val . AudioCodecs ) ;
}
}
}
else if ( transcodeMode = = "Remux" )
{
// check expected audio codecs (1)
// C heck expected audio codecs (1)
Assert . Contains ( targetAudioStream . Codec , val . AudioCodecs ) ;
Assert . Single ( val . AudioCodecs ) ;
}
// v ideo details
// V ideo details
var videoStream = targetVideoStream ;
Assert . False ( val . EstimateContentLength ) ;
Assert . Equal ( TranscodeSeekInfo . Auto , val . TranscodeSeekInfo ) ;
@ -437,10 +444,10 @@ namespace Jellyfin.Model.Tests
Assert . Equal ( videoStream . BitDepth , val . TargetVideoBitDepth ) ;
Assert . InRange ( val . VideoBitrate . GetValueOrDefault ( ) , videoStream . BitRate . GetValueOrDefault ( ) , int . MaxValue ) ;
// a udio codec not supported
// A udio codec not supported
if ( ( why & TranscodeReason . AudioCodecNotSupported ) ! = 0 )
{
// a udio stream specified
// A udio stream specified
if ( options . AudioStreamIndex > = 0 )
{
// TODO:fixme
@ -450,10 +457,10 @@ namespace Jellyfin.Model.Tests
}
}
// a udio stream not specified
// A udio stream not specified
else
{
// TODO: f ixme
// TODO: F ixme
Assert . All ( audioStreams , stream = >
{
if ( ! stream . IsExternal )