فهرست منبع

Merge pull request #9355 from nyanmisaka/va-vpp-pool-size

Bond-009 2 سال پیش
والد
کامیت
c807712246
1فایلهای تغییر یافته به همراه25 افزوده شده و 4 حذف شده
  1. 25 4
      MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs

+ 25 - 4
MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs

@@ -3214,7 +3214,7 @@ namespace MediaBrowser.Controller.MediaEncoding
 
 
                 // OUTPUT nv12 surface(memory)
                 // OUTPUT nv12 surface(memory)
                 // prefer hwmap to hwdownload on opencl.
                 // prefer hwmap to hwdownload on opencl.
-                var hwTransferFilter = hasGraphicalSubs ? "hwdownload" : "hwmap";
+                var hwTransferFilter = hasGraphicalSubs ? "hwdownload" : "hwmap=mode=read";
                 mainFilters.Add(hwTransferFilter);
                 mainFilters.Add(hwTransferFilter);
                 mainFilters.Add("format=nv12");
                 mainFilters.Add("format=nv12");
             }
             }
@@ -3457,7 +3457,7 @@ namespace MediaBrowser.Controller.MediaEncoding
                 // OUTPUT nv12 surface(memory)
                 // OUTPUT nv12 surface(memory)
                 // prefer hwmap to hwdownload on opencl.
                 // prefer hwmap to hwdownload on opencl.
                 // qsv hwmap is not fully implemented for the time being.
                 // qsv hwmap is not fully implemented for the time being.
-                mainFilters.Add(isHwmapUsable ? "hwmap" : "hwdownload");
+                mainFilters.Add(isHwmapUsable ? "hwmap=mode=read" : "hwdownload");
                 mainFilters.Add("format=nv12");
                 mainFilters.Add("format=nv12");
             }
             }
 
 
@@ -3615,6 +3615,13 @@ namespace MediaBrowser.Controller.MediaEncoding
 
 
                 var outFormat = doTonemap ? string.Empty : "nv12";
                 var outFormat = doTonemap ? string.Empty : "nv12";
                 var hwScaleFilter = GetHwScaleFilter(isVaapiDecoder ? "vaapi" : "qsv", outFormat, inW, inH, reqW, reqH, reqMaxW, reqMaxH);
                 var hwScaleFilter = GetHwScaleFilter(isVaapiDecoder ? "vaapi" : "qsv", outFormat, inW, inH, reqW, reqH, reqMaxW, reqMaxH);
+
+                // allocate extra pool sizes for vaapi vpp
+                if (!string.IsNullOrEmpty(hwScaleFilter) && isVaapiDecoder)
+                {
+                    hwScaleFilter += ":extra_hw_frames=24";
+                }
+
                 // hw scale
                 // hw scale
                 mainFilters.Add(hwScaleFilter);
                 mainFilters.Add(hwScaleFilter);
             }
             }
@@ -3661,7 +3668,7 @@ namespace MediaBrowser.Controller.MediaEncoding
                 // OUTPUT nv12 surface(memory)
                 // OUTPUT nv12 surface(memory)
                 // prefer hwmap to hwdownload on opencl/vaapi.
                 // prefer hwmap to hwdownload on opencl/vaapi.
                 // qsv hwmap is not fully implemented for the time being.
                 // qsv hwmap is not fully implemented for the time being.
-                mainFilters.Add(isHwmapUsable ? "hwmap" : "hwdownload");
+                mainFilters.Add(isHwmapUsable ? "hwmap=mode=read" : "hwdownload");
                 mainFilters.Add("format=nv12");
                 mainFilters.Add("format=nv12");
             }
             }
 
 
@@ -3878,6 +3885,13 @@ namespace MediaBrowser.Controller.MediaEncoding
 
 
                 var outFormat = doTonemap ? string.Empty : "nv12";
                 var outFormat = doTonemap ? string.Empty : "nv12";
                 var hwScaleFilter = GetHwScaleFilter("vaapi", outFormat, inW, inH, reqW, reqH, reqMaxW, reqMaxH);
                 var hwScaleFilter = GetHwScaleFilter("vaapi", outFormat, inW, inH, reqW, reqH, reqMaxW, reqMaxH);
+
+                // allocate extra pool sizes for vaapi vpp
+                if (!string.IsNullOrEmpty(hwScaleFilter))
+                {
+                    hwScaleFilter += ":extra_hw_frames=24";
+                }
+
                 // hw scale
                 // hw scale
                 mainFilters.Add(hwScaleFilter);
                 mainFilters.Add(hwScaleFilter);
             }
             }
@@ -3919,7 +3933,7 @@ namespace MediaBrowser.Controller.MediaEncoding
 
 
                 // OUTPUT nv12 surface(memory)
                 // OUTPUT nv12 surface(memory)
                 // prefer hwmap to hwdownload on opencl/vaapi.
                 // prefer hwmap to hwdownload on opencl/vaapi.
-                mainFilters.Add(isHwmapNotUsable ? "hwdownload" : "hwmap");
+                mainFilters.Add(isHwmapNotUsable ? "hwdownload" : "hwmap=mode=read");
                 mainFilters.Add("format=nv12");
                 mainFilters.Add("format=nv12");
             }
             }
 
 
@@ -4072,6 +4086,13 @@ namespace MediaBrowser.Controller.MediaEncoding
 
 
                 outFormat = doOclTonemap ? string.Empty : "nv12";
                 outFormat = doOclTonemap ? string.Empty : "nv12";
                 var hwScaleFilter = GetHwScaleFilter("vaapi", outFormat, inW, inH, reqW, reqH, reqMaxW, reqMaxH);
                 var hwScaleFilter = GetHwScaleFilter("vaapi", outFormat, inW, inH, reqW, reqH, reqMaxW, reqMaxH);
+
+                // allocate extra pool sizes for vaapi vpp
+                if (!string.IsNullOrEmpty(hwScaleFilter))
+                {
+                    hwScaleFilter += ":extra_hw_frames=24";
+                }
+
                 // hw scale
                 // hw scale
                 mainFilters.Add(hwScaleFilter);
                 mainFilters.Add(hwScaleFilter);
             }
             }