A guide that teach you build a custom version of Chrome / Electron on macOS / Windows / Linux that supports hardware / software HEVC decoding.

Overview

enable-chromium-hevc-hardware-decoding

A guide that teach you build a custom version of Chrome / Electron on macOS / Windows / Linux that supports hardware / software HEVC decoding.

English | 简体中文

Get release build?

Click to download

What's the hardware supported HEVC profile?

HEVC Main (Up to 8192x8192 pixels)

HEVC Main 10 (Up to 8192x8192 pixels)

HEVC Main Still Picture (macOS only, Up to 8192x8192 pixels)

HEVC Rext (macOS only, Up to 8192x8192 pixels)

What's the OS requirement?

macOS Big Sur (11.0) and above

Windows 8 and above

Linux + Vaapi (Not tested)

What's the GPU requirement?

Independent GPU

NVIDIA GTX950 and above

AMD RX460 and above

Integrated GPU

Intel HD4400, HD515 and above

AMD Radeon R7, Vega M and above

Apple M1, M1 Pro, M1 Max, M1 Ultra and above

Detail Table

Intel

AMD

NVIDIA

HDR Supports? (Compared with Edge / Safari)

PQ (SDR Screen) PQ (HDR Screen) HLG (SDR Screen) HLG (HDR Screen)
Chromium macOS (EDR) (EDR)
Chromium Windows
Chromium Linux Not Tested Not Tested Not Tested Not Tested
Edge Windows
Safari macOS (EDR) (EDR)

What's the tech diff? (Compared with Edge / Safari)

Windows

Edge uses VDAVideoDecoder to call MediaFoundation (need to install HEVC Video Extension) to finish the HEVC HW decoding which is the same tech behind Movies and TV builtin system app.

Chromium uses D3D11VideoDecoder to call D3D11VA (no need to install anything) to finish the HEVC HW decoding which is the same tech behind video players like VLC.

macOS

Safari and Chromium use the same VideoToolbox to finish the HEVC HW decoding.

How to verify HEVC hardware support is enabled?

  1. Open chrome://gpu, and search Video Acceleration Information, you should see Decode hevc main field and Decode hevc main 10 field (macOS will show Decode hevc main still-picture and Decode hevc range extensions as well) present if hardware decoding is supported (macOS is an exception here, you see this field doesn't means the decode will use hardware, it actually depends on your GPU).
  2. Open chrome://media-internals and play some HEVC video (Test Page) if the decoder is VDAVideoDecoder or D3D11VideoDecoder or VaapiVideoDecoder that means the video is using hardware decoding (macOS is an exception here, if the OS >= Big Sur, and the GPU doesn't support HEVC, VideoToolbox will fallback to software decode which has a better performance compared with FFMPEG, the decoder is VDAVideoDecoder in this case indeed), and if the decoder is FFMpegVideoDecoder that means the video is using software decoding.
  3. Open Activity Monitor on Mac and search VTDecoderXPCService, if the cpu usage larger than 0 when playing video, that means hardware (or software) decoding is being used.
  4. Open Windows Task Manager on Windows and switch to Performance - GPU, if Video Decoding usage larger than 0 when playing video, that means hardware decoding is being used.

Why my GPU support HEVC, but still not able to hardware decode?

OS version is too low

Windows

Please make sure you are using Windows 8 and above, this is because the D3D11VideoDecoder doesn't support Windows 7, and will use VDAVideoDecoder to hardware decoding. while VDAVideoDecoder based on Media Foundation , and Media Foundation start to support HEVC since Windows 10 1709 (which need you to install the HEVC Video Extension).

macOS

Please make sure you are using macOS Big Sur and above, this is because CMVideoFormatDescriptionCreateFromHEVCParameterSets API has compatibility issue on lower macOS.

GPU driver has bug

Some GPU driver may has bug which will cause D3D11VideoDecoder forbidden to use. in this case, you need to upgrade your GPU driver and try again. See reference

GPU hardware has bug

Some GPU hardware may has bug which will cause D3D11VideoDecoder forbidden to use. in this case, we can't do anything else but to use the FFMPEG software decode. See reference

Will HEVC decoding be enabled in Chrome by default in the future?

Chrome 104 will integrate HEVC hw support for ChromeOS, Mac and Windows, disabled by default, and you can enable it by passing --enable-features=PlatformHEVCDecoderSupport when opening. it should be enabled by default in the future version when stable. (only platform decoder that provided by the OS will be supported in chrome, thus this will be optional depends on the GPU and OS support)

How to Build?

  1. Follow the official build doc to prepare the build environment then fetch the source code from main branch (HEVC HW codes has been merged).
  2. (Optional) To enable HEVC software decoding: switch to src/third_party/ffmpeg dir, then execute git am /path/to/add-hevc-ffmpeg-decoder-parser.patch.
  3. (Optional) To enable other HEVC profiles (non main / main 10 profiles): switch to src dir, then execute git am /path/to/remove-main-main10-profile-limit.patch.
  4. (Optional) To default enable hardware decode: switch to src dir, then execute git am /path/to/enable-hevc-hardware-decoding-by-default.patch.
  5. (Optional) To integrate Widevine CDM to support EME API (like Netflix): switch to src dir, then execute cp -R /path/to/widevine/* third_party/widevine/cdm (Windows: xcopy /path/to/widevine third_party\widevine\cdm /E/H).
  6. If you are using Mac + want to build x64 arch (target_cpu to x86 , arm64 , arm also available) + want to add CDM support, then run gn gen out/Release64 --args="is_component_build = false is_official_build = true is_debug = false ffmpeg_branding = \"Chrome\" target_cpu = \"x64\" proprietary_codecs = true media_use_ffmpeg = true enable_widevine = true bundle_widevine_cdm = true enable_platform_hevc = true enable_hevc_parser_and_hw_decoder = true", if you are using Windows, you need to add enable_media_foundation_widevine_cdm = true as well, if you are using Windows and want to build arm64 arch, then need to change bundle_widevine_cdm to false, an if you are using Linux and don't want to build x64, then need to change enable_widevine to false, bundle_widevine_cdm to false.
  7. Run autoninja -C out/Release64 chrome to start the build.
  8. Run ./out/Release64/Chromium.app/Contents/MacOS/Chromium --args --enable-features=PlatformHEVCDecoderSupport to open chromium if you are using macOS.
  9. Create a desktop shortcut and passing the args like C:\Users\Admin\Desktop\Chromium\chrome.exe --enable-features=PlatformHEVCDecoderSupport then double click the desktop shortcut to open chromium if you are using Windows.

How to integrate this into Chromium based project like Electron?

If Electron = 20 (Chromium 104), then the HEVC hw decoding feature for Mac and Windows should have already been integrated, and you can use app.commandLine.appendSwitch('enable-features', 'PlatformHEVCDecoderSupport') to enable HEVC hw decoding. to add HEVC ffmpeg sw decoding, the method should be the same with Chromium guide above.

If Electron < 20, please follow the CL in Trace Crbug to manually integrate HEVC features, pull request of the patch code wecome.

Change Log

2022-05-25 Update Chrome 104 support status, and Electron 20 enable method

2022-05-24 Update Patch to 104.0.5080.1

2022-05-23 Add CDM compile guide, and update Patch to 104.0.5077.1

2022-05-17 Update detail of tech implement and guide to integrate into electron

2022-05-14 Update Patch to 104.0.5061.1

2022-05-13 Add HEVC Test page

2022-05-10 Update README, add more special detail of the hardware support and GPU models

2022-05-05 Add support for MSP & Rext on macOS, and fix the issue that some HDR & Rec.709 Main10 video can't be hw decoded on Windows

2022-04-27 Replace to git am patch

2022-04-24 Support chinese README

2022-04-21 Add Crbug trace

2022-04-20 Modify README

2022-04-19 Initial commit

Trace Crbug

Windows
macOS

License

MIT

Issues
  • Linux 所有 hevc 视频无法硬解

    Linux 所有 hevc 视频无法硬解

    测试页的视频都可以软解播放,但是 CPU 占用很高,decoder 占用始终为 0。 测试过使用如下参数:--use-gl=desktop --enable-features=VaapiVideoDecoder --disable-features=UseChromeOSDirectVideoDecoder 加和不加都不能硬解。 显卡:NVIDIA 1660s 系统:Arch Linux 最新 kernel 5.17.7 驱动:nvidia 510.68.02-3 libva-vdpau-driver-vp9-git r57.509d3b2-4

    opened by skbeh 16
  • HEVC hardware decode support not surfaced for WebRTC media streams?

    HEVC hardware decode support not surfaced for WebRTC media streams?

    Running Chrome Canary 105 with the --enable-feature=PlatformHEVCDecoderSupport commandline parameter, I still don't see the HEVC decode capability being announced by WebRTC: image

    Is the HEVC decode support limited to MSE APIs, or will it make it into WebRTC media streams as well?

    Thanks!

    opened by Diego-Perez-Botero 4
Releases(106.0.5211.0)
Owner
Sta Zhu
Sta Zhu
Teach you how to code an OS by yourself.

前言 操作系统,作为人类当前创造出来的最复杂的系统,其蕴含了大量精巧的设计。完全理解操作系统,应该是每一个程序员都想做的事情,但是每当我们想要去学习操作系统,了解其奥秘时,都会被里面 晦涩难懂的设计和一些闻所未闻的名词劝退。即使没有被劝退,非常痛苦的看完一本晦涩难懂的操作系统的书籍后,也会发现自己好

null 23 Jul 11, 2022
hotcaKey is the global shortcut (aka hotkey) module for node.js and electron.

?? hotcaKey is the global shortcut (aka hotkey) module for node.js and electron. hotcakey is now actively under deploment, so api may have

daylilyfield 6 Jun 20, 2022
Draw a triangle inside Electron's window using DirectX 11, mixing web and native content.

Draw a triangle inside Electron's window using DirectX 11, mixing web and native content. Limitations The native content is rendered over a child wind

UKABUER 9 Jul 12, 2022
BOF implementation of chlonium tool to dump Chrome/Edge Masterkey

ChromiumKeyDump BOF implementation of Chlonium tool to dump Chrome/Edge Masterkey. Forked from https://github.com/crypt0p3g/bof-collection Setup How t

null 2 Feb 12, 2022
A desktop (supports macOS and Windows) implementation of uni_links plugin.

uni_links_desktop A desktop (supports macOS and Windows) implementation of uni_links plugin. uni_links_desktop Platform Support Quick Start Installati

LeanFlutter 13 Jul 12, 2022
A custom macOS statusbar with shell plugin, interaction and graph support

SketchyBar This is a rewrite of the spacebar project, which itself is a rewrite of the statusbar code from yabai. Features: As many widgets as you lik

Felix Kratz 836 Aug 6, 2022
Utility to install kexts, Frameworks and PrivateFrameworks in the System of macOS. For macOS Monterey 12 and Big Sur 11

Command-Line-SnapShot-Mounter Credit: chris1111 Apple This utility uses the macOS terminal Command Line SnapShot Mounter is an utility that allows you

chris1111 19 Jul 15, 2022
A beginner friendly desktop UI for Tasmota flashed devices for Windows, macOS and Linux.

TasmoManager A beginner friendly desktop UI for Tasmota flashed devices for Windows, macOS and Linux. Features Native Tasmota device discovery (via ta

Tom Butcher 46 Jul 16, 2022
"Sigma File Manager" is a free, open-source, quickly evolving, modern file manager (explorer / finder) app for Windows, MacOS, and Linux.

"Sigma File Manager" is a free, open-source, quickly evolving, modern file manager (explorer / finder) app for Windows, MacOS, and Linux.

Aleksey Hoffman 898 Aug 7, 2022
Filament is a real-time physically based rendering engine for Android, iOS, Windows, Linux, macOS, and WebGL2

Filament Filament is a real-time physically based rendering engine for Android, iOS, Linux, macOS, Windows, and WebGL. It is designed to be as small a

Google 14.4k Aug 11, 2022
Animated sprite editor & pixel art tool (Windows, macOS, Linux)

Aseprite Introduction Aseprite is a program to create animated sprites. Its main features are: Sprites are composed of layers & frames as separated co

Aseprite 18.3k Aug 8, 2022
MTEngineSDL is a SDL2+ImGui engine for macOS, Linux and MS Windows.

Hello and welcome to the MTEngineSDL! This is an application host framework for starting custom apps created using SDL2, ImGui and OpenGL. How to comp

null 3 Jan 10, 2022
C++ Library Manager for Windows, Linux, and MacOS

Vcpkg: Overview 中文总览 Español 한국어 Français Vcpkg helps you manage C and C++ libraries on Windows, Linux and MacOS. This tool and ecosystem are constant

Microsoft 16.4k Aug 8, 2022
Sega Master System / Game Gear / SG-1000 emulator for iOS, macOS, Raspberry Pi, Windows, Linux, BSD and RetroArch.

Gearsystem is a very accurate, cross-platform Sega Master System / Game Gear / SG-1000 emulator written in C++ that runs on Windows, macOS, Linux, BSD, iOS, Raspberry Pi and RetroArch.

Ignacio Sanchez Gines 168 Aug 11, 2022
Feather is a free, open-source Monero wallet for Linux, Tails, macOS and Windows

Feather is a free, open-source Monero wallet for Linux, Tails, macOS and Windows. It is written in C++ with the Qt framework.

Feather Wallet 86 Aug 14, 2022
Had a tough time playing Microsoft Wordament ? Well WORDament_Solver has your back. It suggests you meaningful words you can use while playing the game and help you top the leaderboard.

WORDament_Solver Had a tough time playing Microsoft Wordament ? Well WORDament_Solver has your back. It suggests you meaningful words you can use whil

Tushar Agarwal 3 Aug 19, 2021
Decoding light morse code with a light dependent resistor and Arduino board

Morse decoder The project's idea is very simple, the Arduino program has the responsibility to upload the sensor's data to the USB serial port.

null 15 Mar 12, 2022
⛵ The missing small and fast image decoding library for humans (not for machines).

Squirrel Abstract Image Library The missing fast and easy-to-use image decoding library for humans (not for machines). Target Audience • Features • Im

Dmitry Baryshev 190 Aug 10, 2022
Text utilities, including beam search decoding, tokenizing, and more, built for use in Flashlight.

Flashlight Text: Fast, Lightweight Utilities for Text Quickstart | Installation | Python Documentation | Citing Flashlight Text is a fast, minimal lib

null 14 Aug 2, 2022