GPU ile hızlandırılmış Chromium


11

Xubuntu 12.04'ün yeni bir yüklemesini yapıyorum ve nVidia kartımın GPU hızlandırmasını en son kararlı Chromium içinde nasıl etkinleştirebileceğimi bilmek istiyorum. CPU% 100 ateşlemeden bir MP4 dosyası çalmak istedim.

Mplayer ve vdpau'yu kurdum (ve iyi çalışıyorlar), ancak şimdiye kadar bunları Chromium içinde kullanamadım. Birkaç yıl önce gecko-mediaplayer kullandım ama eklenti kara listeye alındı ​​...

Herhangi bir fikir?

İşte çıktı glxinfo | grep render:

direct rendering: Yes
OpenGL renderer string: GeForce GT 520M/PCIe/SSE2
    GL_NV_blend_square, GL_NV_compute_program5, GL_NV_conditional_render, 
    GL_NV_parameter_buffer_object2, GL_NV_path_rendering, 
    GL_NVX_conditional_render, GL_NVX_gpu_memory_info, 

ve işte çıktısı lspci | grep -i vga:

02:00.0 VGA compatible controller: NVIDIA Corporation GF119 [GeForce GT 520M] (rev a1)

Chromium, sayfayı her açtığımda burada gördüğünüz gibi birçok uyarıyı çalıyor ve performans uyarıları denizinde kaybolan umut verici bir ipucu buldum:

NVIDIA: could not open the device file /dev/nvidia0 (Operation not permitted).

Kullanıcı video grubuna eklendikten sonra Chromium artık MP4'leri hiç oynatamıyor (CPU kullanarak bile değil). Daha önce olduğu gibi aynı hata mesajlarını aldım, ancak yeni bir mesaj da çıktı:

[4296: 4296: 0827/100001: HATA: gpu_video_decode_accelerator.cc (208)] Geçersiz içerikte uygulanmadı :: GpuVideoDecodeAccelerator :: Başlat (medya :: VideoCodecProfile, IPC :: İleti *) ** HW video kod çözme hızlandırması mevcut değil **.

CPU kullanımınız neden% 100'e çıkıyor? Herhangi bir HWA olmadan (GPU yok) bile, Google Chrome üzerinden mp4 videoları oynatabilirim ve CPU kullanımı <% 20'dir.

4
4 yaşındaki, 300 $ bilgisayarda 1080p videolar.
João Pereira

Yanıtlar:


7

TL; DR: Aşağıdaki her şeyi denedim ve şimdi bu isabet siyah ekran ile sürece özellikle sabit hata , senin sorunun artık çözülmesi gerektiğini. Şimdi alırsanız:

ERROR:gpu_video_decode_accelerator.cc(208)] Not implemented reached in void content::GpuVideoDecodeAccelerator::Initialize(media::VideoCodecProfile, IPC::Message\*) HW video decode acceleration not available.

aşağıdaki her şeyi denedikten sonra Chrome / ium'u --disable-gpu-sandboxveya ile başlatmayı denemelisiniz --blacklist-accelerated-compositing. Sorunlar devam ederse, bütün değişiklikleri geri ve sorunun ne ayrıntılı bir hatayı bildirmek durumunda, ne denedik ve tüm veriler mümkün adres: about:gpu, about:version, kullandığınız sürücüler, hala onların test etmek isteyenler için vb çekirdek sürümü Şans, daha önce belirtilen anahtarı kullanın, AMD kartlarıyla ilgili sorun yaşıyor mu , "Chrome / ium'u HWA kullanmaya zorlama" bölümü sizin için çalışır. Nvidia özel sürücüleri veya xorg-ppa-edge kullananların, Firefox ile test etmeleri ve sorunun orada olup olmadığını görmeleri gerekir.

Nvidia izin sorunları

NVIDIA: / dev / nvidia0 aygıt dosyasını açamadı (İşleme izin verilmiyor).

Bu, videogrubun bir parçası olmadığınız anlamına gelir . Bu, olabildiğince kolay çözüldü:

sudo adduser Hal video

Sonra oturumunuzu yeniden başlatın ve oradasınız.

Kaynak: http://forums.gentoo.org/viewtopic-p-7232328.html?sid=900a2d59cdb52e1a5f530598dfa1be24#7232328

Chrome / ium'u HWA kullanmaya zorlama

about:gpuChrome / ium'daki bölümünüzü kontrol etmelisiniz . Daha eski bilgisayarlarda HW Hızlandırma varsayılan olarak devre dışıdır ve bunu yalnızca içindeki ayarları geçersiz kılarak etkinleştirebilirsiniz about:flags.

  • about:flagsadres çubuğunda
  • İçin bak geçersiz kılma yazılım redendering listesinde
  • "Etkinleştir" i tıklayın
  • Chrome / ium'u yeniden başlatın

Ayrıca kromu kullanmaya başlayabilirsiniz, chrome --ignore-gpu-blacklistancak bunu her seferinde yapmak zorunda değilsiniz.

Bu benim GPU sayfam

Bu benim bayraklarım


1
Eh, chrome: // gpu'da "yazılım oluşturma listesini geçersiz kıl" seçeneğini etkinleştirdim, kromu yeniden açtım ve HTML5 gömme video etiketi (kaynak bir MP4) içeren yerel bir sayfa açtım, ancak CPU hala% 100'ün üzerinde. Sonra, gecko-mediaplayer'ı kurdum, yeniden başlatma ve yoksayma kara listesi parametresiyle kromu yeniden açtım, ancak böyle bir şans da yoktu. Başka fikir var mı? Grafik özellikleri durumum sizinkilerle aynı.
João Pereira

Video kod çözmenin gerçekten işe yarayıp yaramadığından emin değilim. Ben Ubuntu 12.04 üzerinde Chrome 29 çalıştırıyorum ve "Hızlandırılmış video kod çözme Mac ve Linux'ta kullanılamaz .: 137247, 133828", bu yüzden "Donanım Hızlandırılmış" için var görmek için sürpriz.
gertvdijk

Şimdi, Chromium'un parasını ağzının olduğu yere koymasını sağlayabilirsek ...
João Pereira

1
@Braiam Gerçekten net olmasaydı özür dilerim - bunu benim için de gösterir, ancak "algılanan sorunlar" çıkışında (zorlama seçenekleri devre dışı bırakıldığında) gösterildiği gibi çalışmıyor gibi görünüyor. Ayrıca hata raporuna da bakın ( code.google.com/p/chromium/issues/detail?id=137247 )
gertvdijk

1
@gertvdijk Evet, bu raporu daha önce görmüştüm. Aslında oldukça dar aptal bir politika: Hata raporlarını sevmiyoruz, bu yüzden (azınlık olan) sorun olmadığına inandığımız kartları (gerçekten) yavaşça etkinleştiriyoruz ve iyi çalışabilecek kartlara sahip kullanıcıları bırakıyoruz gerçek performanslarının yalnızca% 0.1'i ile çalışır.
Ağustos'ta Braiam

0

Linux / krom üzerinde Video Kod Çözme için çözüm:

GpuVideoDecodeAccelerator işlevi, krom linux kodunda birkaç ay boyunca devre dışı bırakıldı (açıkça ChromiumOS hariç), bu nedenle kromu şu şekilde yapıştırmanız gerekir:

https://bazaar.launchpad.net/~saiarcot895/chromium-browser/chromium-browser.utopic.beta/view/head:/debian/patches/enable_vaapi_on_linux.diff

veya bu harika PPA'yı kullanın:

https://launchpad.net/~saiarcot895/+archive/ubuntu/chromium-beta

Lib64 ile Intel SandyBridge üzerinde H264 için test edilmiş, harika çalışıyor. VP8 hakkında bilmiyorum.

Burada istendiği gibi Tam Yama:

Index: beta.vivid/content/common/gpu/media/gpu_video_decode_accelerator.cc
===================================================================
--- beta.vivid.orig/content/common/gpu/media/gpu_video_decode_accelerator.cc    2014-12-04 09:32:45.344607112 -0500
+++ beta.vivid/content/common/gpu/media/gpu_video_decode_accelerator.cc 2014-12-04 09:32:45.341607169 -0500
@@ -31,7 +31,7 @@
 #elif defined(OS_CHROMEOS) && defined(ARCH_CPU_ARMEL) && defined(USE_X11)
 #include "content/common/gpu/media/v4l2_video_decode_accelerator.h"
 #include "content/common/gpu/media/v4l2_video_device.h"
-#elif defined(OS_CHROMEOS) && defined(ARCH_CPU_X86_FAMILY) && defined(USE_X11)
+#elif (defined(OS_CHROMEOS) || defined(OS_LINUX)) && defined(ARCH_CPU_X86_FAMILY) && defined(USE_X11)
 #include "content/common/gpu/media/vaapi_video_decode_accelerator.h"
 #include "ui/gl/gl_context_glx.h"
 #include "ui/gl/gl_implementation.h"
@@ -272,7 +272,7 @@
       make_context_current_,
       device.Pass(),
       io_message_loop_));
-#elif defined(OS_CHROMEOS) && defined(ARCH_CPU_X86_FAMILY) && defined(USE_X11)
+#elif (defined(OS_CHROMEOS) || defined(OS_LINUX)) && defined(ARCH_CPU_X86_FAMILY) && defined(USE_X11)
   if (gfx::GetGLImplementation() != gfx::kGLImplementationDesktopGL) {
     VLOG(1) << "HW video decode acceleration not available without "
                "DesktopGL (GLX).";
Index: beta.vivid/content/content_common.gypi
===================================================================
--- beta.vivid.orig/content/content_common.gypi 2014-12-04 09:32:45.344607112 -0500
+++ beta.vivid/content/content_common.gypi  2014-12-04 09:32:45.341607169 -0500
@@ -769,7 +769,7 @@
         '<(DEPTH)/third_party/khronos',
       ],
     }],
-    ['target_arch != "arm" and chromeos == 1 and use_x11 == 1', {
+    ['target_arch != "arm" and (chromeos == 1 or desktop_linux == 1) and use_x11 == 1', {
       'dependencies': [
         '../media/media.gyp:media',
         '../third_party/libyuv/libyuv.gyp:libyuv',
Index: beta.vivid/content/content_gpu.gypi
===================================================================
--- beta.vivid.orig/content/content_gpu.gypi    2014-12-04 09:32:45.344607112 -0500
+++ beta.vivid/content/content_gpu.gypi 2014-12-04 09:32:45.341607169 -0500
@@ -40,7 +40,7 @@
         ],
       },
     }],
-    ['target_arch!="arm" and chromeos == 1', {
+    ['target_arch!="arm" and (chromeos == 1 or desktop_linux == 1)', {
       'include_dirs': [
         '<(DEPTH)/third_party/libva',
       ],
Index: beta.vivid/content/content_tests.gypi
===================================================================
--- beta.vivid.orig/content/content_tests.gypi  2014-12-04 09:32:45.344607112 -0500
+++ beta.vivid/content/content_tests.gypi   2014-12-04 09:32:45.342607150 -0500
@@ -1556,7 +1556,7 @@
           },
         ]
     }],
-    ['chromeos==1 and use_x11 == 1 and target_arch != "arm"', {
+    ['(chromeos==1 or desktop_linux==1) and use_x11 == 1 and target_arch != "arm"', {
       'targets': [
           {
             'target_name': 'vaapi_h264_decoder_unittest',
Index: beta.vivid/content/public/common/content_switches.cc
===================================================================
--- beta.vivid.orig/content/public/common/content_switches.cc   2014-12-04 09:32:45.344607112 -0500
+++ beta.vivid/content/public/common/content_switches.cc    2014-12-04 09:32:45.342607150 -0500
@@ -930,7 +930,7 @@
 // Disable web audio API.
 const char kDisableWebAudio[]               = "disable-webaudio";

-#if defined(OS_CHROMEOS)
+#if defined(OS_CHROMEOS) || defined(OS_LINUX)
 // Disables panel fitting (used for mirror mode).
 const char kDisablePanelFitting[]           = "disable-panel-fitting";

Index: beta.vivid/content/public/common/content_switches.h
===================================================================
--- beta.vivid.orig/content/public/common/content_switches.h    2014-12-04 09:32:45.344607112 -0500
+++ beta.vivid/content/public/common/content_switches.h 2014-12-04 09:32:45.342607150 -0500
@@ -268,7 +268,7 @@

 CONTENT_EXPORT extern const char kDisableWebAudio[];

-#if defined(OS_CHROMEOS)
+#if defined(OS_CHROMEOS) || defined(OS_LINUX)
 CONTENT_EXPORT extern const char kDisablePanelFitting[];
 CONTENT_EXPORT extern const char kDisableVaapiAcceleratedVideoEncode[];
 #endif
Index: beta.vivid/media/media.gyp
===================================================================
--- beta.vivid.orig/media/media.gyp 2014-12-04 09:32:45.344607112 -0500
+++ beta.vivid/media/media.gyp  2014-12-04 09:32:45.342607150 -0500
@@ -672,7 +672,7 @@
           ],
         }],
         # For VaapiVideoEncodeAccelerator.
-        ['target_arch != "arm" and chromeos == 1 and use_x11 == 1', {
+        ['target_arch != "arm" and (chromeos == 1 or desktop_linux == 1) and use_x11 == 1', {
           'sources': [
             'filters/h264_bitstream_buffer.cc',
             'filters/h264_bitstream_buffer.h',
Index: beta.vivid/gpu/config/software_rendering_list_json.cc
===================================================================
--- beta.vivid.orig/gpu/config/software_rendering_list_json.cc  2014-12-04 09:32:45.344607112 -0500
+++ beta.vivid/gpu/config/software_rendering_list_json.cc   2014-12-04 09:32:45.343607131 -0500
@@ -508,8 +508,8 @@
     },
     {
       "id": 48,
-      "description": "Accelerated video decode is unavailable on Mac and Linux",
-      "cr_bugs": [137247, 133828],
+      "description": "Accelerated video decode is unavailable on Mac",
+      "cr_bugs": [133828],
       "exceptions": [
         {
           "os": {
@@ -525,6 +525,11 @@
           "os": {
             "type": "android"
           }
+        },
+        {
+          "os": {
+            "type": "linux"
+          }
         }
       ],
       "features": [
Index: beta.vivid/content/common/sandbox_linux/bpf_gpu_policy_linux.cc
===================================================================
--- beta.vivid.orig/content/common/sandbox_linux/bpf_gpu_policy_linux.cc    2014-12-04 09:32:45.344607112 -0500
+++ beta.vivid/content/common/sandbox_linux/bpf_gpu_policy_linux.cc 2014-12-04 09:32:45.343607131 -0500
@@ -21,6 +21,8 @@
 #include "base/logging.h"
 #include "base/memory/scoped_ptr.h"
 #include "build/build_config.h"
+// Auto-generated for dlopen libva libraries
+#include "content/common/gpu/media/va_stubs.h"
 #include "content/common/sandbox_linux/sandbox_bpf_base_policy_linux.h"
 #include "content/common/sandbox_linux/sandbox_seccomp_bpf_linux.h"
 #include "content/common/set_process_title.h"
@@ -30,6 +32,8 @@
 #include "sandbox/linux/seccomp-bpf-helpers/syscall_sets.h"
 #include "sandbox/linux/services/linux_syscalls.h"
 #include "sandbox/linux/syscall_broker/broker_process.h"
+#include "third_party/libva/va/va.h"
+#include "third_party/libva/va/va_x11.h"

 using sandbox::BrokerProcess;
 using sandbox::SyscallSets;
@@ -38,6 +42,14 @@
 using sandbox::bpf_dsl::ResultExpr;
 using sandbox::bpf_dsl::Trap;

+using content_common_gpu_media::kModuleVa;
+using content_common_gpu_media::InitializeStubs;
+using content_common_gpu_media::StubPathMap;
+
+// libva-x11 depends on libva, so dlopen libva-x11 is enough
+static const base::FilePath::CharType kVaLib[] =
+    FILE_PATH_LITERAL("libva-x11.so.1");
+
 namespace content {

 namespace {
@@ -238,19 +250,38 @@
     // Accelerated video dlopen()'s some shared objects
     // inside the sandbox, so preload them now.
     if (IsAcceleratedVideoEnabled()) {
-      const char* I965DrvVideoPath = NULL;
+      StubPathMap paths;
+      paths[kModuleVa].push_back(kVaLib);
+      if (!InitializeStubs(paths)) {
+        return false;
+      }

-      if (IsArchitectureX86_64()) {
-        I965DrvVideoPath = "/usr/lib64/va/drivers/i965_drv_video.so";
-      } else if (IsArchitectureI386()) {
-        I965DrvVideoPath = "/usr/lib/va/drivers/i965_drv_video.so";
+      // libva drivers won't get loaded even above two libraries get dlopened.
+      // Thus, libva calls will fail after post sandbox stage.
+      //
+      // To get the va driver loadded before sandboxing, upstream simply dlopen
+      // the hard-coded va driver path because ChromeOS is the only platform
+      // that Google want to support libva.
+      //
+      // While generic linux distros ship va driver as anywhere they want.
+      // Fortunately, the va driver will be loadded when vaInitialize() get
+      // called.
+      // So the following code is to call vaInitialize() before sandboxing.
+      Display* x_display = XOpenDisplay(NULL);
+      VADisplay va_display = vaGetDisplay(x_display);
+      if (!vaDisplayIsValid(va_display)) {
+        DVLOG(1) << "Failed to call vaGetDisplay()";
+        return false;
       }

-      dlopen(I965DrvVideoPath, RTLD_NOW|RTLD_GLOBAL|RTLD_NODELETE);
-      dlopen("libva.so.1", RTLD_NOW|RTLD_GLOBAL|RTLD_NODELETE);
-      dlopen("libva-x11.so.1", RTLD_NOW|RTLD_GLOBAL|RTLD_NODELETE);
-    }
-  }
+      int major_version, minor_version;
+      if (vaInitialize(va_display, &major_version, &minor_version)
+          != VA_STATUS_SUCCESS) {
+        DVLOG(1) << "Failed to call vaInitialize()";
+        return false;
+      }
+    }  // end of IsAcceleratedVideoDecodeEnabled()
+  }  // end of IsArchitectureX86_64() || IsArchitectureI386()

   return true;
 }

1
Bu teorik olarak soruyu cevaplayabilse de , cevabın temel kısımlarını buraya dahil etmek ve referans için bağlantı sağlamak tercih edilir.
MadMike

Demek istediğim, kaynağı nasıl alacağınız, yamayı uygulayacağınız ve derleyeceğiniz adımları eklemekti. Veya PPA'nın nasıl ekleneceği ve ekleneceği hakkında.
MadMike
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.