QtWebEngine/VideoAcceleration

From Qt Wiki
< QtWebEngine
Revision as of 11:12, 6 November 2017 by Michal Klocek (talk | contribs) (add "Video playback in Chromium" section)
Jump to navigation Jump to search

Qt WebEngine does not currently support hardware accelerated decoding of videos.

Introduction

One of the most complex operations performed in internet browsers are video decoding and encoding. These compute operations can be executed as part of software implementation which runs on CPU, or the can be hardware accelerated and executed by dedicated hardware chips. By using hardware acceleration, the CPU can be offloaded and it is able to run meanwhile other execution tasks. This results in better interaction performance and it is crucial for embedded devices, where CPU processing power is limited. Moreover, using optimized dedicated hardware usually results in better video performance, quality and lower power consumption compared to software one.

Video playback in Chromium

Chromium video acceleration platform support

Official Chromium enables video acceleration for Windows, macOS, ChromeOS and Android builds.

  • macOs: Video Toolbox
  • ChromeOS on x86_64: VA-API
  • ChromeOS on arm/tegra: V4l2
  • Android: platform MediaCodec
  • Windows: DirectX Video Acceleration (DXVA)

On Linux, Chromium Project is mostly focused on 'desktop builds' which have enough processing power for video encoding and decoding using software based mulithreaded ffmpeg. Therefore, to avoid dealing with possible large number of hardware related bugs, acceleration support on chrome is by default disabled.

However, there is on going community effort to enable video acceleration using VA-API and some Linux distorts like 'Arch' patch chromium already downstream:

Qt WebEngine

Current status of video decode acceleration for Qt WebEngine 5.9 and 5.10 is as follows:

Being considered:

  • Enabling VA API in Qt 5.10 (?) for Chromium 61
  • Implementing a punch hole in scenegraph
  • Supporting GStreamer

TODO

- Needs to be supported by GPU hardware and drivers, usually only supporting some encoding