Quellcode durchsuchen

solve the green line issue on QSV

nyanmisaka vor 5 Jahren
Ursprung
Commit
ce85cea9fa
1 geänderte Dateien mit 7 neuen und 5 gelöschten Zeilen
  1. 7 5
      MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs

+ 7 - 5
MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs

@@ -483,7 +483,7 @@ namespace MediaBrowser.Controller.MediaEncoding
                     {
                         if (isQsvDecoder)
                         {
-                            arg.Append("-hwaccel qsv ");
+                            arg.Append("-hwaccel qsv -init_hw_device qsv=hw ");
                         }
                         // While using SW decoder
                         else
@@ -1757,7 +1757,7 @@ namespace MediaBrowser.Controller.MediaEncoding
                 // output dimensions. Output dimensions are guaranteed to be even.
                 var outputWidth = width.Value;
                 var outputHeight = height.Value;
-                var vaapi_or_qsv = string.Equals(videoEncoder, "h264_qsv", StringComparison.OrdinalIgnoreCase) ? "qsv" : "vaapi";
+                var qsv_or_vaapi = string.Equals(videoEncoder, "h264_qsv", StringComparison.OrdinalIgnoreCase);
 
                 if (!videoWidth.HasValue
                     || outputWidth != videoWidth.Value
@@ -1765,17 +1765,19 @@ namespace MediaBrowser.Controller.MediaEncoding
                     || outputHeight != videoHeight.Value)
                 {
                     // Force nv12 pixel format to enable 10-bit to 8-bit colour conversion.
+                    // use vpp_qsv filter to avoid green bar when the fixed output size is requested.
                     filters.Add(
                         string.Format(
                             CultureInfo.InvariantCulture,
-                            "scale_{0}=w={1}:h={2}:format=nv12",
-                            vaapi_or_qsv,
+                            "{0}=w={1}:h={2}:format=nv12",
+                            qsv_or_vaapi ? "vpp_qsv" : "scale_vaapi",
                             outputWidth,
                             outputHeight));
                 }
                 else
                 {
-                    filters.Add(string.Format(CultureInfo.InvariantCulture, "scale_{0}=format=nv12", vaapi_or_qsv));
+                    // set w=0:h=0 for vpp_qsv to keep the original dimensions, otherwise it will fail.
+                    filters.Add(string.Format(CultureInfo.InvariantCulture, "{0}format=nv12", qsv_or_vaapi ? "vpp_qsv=w=0:h=0:" : "scale_vaapi="));
                 }
             }
             else if ((videoDecoder ?? string.Empty).IndexOf("cuvid", StringComparison.OrdinalIgnoreCase) != -1