GPU ने क्रोमियम को त्वरित किया


11

मैं Xubuntu 12.04 की एक नई स्थापना चला रहा हूं और मैं जानना चाहता हूं कि मैं नवीनतम स्थिर क्रोमियम के अंदर अपने nVidia कार्ड के GPU त्वरण को कैसे सक्रिय कर सकता हूं। मैं CPU फ़ाइल के बिना 100% तक एक MP4 फ़ाइल खेलना चाहता था।

मैंने mplayer और vdpau स्थापित किया है (और वे ठीक काम करते हैं), लेकिन अभी तक मैं उन्हें क्रोमियम के अंदर उपयोग करने में सक्षम नहीं हुआ हूं। कुछ साल पहले, मैंने जेक-मेडियालेयर का इस्तेमाल किया था, लेकिन प्लगइन को ब्लैकलिस्ट किया गया है ...

कोई विचार?

यहाँ का उत्पादन है 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, 

और यहाँ का आउटपुट है lspci | grep -i vga:

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

जब भी मैं पृष्ठ खोलता हूं, क्रोमियम बहुत सारी चेतावनियों का मंथन कर रहा होता है, जैसा कि आप यहां देख सकते हैं और मैंने अभी-अभी एक आशाजनक नेतृत्व पाया है, प्रदर्शन चेतावनी के समुद्र में खो गया है:

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

वीडियो समूह में उपयोगकर्ता को जोड़ने के बाद, क्रोमियम अब MP4 को बिल्कुल भी खेलने में असमर्थ है (हाँ, सीपीयू का उपयोग नहीं कर रहा है)। मुझे पहले जैसा ही त्रुटि संदेश मिला, लेकिन एक नया भी पॉप अप हुआ:

[4296: 4296: 0827/100001: ERROR: gpu_video_decode_accelerator.cc (208)] शून्य सामग्री में लागू नहीं किया गया है :: GpuVideoDecodeAccelerator: "प्रारंभ करें (मीडिया :: VideoCodecProfile, IPC :: Message *) ** HW वीडियो डिकोडेशन त्वरण उपलब्ध नहीं है **।

आपका CPU उपयोग 100% तक क्यों बढ़ जाता है? यहां तक ​​कि किसी भी HWA (कोई GPU) के बिना, मैं Google Chrome के माध्यम से mp4 वीडियो चला सकता हूं और CPU उपयोग <20% है।

4
4 साल पुराने, 300 $ कंप्यूटर पर 1080p वीडियो।
जोओ परेरा

जवाबों:


7

TL; DR: जब तक आपने नीचे सब कुछ करने की कोशिश नहीं की है और अब आपको इस विशेष फिक्स्ड बग को मारते हुए एक ब्लैक स्क्रीन मिलती है , तब तक आपकी समस्या हल हो जानी चाहिए। यदि आप अब प्राप्त करते हैं:

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.

नीचे सब कुछ आज़माने के बाद, फिर आपको Chrome / ium को --disable-gpu-sandboxया उसके साथ शुरू करने का प्रयास करना चाहिए --blacklist-accelerated-compositing। समस्याओं बनी रहती है, सभी परिवर्तनों को वापस और ब्यौरा आपकी समस्या है क्या किसी बग की रिपोर्ट करते हैं, तो क्या आप की कोशिश की है, और सभी डेटा संभव: about:gpu, about:version, ड्राइवरों आप उपयोग कर रहे, कर्नेल संस्करण, आदि जो कि अभी भी अपने परीक्षण करना चाहते हैं किस्मत, पहले बताए गए स्विच का उपयोग करें, क्या एएमडी कार्ड के साथ समस्याएँ हैं, "मजबूर क्रोम / ium का उपयोग करने के लिए HWA" अनुभाग आपके लिए काम करता है। Nvidia प्राइवेटिवेट ड्राइवर या xorg-ppa-edge का उपयोग करने वालों को फ़ायरफ़ॉक्स के साथ परीक्षण करना चाहिए और देखना चाहिए कि क्या समस्या वहाँ भी होती है।

एनवीडिया समस्या की अनुमति देता है

NVIDIA: डिवाइस फ़ाइल / dev / nvidia0 (ऑपरेशन की अनुमति नहीं है) नहीं खोल सका।

इसका मतलब है कि आप videoसमूह का हिस्सा नहीं हैं । यह उतना आसान है जितना आसान हो सकता है:

sudo adduser Hal video

फिर अपने सत्र को पुनः आरंभ करें और आप वहां हैं।

स्रोत: http://forums.gentoo.org/viewtopic-p-7232328.html?sid=900a2d59cdb52e1a5f530598dfa1be24#7232328

Chrome / ium को HWA का उपयोग करने के लिए मजबूर करना

आपको about:gpuChrome / ium में अपना अनुभाग देखना चाहिए । पुराने पीसी में एचडब्ल्यू एक्सेलेरेशन डिफ़ॉल्ट रूप से अक्षम है और आप केवल सेटिंग्स को ओवरराइड करके इसे सक्षम कर सकते हैं about:flags

  • about:flagsअपने एड्रेस बार में खोलें
  • के लिए देखो अवहेलना सॉफ्टवेयर redendering सूची
  • "सक्षम करें" पर क्लिक करें
  • Chrome / ium को पुनरारंभ करें

आप क्रोम का उपयोग करना भी शुरू कर सकते हैं chrome --ignore-gpu-blacklistलेकिन ऐसा करना हर बार आदर्श नहीं होता है।

यह मेरा जीपीयू पेज है

तीस मेरे झंडे हैं


1
ठीक है, मैंने क्रोम में "ओवरराइड सॉफ़्टवेयर रेंडरिंग लिस्ट" को सक्षम किया: // gpu, क्रोमियम को फिर से खोला और एक स्थानीय पृष्ठ खोला जिसमें HTML5 एम्बेड वीडियो टैग (स्रोत एक MP4 है) लेकिन CPU अभी भी 100% से अधिक अच्छा कर रहा है। फिर, मैंने जियोको-मीडियाप्लेयर को स्थापित किया, अनदेखा ब्लैकलिस्ट पैरामीटर के साथ रिबूट और रीओपन किया गया क्रोमियम लेकिन ऐसा कोई भाग्य भी नहीं। कोई अन्य विचार? मेरी ग्राफ़िक सुविधाएँ स्थिति आपके समान है।
जोहो परेरा

मुझे यकीन नहीं है कि अगर वीडियो डिकोडिंग वास्तव में काम कर रहा है। मैं Ubuntu 12.04 पर Chrome 29 चला रहा हूं और मैं देखता हूं "त्वरित वीडियो डिकोड मैक और लिनक्स पर उपलब्ध नहीं है। 137247, 133828", इसलिए मुझे यह देखकर आश्चर्य होता है कि आप इसे "हार्डवेयर त्वरित" के लिए मिला है।
gertvdijk 10

अब, अगर केवल हम क्रोमियम को अपना पैसा लगा सकते हैं, जहां उसका मुंह है ...
जोहो परेरा

1
@Braiam क्षमा करें यदि मैं वास्तव में स्पष्ट नहीं था - तो यह मेरे लिए भी दिखाता है, लेकिन ऐसा लगता है कि यह "समस्याओं का पता चला" आउटपुट में दिखाया गया काम नहीं कर रहा है (जब विकलांग विकल्पों को अक्षम किया गया)। बग रिपोर्ट भी देखें ( code.google.com/p/chromium/issues/detail?id=137247 )
gertvdijk

1
@gertvdijk हाँ, मैंने उस रिपोर्ट को पहले देखा है। वास्तव में एक बहुत ही कठिन गूंगा नीति है: हम बग रिपोर्ट पसंद नहीं करते हैं, इसलिए हम (वास्तव में) धीरे-धीरे उन कार्डों को सक्रिय करते हैं जिनका मानना ​​है कि उन्हें समस्या नहीं है (जो अल्पसंख्यक हैं) और उन उपयोगकर्ताओं को छोड़ दें जिनके पास कार्ड हैं जो ठीक काम कर सकते हैं उनके वास्तविक प्रदर्शन का केवल 0.1% भाग लें।
ब्रिअम

0

लिनक्स / क्रोमियम पर वीडियो डिकोडिंग के लिए समाधान:

GpuVideoDecodeAccelerator फ़ंक्शन को क्रोमियम लिनक्स कोड में कुछ महीनों के लिए अक्षम किया गया है (स्पष्ट रूप से क्रोमियमओएस को छोड़कर) इसलिए आपको क्रोमियम को इस तरह पैच करना होगा:

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

या इस महान पीपीए का उपयोग करें:

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

H264 के लिए Intel SandyBridge पर लिबवा के साथ परीक्षण किया गया, बढ़िया काम करता है। VP8 के बारे में नहीं जानते।

अनुरोध के रूप में यहाँ पूर्ण पैच है:

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
जब भी यह सैद्धांतिक रूप से प्रश्न का उत्तर दे सकता है, तो उत्तर के आवश्यक भागों को शामिल करना और संदर्भ के लिए लिंक प्रदान करना बेहतर होगा
मेडमाइक

मेरे कहने का मतलब यह था कि स्रोत को कैसे प्राप्त किया जाए, पैच को लागू करें और इसे संकलित करें। या कैसे पीपीए जोड़ने और ब्राउज़र स्थापित करने के तरीके पर।
MadMike
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.