|  | @@ -5136,13 +5136,15 @@ namespace MediaBrowser.Controller.MediaEncoding
 | 
	
		
			
				|  |  |                  return (null, null, null);
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +            // ReSharper disable once InconsistentNaming
 | 
	
		
			
				|  |  |              var isMacOS = OperatingSystem.IsMacOS();
 | 
	
		
			
				|  |  |              var vidDecoder = GetHardwareVideoDecoder(state, options) ?? string.Empty;
 | 
	
		
			
				|  |  | +            var isVtDecoder = vidDecoder.Contains("videotoolbox", StringComparison.OrdinalIgnoreCase);
 | 
	
		
			
				|  |  |              var isVtEncoder = vidEncoder.Contains("videotoolbox", StringComparison.OrdinalIgnoreCase);
 | 
	
		
			
				|  |  |              var isVtFullSupported = isMacOS && IsVideoToolboxFullSupported();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              // legacy videotoolbox pipeline (disable hw filters)
 | 
	
		
			
				|  |  | -            if (!isVtEncoder
 | 
	
		
			
				|  |  | +            if (!(isVtEncoder || isVtDecoder)
 | 
	
		
			
				|  |  |                  || !isVtFullSupported
 | 
	
		
			
				|  |  |                  || !_mediaEncoder.SupportsFilter("alphasrc"))
 | 
	
		
			
				|  |  |              {
 | 
	
	
		
			
				|  | @@ -5162,12 +5164,6 @@ namespace MediaBrowser.Controller.MediaEncoding
 | 
	
		
			
				|  |  |              var isVtEncoder = vidEncoder.Contains("videotoolbox", StringComparison.OrdinalIgnoreCase);
 | 
	
		
			
				|  |  |              var isVtDecoder = vidDecoder.Contains("videotoolbox", StringComparison.OrdinalIgnoreCase);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -            if (!isVtEncoder)
 | 
	
		
			
				|  |  | -            {
 | 
	
		
			
				|  |  | -                // should not happen.
 | 
	
		
			
				|  |  | -                return (null, null, null);
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |              var inW = state.VideoStream?.Width;
 | 
	
		
			
				|  |  |              var inH = state.VideoStream?.Height;
 | 
	
		
			
				|  |  |              var reqW = state.BaseRequest.Width;
 | 
	
	
		
			
				|  | @@ -5282,6 +5278,12 @@ namespace MediaBrowser.Controller.MediaEncoding
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              if (usingHwSurface)
 | 
	
		
			
				|  |  |              {
 | 
	
		
			
				|  |  | +                if (!isVtEncoder)
 | 
	
		
			
				|  |  | +                {
 | 
	
		
			
				|  |  | +                    mainFilters.Add("hwdownload");
 | 
	
		
			
				|  |  | +                    mainFilters.Add("format=nv12");
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |                  return (mainFilters, subFilters, overlayFilters);
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -5295,6 +5297,12 @@ namespace MediaBrowser.Controller.MediaEncoding
 | 
	
		
			
				|  |  |                  // this will pass-through automatically if in/out format matches.
 | 
	
		
			
				|  |  |                  mainFilters.Insert(0, "hwupload");
 | 
	
		
			
				|  |  |                  mainFilters.Insert(0, "format=nv12|p010le|videotoolbox_vld");
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                if (!isVtEncoder)
 | 
	
		
			
				|  |  | +                {
 | 
	
		
			
				|  |  | +                    mainFilters.Add("hwdownload");
 | 
	
		
			
				|  |  | +                    mainFilters.Add("format=nv12");
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              return (mainFilters, subFilters, overlayFilters);
 |