소스 검색

PlayerComponent: add a setting for copy-back decoding mode

Sometimes helps with avoiding driver problems, but can be useful for
other things as well, such as using a software deinterlacer.
Vincent Lang 8 년 전
부모
커밋
49e477c0dc
2개의 변경된 파일12개의 추가작업 그리고 6개의 파일을 삭제
  1. 1 0
      resources/settings/settings_description.json
  2. 11 6
      src/player/PlayerComponent.cpp

+ 1 - 0
resources/settings/settings_description.json

@@ -225,6 +225,7 @@
           [ "enabled", "video.decode.enabled", { "platforms_excluded": "osx" } ],
           [ "enabled", "video.decode.enabled.modern", { "platforms": "osx" } ],
           [ "osx_compat", "video.decode.enabled.old", { "platforms": "osx" } ],
+          [ "copy", "video.decode.copy" ],
           [ "disabled", "video.decode.disabled" ]
         ],
         "platforms_excluded": "oe_rpi"

+ 11 - 6
src/player/PlayerComponent.cpp

@@ -1041,15 +1041,20 @@ void PlayerComponent::updateVideoSettings()
   mpv::qt::set_option_variant(m_mpv, "video-sync", syncMode);
 
   QString hardwareDecodingMode = SettingsComponent::Get().value(SETTINGS_SECTION_VIDEO, "hardwareDecoding").toString();
-  bool hwdecEnabled = false;
+  QString hwdecMode = "no";
   QString hwdecVTFormat = "nv12";
-  if (hardwareDecodingMode == "enabled") {
-    hwdecEnabled = true;
-  } else if (hardwareDecodingMode == "osx_compat") {
-    hwdecEnabled = true;
+  if (hardwareDecodingMode == "enabled")
+    hwdecMode = "auto";
+  else if (hardwareDecodingMode == "osx_compat")
+  {
+    hwdecMode = "auto";
     hwdecVTFormat = "uyvy422";
   }
-  mpv::qt::set_property_variant(m_mpv, "hwdec", hwdecEnabled ? "auto" : "no");
+  else if (hardwareDecodingMode == "copy")
+  {
+    hwdecMode = "auto-copy";
+  }
+  mpv::qt::set_property_variant(m_mpv, "hwdec", hwdecMode);
   mpv::qt::set_option_variant(m_mpv, "videotoolbox-format", hwdecVTFormat);
 
   QVariant deinterlace = SettingsComponent::Get().value(SETTINGS_SECTION_VIDEO, "deinterlace");