@ -649,11 +649,6 @@ namespace MediaBrowser.MediaEncoding.Probing
stream . IsAVC = false ;
}
if ( ! string . IsNullOrWhiteSpace ( streamInfo . FieldOrder ) & & ! string . Equals ( streamInfo . FieldOrder , "progressive" , StringComparison . OrdinalIgnoreCase ) )
{
stream . IsInterlaced = true ;
}
// Filter out junk
if ( ! string . IsNullOrWhiteSpace ( streamInfo . CodecTagString ) & & ! streamInfo . CodecTagString . Contains ( "[0]" , StringComparison . OrdinalIgnoreCase ) )
{
@ -725,6 +720,23 @@ namespace MediaBrowser.MediaEncoding.Probing
stream . AverageFrameRate = GetFrameRate ( streamInfo . AverageFrameRate ) ;
stream . RealFrameRate = GetFrameRate ( streamInfo . RFrameRate ) ;
// Some interlaced H.264 files in mp4 containers using MBAFF coding aren't flagged as being interlaced by FFprobe,
// so for H.264 files we also calculate the frame rate from the codec time base and check if it is double the reported
// frame rate (both rounded to the nearest integer) to determine if the file is interlaced
float roundedTimeBaseFPS = MathF . Round ( 1 / GetFrameRate ( stream . CodecTimeBase ) ? ? 0 ) ;
float roundedDoubleFrameRate = MathF . Round ( stream . AverageFrameRate * 2 ? ? 0 ) ;
bool videoInterlaced = ! string . IsNullOrWhiteSpace ( streamInfo . FieldOrder )
& & ! string . Equals ( streamInfo . FieldOrder , "progressive" , StringComparison . OrdinalIgnoreCase ) ;
bool h264MbaffCoded = string . Equals ( stream . Codec , "h264" , StringComparison . OrdinalIgnoreCase )
& & string . IsNullOrWhiteSpace ( streamInfo . FieldOrder )
& & roundedTimeBaseFPS = = roundedDoubleFrameRate ;
if ( videoInterlaced | | h264MbaffCoded )
{
stream . IsInterlaced = true ;
}
if ( isAudio
| | string . Equals ( stream . Codec , "mjpeg" , StringComparison . OrdinalIgnoreCase )
| | string . Equals ( stream . Codec , "gif" , StringComparison . OrdinalIgnoreCase )