| 
					
				 | 
			
			
				@@ -5940,7 +5940,7 @@ namespace MediaBrowser.Controller.MediaEncoding 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         // Use NV15 instead of P010 to avoid the issue. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         // SDR inputs are using BGRA formats already which is not affected. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         var intermediateFormat = string.Equals(outFormat, "p010", StringComparison.OrdinalIgnoreCase) ? "nv15" : outFormat; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        var hwScaleFilterFirstPass = $"scale_rkrga=w=iw/7.9:h=ih/7.9:format={intermediateFormat}:force_divisible_by=4:afbc=1"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        var hwScaleFilterFirstPass = $"scale_rkrga=w=iw/7.9:h=ih/7.9:format={intermediateFormat}:force_original_aspect_ratio=increase:force_divisible_by=4:afbc=1"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         mainFilters.Add(hwScaleFilterFirstPass); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -6018,9 +6018,10 @@ namespace MediaBrowser.Controller.MediaEncoding 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 if (hasSubs) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    var subMaxH = 1080; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     if (hasGraphicalSubs) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        var subPreProcFilters = GetGraphicalSubPreProcessFilters(swpInW, swpInH, subW, subH, reqW, reqH, reqMaxW, reqMaxH); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        var subPreProcFilters = GetGraphicalSubPreProcessFilters(swpInW, swpInH, subW, subH, reqW, reqH, reqMaxW, subMaxH); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         subFilters.Add(subPreProcFilters); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         subFilters.Add("format=bgra"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -6030,7 +6031,7 @@ namespace MediaBrowser.Controller.MediaEncoding 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         var subFramerate = hasAssSubs ? Math.Min(framerate ?? 25, 60) : 10; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         // alphasrc=s=1280x720:r=10:start=0,format=bgra,subtitles,hwupload 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        var alphaSrcFilter = GetAlphaSrcFilter(state, swpInW, swpInH, reqW, reqH, reqMaxW, reqMaxH, subFramerate); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        var alphaSrcFilter = GetAlphaSrcFilter(state, swpInW, swpInH, reqW, reqH, reqMaxW, subMaxH, subFramerate); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         var subTextSubtitlesFilter = GetTextSubtitlesFilter(state, true, true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         subFilters.Add(alphaSrcFilter); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         subFilters.Add("format=bgra"); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -6039,6 +6040,13 @@ namespace MediaBrowser.Controller.MediaEncoding 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     subFilters.Add("hwupload=derive_device=rkmpp"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    // offload 1080p+ subtitles swscale upscaling from CPU to RGA 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    var (overlayW, overlayH) = GetFixedOutputSize(swpInW, swpInH, reqW, reqH, reqMaxW, reqMaxH); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (overlayW.HasValue && overlayH.HasValue && overlayH.Value > subMaxH) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        subFilters.Add($"vpp_rkrga=w={overlayW.Value}:h={overlayH.Value}:format=bgra:afbc=1"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     // try enabling AFBC to save DDR bandwidth 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     var hwOverlayFilter = "overlay_rkrga=eof_action=pass:repeatlast=0:format=nv12"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     if (isEncoderSupportAfbc) 
			 |