SlideShare a Scribd company logo
Philippe Normand
philn@igalia.com
Linaro Connect
San Diego, California
23rd-27th September 2019
WPEWebKit
The WebKit port for Embedded
Who am I?
●
Fiddling with WebKit and GStreamer since 2009
●
WebKit committer and reviewer
●
GStreamer committer
●
Partner at Igalia
●
Worker-owned coop, currently around 80 happy Igalians
around the world
●
Provides consulting services for various Free Software
projects
Talk Outline
●
What is WPE
●
Basic infrastructure for Media playback
●
Adaptive streaming in HTML5: Media Source Extensions
●
Media-capabilities
●
Enabling WPE in your apps
●
Hands-on: WPE integration with Yocto on I.MX6 & I.MX8M
WPE, Web Platform for Embedded
WPE, the basics
●
Web-engine based on WebKit, tailored for a wide range
embedded devices
●
6 months release cycle synchronized with WebKitGTK,
including security updates
●
No dependency on any UI toolkit library
●
Pluggable view backends in charge of final rendering
●
Wayland
●
Android experiment
●
Device-specific graphics drivers
WPE backend for FDO
●
Relies on wayland-egl
●
Cross-process buffer sharing
●
API for:
●
EGLImages
●
Or wl_resource objects
●
Or Linux dma-buf information (already used internally)
●
Combined with Mesa
●
Works on desktop (packaged in Fedora 30, soon Debian) &
embedded (Yocto & Buildroot)
Platform support for media playback
in WPE
GStreamer
●
A cross-platform framework for creating Multimedia applications
●
Graph-based processing, example of a basic ogg/vorbis player:
<audio> & <video> in WPE
●
Playbin-based MediaPlayerPrivate implementation
●
GL Video rendering with a custom appsink
●
Custom GstAllocator using WebKit’s FastMalloc
●
White list of supported containers and codecs
●
Codec installer support effectively useless
Adaptive streaming: MSE
By Alicia Boya & Enrique Ocaña
The MSE backend, TL;DR
●
Chunks queued from JavaScript world to a SourceBuffer
●
One GStreamer WebKit Append pipeline per SourceBuffer
●
Demuxing and parsing of samples
●
Samples stored at WebCore’s MSE layer
●
Playback pipeline using a dedicated MediaPlayerPrivate
implementation
●
Playbin-based
●
Custom source element (one source pad per SourceBuffer)
MSE-related improvements in
GStreamer
●
Quite a few improvements in qtdemux for:
●
Samples demuxing in push-mode
●
Edit list support for push-mode
●
Segment event handling
●
Duration-related bug fixes
●
=> Around 15 patches so far!
●
Matroskademux improvements
●
Emit no-more-pads earlier (after parsing Tracks) (used to be sent
while processing the first Cluster)
●
Multi-Tracks parsing
●
Fixes for WebM byte-stream format handling
Current status & plans
●
MSE enabled in GNOME-Web!
●
MSE backend widely tested on embedded platforms (RPi, i-MX6, …)
●
Infrastructure available for combination with EME
●
Youtube (“desktop” and /tv) relying on MSE
●
VP9 & opus
●
H.264 & AAC also supported
●
Playbin3 / Stream-collections support: DONE in trunk
●
Multi-track SourceBuffer support: planned
Media-Capabilities
The (draft) spec
●
https://wicg.github.io/media-capabilities/
●
Goal: provide hints to WebApps regarding the most optimal
media encoders & decoders
●
Input: description of the media format (contentType, width,
height, framerate, …)
●
Output: 3 booleans:
– supported
– smooth
– powerEfficient
GStreamer “probing”
●
New “Hardware” element metadata Classifier (=> 1.16 )
●
Elements may implement probing for their NULL→READY state
transition
●
Possibly refine Caps templates to reflect what the hardware
supports
●
V4L2 decoders (AVC1 profile/level) (>= 1.18)
●
More decoders
●
Basic WebKit GStreamer MediaCapabilities backend working
for decoders probing
Enabling WPE in your apps
Three examples
Cog, the WPE launcher
●
Native application
●
Can work in fullscreen or window mode (no window manager
decorations yet)
●
Provides an API wrapping some of its features
●
D-Bus client API for remoting
●
Two rendering backends:
●
One based on WPEBackend-FDO (mature)
●
One based on libdrm, gbm, libinput (experimental)
Qt5 QML
●
WPEQt QML plugin upstream in WebKit since version 2.24
●
API mimicks QwebView => easy migration path!
●
Depends on WPEBackend-FDO
●
Works on Linux (Wayland and EGLFS)
●
More details:
https://base-art.net/Articles/introducing-wpeqt-a-wpe-api-for-qt5/
GstWPE: HTML overlay in
GStreamer pipelines
●
GStreamer source element acting as a web-browser
●
Outputs GStreamer buffers containing EGLImages wrapped in
GstGLMemory’s
●
Allows for zero-copy composition with other GL backed video
streams
●
More details: https://bit.ly/2kmee2p
WPE/GStreamer on i.MX6
QuadPlus & i.MX8M with Yocto
Yocto layers
●
https://github.com/Igalia/meta-webkit/
●
WPEBackends
●
Cog browser!
●
https://github.com/OSSystems/meta-gstreamer
1.0
●
Updated GStreamer 1.14.x recipes
●
Poky reference distro
●
(meta-freescale)
Open-source etnaviv driver
●
Requires recent kernel (4.19), Mesa (18.2.2),
Wayland (1.16), GStreamer (1.14.4)
●
Usable WPEBackends, only working in Weston:
●
WPEBackend-RDK/wayland
●
WPEBackend-fdo (recommended)
●
Upstream v4l2 plugin from gst-plugins-good for
hardware decoding (and encoding) support
i.MX6 video decoding
●
CODA960 kernel driver
●
Mature integration with gst-plugins-good v4l2
plugin
●
On QuadPlus: H.264 1080P@30 handled but
sometimes drops frames: 720P recommended:
$ export WEBKIT_GST_MAX_AVC1_RESOLUTION=720P
i.MX8M video decoding
●
Experimental Hantro G1 kernel driver and integration
with gst-plugins-good
●
Development by Collabora and Pengutronix
●
Scheduled for the kernel 5.4
●
Status:
●
1080P@30 H.264 smooth playback
●
Should allow for up to 4K@30 with VP8 and H.264 and
4K@60 with VP9 and HEVC
●
HEVC and VP9 support: Work in progress
YUV video rendering
●
Current video sink in WebKit only handles RGBA
●
GStreamer video decoders often output YUV:
●
Semi-planar NV12 or planar I420 (gst-vaapi, vpxdec)
●
Interleaved YUYV (gst-v4l2)
●
One extra colorspace conversion (YUV→ RGBA)
required due to WebKit
●
On-going work in WebKit to directly handle
interleaved YUV formats, lowering the cost of the
colorspace conversions in the 3D GPU.
WPEWebKit, the WebKit port for embedded platforms (Linaro Connect San Diego 2019)

More Related Content

Similar to WPEWebKit, the WebKit port for embedded platforms (Linaro Connect San Diego 2019)

Inject the Web into your GStreamer pipeline with WPE using a GStreamer/WebKit...
Inject the Web into your GStreamer pipeline with WPE using a GStreamer/WebKit...Inject the Web into your GStreamer pipeline with WPE using a GStreamer/WebKit...
Inject the Web into your GStreamer pipeline with WPE using a GStreamer/WebKit...
Igalia
 
WPE, a New WebKit Port Optimised for Embedded (IBC 2017)
WPE, a New WebKit Port Optimised for Embedded (IBC 2017)WPE, a New WebKit Port Optimised for Embedded (IBC 2017)
WPE, a New WebKit Port Optimised for Embedded (IBC 2017)
Igalia
 
Multimedia support in WebKitGTK and WPE, current status and plans (GStreamer ...
Multimedia support in WebKitGTK and WPE, current status and plans (GStreamer ...Multimedia support in WebKitGTK and WPE, current status and plans (GStreamer ...
Multimedia support in WebKitGTK and WPE, current status and plans (GStreamer ...
Igalia
 
A Browser for the Automotive: Introduction to WebKit for Wayland (Automotive ...
A Browser for the Automotive: Introduction to WebKit for Wayland (Automotive ...A Browser for the Automotive: Introduction to WebKit for Wayland (Automotive ...
A Browser for the Automotive: Introduction to WebKit for Wayland (Automotive ...
Igalia
 
Update on the open source browser space (16th GENIVI AMM)
Update on the open source browser space (16th GENIVI AMM)Update on the open source browser space (16th GENIVI AMM)
Update on the open source browser space (16th GENIVI AMM)
Igalia
 
WebKit and GStreamer
WebKit and GStreamerWebKit and GStreamer
WebKit and GStreamer
calvaris
 
WebKit and GStreamer (GStreamer Conference 2013)
WebKit and GStreamer (GStreamer Conference 2013)WebKit and GStreamer (GStreamer Conference 2013)
WebKit and GStreamer (GStreamer Conference 2013)
Igalia
 
WebKit-powered HTML overlays in your pipeline with GstWPE (GStreamer Conferen...
WebKit-powered HTML overlays in your pipeline with GstWPE (GStreamer Conferen...WebKit-powered HTML overlays in your pipeline with GstWPE (GStreamer Conferen...
WebKit-powered HTML overlays in your pipeline with GstWPE (GStreamer Conferen...
Igalia
 
HTML5 on the AGL demo platform with Chromium and WAM (AGL AMM March 2021)
HTML5 on the AGL demo platform with Chromium and WAM (AGL AMM March 2021)HTML5 on the AGL demo platform with Chromium and WAM (AGL AMM March 2021)
HTML5 on the AGL demo platform with Chromium and WAM (AGL AMM March 2021)
Igalia
 
Add the power of the Web to your embedded devices with WPE WebKit
Add the power of the Web to your embedded devices with WPE WebKitAdd the power of the Web to your embedded devices with WPE WebKit
Add the power of the Web to your embedded devices with WPE WebKit
Igalia
 
GStreamer support in WebKit. What's new? (GStreamer Conference 2015)
GStreamer support in WebKit. What's new? (GStreamer Conference 2015)GStreamer support in WebKit. What's new? (GStreamer Conference 2015)
GStreamer support in WebKit. What's new? (GStreamer Conference 2015)
Igalia
 
GStreamer support in WebKit. what’s new?
GStreamer support in WebKit. what’s new?GStreamer support in WebKit. what’s new?
GStreamer support in WebKit. what’s new?
philn2
 
HTML5 Apps on AGL Platform with the Web Application Manager (Automotive Grade...
HTML5 Apps on AGL Platform with the Web Application Manager (Automotive Grade...HTML5 Apps on AGL Platform with the Web Application Manager (Automotive Grade...
HTML5 Apps on AGL Platform with the Web Application Manager (Automotive Grade...
Igalia
 
Multimedia in WebKitGtk+, past/present/future
Multimedia in WebKitGtk+, past/present/futureMultimedia in WebKitGtk+, past/present/future
Multimedia in WebKitGtk+, past/present/future
philn2
 
WebKit Contributors Meeting 2022
WebKit Contributors Meeting 2022WebKit Contributors Meeting 2022
WebKit Contributors Meeting 2022
Igalia
 
Javascript as a target language - GWT KickOff - Part 2/2
Javascript as a target language - GWT KickOff - Part 2/2Javascript as a target language - GWT KickOff - Part 2/2
Javascript as a target language - GWT KickOff - Part 2/2
JooinK
 
Embedding Chromium into AGL demo platform with WAM
Embedding Chromium into AGL demo platform with WAMEmbedding Chromium into AGL demo platform with WAM
Embedding Chromium into AGL demo platform with WAM
Igalia
 
JS digest. November 2017
JS digest. November 2017JS digest. November 2017
JS digest. November 2017
ElifTech
 
JS digest. October 2017
JS digest. October 2017 JS digest. October 2017
JS digest. October 2017
ElifTech
 
WebKit2 And You (GUADEC 2013)
WebKit2 And You (GUADEC 2013)WebKit2 And You (GUADEC 2013)
WebKit2 And You (GUADEC 2013)
Igalia
 

Similar to WPEWebKit, the WebKit port for embedded platforms (Linaro Connect San Diego 2019) (20)

Inject the Web into your GStreamer pipeline with WPE using a GStreamer/WebKit...
Inject the Web into your GStreamer pipeline with WPE using a GStreamer/WebKit...Inject the Web into your GStreamer pipeline with WPE using a GStreamer/WebKit...
Inject the Web into your GStreamer pipeline with WPE using a GStreamer/WebKit...
 
WPE, a New WebKit Port Optimised for Embedded (IBC 2017)
WPE, a New WebKit Port Optimised for Embedded (IBC 2017)WPE, a New WebKit Port Optimised for Embedded (IBC 2017)
WPE, a New WebKit Port Optimised for Embedded (IBC 2017)
 
Multimedia support in WebKitGTK and WPE, current status and plans (GStreamer ...
Multimedia support in WebKitGTK and WPE, current status and plans (GStreamer ...Multimedia support in WebKitGTK and WPE, current status and plans (GStreamer ...
Multimedia support in WebKitGTK and WPE, current status and plans (GStreamer ...
 
A Browser for the Automotive: Introduction to WebKit for Wayland (Automotive ...
A Browser for the Automotive: Introduction to WebKit for Wayland (Automotive ...A Browser for the Automotive: Introduction to WebKit for Wayland (Automotive ...
A Browser for the Automotive: Introduction to WebKit for Wayland (Automotive ...
 
Update on the open source browser space (16th GENIVI AMM)
Update on the open source browser space (16th GENIVI AMM)Update on the open source browser space (16th GENIVI AMM)
Update on the open source browser space (16th GENIVI AMM)
 
WebKit and GStreamer
WebKit and GStreamerWebKit and GStreamer
WebKit and GStreamer
 
WebKit and GStreamer (GStreamer Conference 2013)
WebKit and GStreamer (GStreamer Conference 2013)WebKit and GStreamer (GStreamer Conference 2013)
WebKit and GStreamer (GStreamer Conference 2013)
 
WebKit-powered HTML overlays in your pipeline with GstWPE (GStreamer Conferen...
WebKit-powered HTML overlays in your pipeline with GstWPE (GStreamer Conferen...WebKit-powered HTML overlays in your pipeline with GstWPE (GStreamer Conferen...
WebKit-powered HTML overlays in your pipeline with GstWPE (GStreamer Conferen...
 
HTML5 on the AGL demo platform with Chromium and WAM (AGL AMM March 2021)
HTML5 on the AGL demo platform with Chromium and WAM (AGL AMM March 2021)HTML5 on the AGL demo platform with Chromium and WAM (AGL AMM March 2021)
HTML5 on the AGL demo platform with Chromium and WAM (AGL AMM March 2021)
 
Add the power of the Web to your embedded devices with WPE WebKit
Add the power of the Web to your embedded devices with WPE WebKitAdd the power of the Web to your embedded devices with WPE WebKit
Add the power of the Web to your embedded devices with WPE WebKit
 
GStreamer support in WebKit. What's new? (GStreamer Conference 2015)
GStreamer support in WebKit. What's new? (GStreamer Conference 2015)GStreamer support in WebKit. What's new? (GStreamer Conference 2015)
GStreamer support in WebKit. What's new? (GStreamer Conference 2015)
 
GStreamer support in WebKit. what’s new?
GStreamer support in WebKit. what’s new?GStreamer support in WebKit. what’s new?
GStreamer support in WebKit. what’s new?
 
HTML5 Apps on AGL Platform with the Web Application Manager (Automotive Grade...
HTML5 Apps on AGL Platform with the Web Application Manager (Automotive Grade...HTML5 Apps on AGL Platform with the Web Application Manager (Automotive Grade...
HTML5 Apps on AGL Platform with the Web Application Manager (Automotive Grade...
 
Multimedia in WebKitGtk+, past/present/future
Multimedia in WebKitGtk+, past/present/futureMultimedia in WebKitGtk+, past/present/future
Multimedia in WebKitGtk+, past/present/future
 
WebKit Contributors Meeting 2022
WebKit Contributors Meeting 2022WebKit Contributors Meeting 2022
WebKit Contributors Meeting 2022
 
Javascript as a target language - GWT KickOff - Part 2/2
Javascript as a target language - GWT KickOff - Part 2/2Javascript as a target language - GWT KickOff - Part 2/2
Javascript as a target language - GWT KickOff - Part 2/2
 
Embedding Chromium into AGL demo platform with WAM
Embedding Chromium into AGL demo platform with WAMEmbedding Chromium into AGL demo platform with WAM
Embedding Chromium into AGL demo platform with WAM
 
JS digest. November 2017
JS digest. November 2017JS digest. November 2017
JS digest. November 2017
 
JS digest. October 2017
JS digest. October 2017 JS digest. October 2017
JS digest. October 2017
 
WebKit2 And You (GUADEC 2013)
WebKit2 And You (GUADEC 2013)WebKit2 And You (GUADEC 2013)
WebKit2 And You (GUADEC 2013)
 

More from Igalia

The journey towards stabilizing Chromium’s Wayland support
The journey towards stabilizing Chromium’s Wayland supportThe journey towards stabilizing Chromium’s Wayland support
The journey towards stabilizing Chromium’s Wayland support
Igalia
 
Sustainable Futures: Funding the Web Ecosystem
Sustainable Futures: Funding the Web EcosystemSustainable Futures: Funding the Web Ecosystem
Sustainable Futures: Funding the Web Ecosystem
Igalia
 
Status of the Layer-Based SVG Engine in WebKit
Status of the Layer-Based SVG Engine in WebKitStatus of the Layer-Based SVG Engine in WebKit
Status of the Layer-Based SVG Engine in WebKit
Igalia
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
Igalia
 
Building End-user Applications on Embedded Devices with WPE
Building End-user Applications on Embedded Devices with WPEBuilding End-user Applications on Embedded Devices with WPE
Building End-user Applications on Embedded Devices with WPE
Igalia
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Igalia
 
Automated Testing for Web-based Systems on Embedded Devices
Automated Testing for Web-based Systems on Embedded DevicesAutomated Testing for Web-based Systems on Embedded Devices
Automated Testing for Web-based Systems on Embedded Devices
Igalia
 
Embedding WPE WebKit - from Bring-up to Maintenance
Embedding WPE WebKit - from Bring-up to MaintenanceEmbedding WPE WebKit - from Bring-up to Maintenance
Embedding WPE WebKit - from Bring-up to Maintenance
Igalia
 
Optimizing Scheduler for Linux Gaming.pdf
Optimizing Scheduler for Linux Gaming.pdfOptimizing Scheduler for Linux Gaming.pdf
Optimizing Scheduler for Linux Gaming.pdf
Igalia
 
Running JS via WASM faster with JIT
Running JS via WASM      faster with JITRunning JS via WASM      faster with JIT
Running JS via WASM faster with JIT
Igalia
 
To crash or not to crash: if you do, at least recover fast!
To crash or not to crash: if you do, at least recover fast!To crash or not to crash: if you do, at least recover fast!
To crash or not to crash: if you do, at least recover fast!
Igalia
 
Implementing a Vulkan Video Encoder From Mesa to GStreamer
Implementing a Vulkan Video Encoder From Mesa to GStreamerImplementing a Vulkan Video Encoder From Mesa to GStreamer
Implementing a Vulkan Video Encoder From Mesa to GStreamer
Igalia
 
8 Years of Open Drivers, including the State of Vulkan in Mesa
8 Years of Open Drivers, including the State of Vulkan in Mesa8 Years of Open Drivers, including the State of Vulkan in Mesa
8 Years of Open Drivers, including the State of Vulkan in Mesa
Igalia
 
Introducción a Mesa. Caso específico dos dispositivos Raspberry Pi por Igalia
Introducción a Mesa. Caso específico dos dispositivos Raspberry Pi por IgaliaIntroducción a Mesa. Caso específico dos dispositivos Raspberry Pi por Igalia
Introducción a Mesa. Caso específico dos dispositivos Raspberry Pi por Igalia
Igalia
 
2023 in Chimera Linux
2023 in Chimera                    Linux2023 in Chimera                    Linux
2023 in Chimera Linux
Igalia
 
Building a Linux distro with LLVM
Building a Linux distro        with LLVMBuilding a Linux distro        with LLVM
Building a Linux distro with LLVM
Igalia
 
turnip: Update on Open Source Vulkan Driver for Adreno GPUs
turnip: Update on Open Source Vulkan Driver for Adreno GPUsturnip: Update on Open Source Vulkan Driver for Adreno GPUs
turnip: Update on Open Source Vulkan Driver for Adreno GPUs
Igalia
 
Graphics stack updates for Raspberry Pi devices
Graphics stack updates for Raspberry Pi devicesGraphics stack updates for Raspberry Pi devices
Graphics stack updates for Raspberry Pi devices
Igalia
 
Delegated Compositing - Utilizing Wayland Protocols for Chromium on ChromeOS
Delegated Compositing - Utilizing Wayland Protocols for Chromium on ChromeOSDelegated Compositing - Utilizing Wayland Protocols for Chromium on ChromeOS
Delegated Compositing - Utilizing Wayland Protocols for Chromium on ChromeOS
Igalia
 
MessageFormat: The future of i18n on the web
MessageFormat: The future of i18n on the webMessageFormat: The future of i18n on the web
MessageFormat: The future of i18n on the web
Igalia
 

More from Igalia (20)

The journey towards stabilizing Chromium’s Wayland support
The journey towards stabilizing Chromium’s Wayland supportThe journey towards stabilizing Chromium’s Wayland support
The journey towards stabilizing Chromium’s Wayland support
 
Sustainable Futures: Funding the Web Ecosystem
Sustainable Futures: Funding the Web EcosystemSustainable Futures: Funding the Web Ecosystem
Sustainable Futures: Funding the Web Ecosystem
 
Status of the Layer-Based SVG Engine in WebKit
Status of the Layer-Based SVG Engine in WebKitStatus of the Layer-Based SVG Engine in WebKit
Status of the Layer-Based SVG Engine in WebKit
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Building End-user Applications on Embedded Devices with WPE
Building End-user Applications on Embedded Devices with WPEBuilding End-user Applications on Embedded Devices with WPE
Building End-user Applications on Embedded Devices with WPE
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
Automated Testing for Web-based Systems on Embedded Devices
Automated Testing for Web-based Systems on Embedded DevicesAutomated Testing for Web-based Systems on Embedded Devices
Automated Testing for Web-based Systems on Embedded Devices
 
Embedding WPE WebKit - from Bring-up to Maintenance
Embedding WPE WebKit - from Bring-up to MaintenanceEmbedding WPE WebKit - from Bring-up to Maintenance
Embedding WPE WebKit - from Bring-up to Maintenance
 
Optimizing Scheduler for Linux Gaming.pdf
Optimizing Scheduler for Linux Gaming.pdfOptimizing Scheduler for Linux Gaming.pdf
Optimizing Scheduler for Linux Gaming.pdf
 
Running JS via WASM faster with JIT
Running JS via WASM      faster with JITRunning JS via WASM      faster with JIT
Running JS via WASM faster with JIT
 
To crash or not to crash: if you do, at least recover fast!
To crash or not to crash: if you do, at least recover fast!To crash or not to crash: if you do, at least recover fast!
To crash or not to crash: if you do, at least recover fast!
 
Implementing a Vulkan Video Encoder From Mesa to GStreamer
Implementing a Vulkan Video Encoder From Mesa to GStreamerImplementing a Vulkan Video Encoder From Mesa to GStreamer
Implementing a Vulkan Video Encoder From Mesa to GStreamer
 
8 Years of Open Drivers, including the State of Vulkan in Mesa
8 Years of Open Drivers, including the State of Vulkan in Mesa8 Years of Open Drivers, including the State of Vulkan in Mesa
8 Years of Open Drivers, including the State of Vulkan in Mesa
 
Introducción a Mesa. Caso específico dos dispositivos Raspberry Pi por Igalia
Introducción a Mesa. Caso específico dos dispositivos Raspberry Pi por IgaliaIntroducción a Mesa. Caso específico dos dispositivos Raspberry Pi por Igalia
Introducción a Mesa. Caso específico dos dispositivos Raspberry Pi por Igalia
 
2023 in Chimera Linux
2023 in Chimera                    Linux2023 in Chimera                    Linux
2023 in Chimera Linux
 
Building a Linux distro with LLVM
Building a Linux distro        with LLVMBuilding a Linux distro        with LLVM
Building a Linux distro with LLVM
 
turnip: Update on Open Source Vulkan Driver for Adreno GPUs
turnip: Update on Open Source Vulkan Driver for Adreno GPUsturnip: Update on Open Source Vulkan Driver for Adreno GPUs
turnip: Update on Open Source Vulkan Driver for Adreno GPUs
 
Graphics stack updates for Raspberry Pi devices
Graphics stack updates for Raspberry Pi devicesGraphics stack updates for Raspberry Pi devices
Graphics stack updates for Raspberry Pi devices
 
Delegated Compositing - Utilizing Wayland Protocols for Chromium on ChromeOS
Delegated Compositing - Utilizing Wayland Protocols for Chromium on ChromeOSDelegated Compositing - Utilizing Wayland Protocols for Chromium on ChromeOS
Delegated Compositing - Utilizing Wayland Protocols for Chromium on ChromeOS
 
MessageFormat: The future of i18n on the web
MessageFormat: The future of i18n on the webMessageFormat: The future of i18n on the web
MessageFormat: The future of i18n on the web
 

Recently uploaded

Nordic Marketo Engage User Group_June 13_ 2024.pptx
Nordic Marketo Engage User Group_June 13_ 2024.pptxNordic Marketo Engage User Group_June 13_ 2024.pptx
Nordic Marketo Engage User Group_June 13_ 2024.pptx
MichaelKnudsen27
 
Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)
Jakub Marek
 
PRODUCT LISTING OPTIMIZATION PRESENTATION.pptx
PRODUCT LISTING OPTIMIZATION PRESENTATION.pptxPRODUCT LISTING OPTIMIZATION PRESENTATION.pptx
PRODUCT LISTING OPTIMIZATION PRESENTATION.pptx
christinelarrosa
 
Session 1 - Intro to Robotic Process Automation.pdf
Session 1 - Intro to Robotic Process Automation.pdfSession 1 - Intro to Robotic Process Automation.pdf
Session 1 - Intro to Robotic Process Automation.pdf
UiPathCommunity
 
"Frontline Battles with DDoS: Best practices and Lessons Learned", Igor Ivaniuk
"Frontline Battles with DDoS: Best practices and Lessons Learned",  Igor Ivaniuk"Frontline Battles with DDoS: Best practices and Lessons Learned",  Igor Ivaniuk
"Frontline Battles with DDoS: Best practices and Lessons Learned", Igor Ivaniuk
Fwdays
 
"Choosing proper type of scaling", Olena Syrota
"Choosing proper type of scaling", Olena Syrota"Choosing proper type of scaling", Olena Syrota
"Choosing proper type of scaling", Olena Syrota
Fwdays
 
Mutation Testing for Task-Oriented Chatbots
Mutation Testing for Task-Oriented ChatbotsMutation Testing for Task-Oriented Chatbots
Mutation Testing for Task-Oriented Chatbots
Pablo Gómez Abajo
 
“Temporal Event Neural Networks: A More Efficient Alternative to the Transfor...
“Temporal Event Neural Networks: A More Efficient Alternative to the Transfor...“Temporal Event Neural Networks: A More Efficient Alternative to the Transfor...
“Temporal Event Neural Networks: A More Efficient Alternative to the Transfor...
Edge AI and Vision Alliance
 
"Scaling RAG Applications to serve millions of users", Kevin Goedecke
"Scaling RAG Applications to serve millions of users",  Kevin Goedecke"Scaling RAG Applications to serve millions of users",  Kevin Goedecke
"Scaling RAG Applications to serve millions of users", Kevin Goedecke
Fwdays
 
A Deep Dive into ScyllaDB's Architecture
A Deep Dive into ScyllaDB's ArchitectureA Deep Dive into ScyllaDB's Architecture
A Deep Dive into ScyllaDB's Architecture
ScyllaDB
 
GraphRAG for LifeSciences Hands-On with the Clinical Knowledge Graph
GraphRAG for LifeSciences Hands-On with the Clinical Knowledge GraphGraphRAG for LifeSciences Hands-On with the Clinical Knowledge Graph
GraphRAG for LifeSciences Hands-On with the Clinical Knowledge Graph
Neo4j
 
Essentials of Automations: Exploring Attributes & Automation Parameters
Essentials of Automations: Exploring Attributes & Automation ParametersEssentials of Automations: Exploring Attributes & Automation Parameters
Essentials of Automations: Exploring Attributes & Automation Parameters
Safe Software
 
High performance Serverless Java on AWS- GoTo Amsterdam 2024
High performance Serverless Java on AWS- GoTo Amsterdam 2024High performance Serverless Java on AWS- GoTo Amsterdam 2024
High performance Serverless Java on AWS- GoTo Amsterdam 2024
Vadym Kazulkin
 
AppSec PNW: Android and iOS Application Security with MobSF
AppSec PNW: Android and iOS Application Security with MobSFAppSec PNW: Android and iOS Application Security with MobSF
AppSec PNW: Android and iOS Application Security with MobSF
Ajin Abraham
 
Biomedical Knowledge Graphs for Data Scientists and Bioinformaticians
Biomedical Knowledge Graphs for Data Scientists and BioinformaticiansBiomedical Knowledge Graphs for Data Scientists and Bioinformaticians
Biomedical Knowledge Graphs for Data Scientists and Bioinformaticians
Neo4j
 
Principle of conventional tomography-Bibash Shahi ppt..pptx
Principle of conventional tomography-Bibash Shahi ppt..pptxPrinciple of conventional tomography-Bibash Shahi ppt..pptx
Principle of conventional tomography-Bibash Shahi ppt..pptx
BibashShahi
 
Day 2 - Intro to UiPath Studio Fundamentals
Day 2 - Intro to UiPath Studio FundamentalsDay 2 - Intro to UiPath Studio Fundamentals
Day 2 - Intro to UiPath Studio Fundamentals
UiPathCommunity
 
Freshworks Rethinks NoSQL for Rapid Scaling & Cost-Efficiency
Freshworks Rethinks NoSQL for Rapid Scaling & Cost-EfficiencyFreshworks Rethinks NoSQL for Rapid Scaling & Cost-Efficiency
Freshworks Rethinks NoSQL for Rapid Scaling & Cost-Efficiency
ScyllaDB
 
Harnessing the Power of NLP and Knowledge Graphs for Opioid Research
Harnessing the Power of NLP and Knowledge Graphs for Opioid ResearchHarnessing the Power of NLP and Knowledge Graphs for Opioid Research
Harnessing the Power of NLP and Knowledge Graphs for Opioid Research
Neo4j
 
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdfHow to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
Chart Kalyan
 

Recently uploaded (20)

Nordic Marketo Engage User Group_June 13_ 2024.pptx
Nordic Marketo Engage User Group_June 13_ 2024.pptxNordic Marketo Engage User Group_June 13_ 2024.pptx
Nordic Marketo Engage User Group_June 13_ 2024.pptx
 
Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)
 
PRODUCT LISTING OPTIMIZATION PRESENTATION.pptx
PRODUCT LISTING OPTIMIZATION PRESENTATION.pptxPRODUCT LISTING OPTIMIZATION PRESENTATION.pptx
PRODUCT LISTING OPTIMIZATION PRESENTATION.pptx
 
Session 1 - Intro to Robotic Process Automation.pdf
Session 1 - Intro to Robotic Process Automation.pdfSession 1 - Intro to Robotic Process Automation.pdf
Session 1 - Intro to Robotic Process Automation.pdf
 
"Frontline Battles with DDoS: Best practices and Lessons Learned", Igor Ivaniuk
"Frontline Battles with DDoS: Best practices and Lessons Learned",  Igor Ivaniuk"Frontline Battles with DDoS: Best practices and Lessons Learned",  Igor Ivaniuk
"Frontline Battles with DDoS: Best practices and Lessons Learned", Igor Ivaniuk
 
"Choosing proper type of scaling", Olena Syrota
"Choosing proper type of scaling", Olena Syrota"Choosing proper type of scaling", Olena Syrota
"Choosing proper type of scaling", Olena Syrota
 
Mutation Testing for Task-Oriented Chatbots
Mutation Testing for Task-Oriented ChatbotsMutation Testing for Task-Oriented Chatbots
Mutation Testing for Task-Oriented Chatbots
 
“Temporal Event Neural Networks: A More Efficient Alternative to the Transfor...
“Temporal Event Neural Networks: A More Efficient Alternative to the Transfor...“Temporal Event Neural Networks: A More Efficient Alternative to the Transfor...
“Temporal Event Neural Networks: A More Efficient Alternative to the Transfor...
 
"Scaling RAG Applications to serve millions of users", Kevin Goedecke
"Scaling RAG Applications to serve millions of users",  Kevin Goedecke"Scaling RAG Applications to serve millions of users",  Kevin Goedecke
"Scaling RAG Applications to serve millions of users", Kevin Goedecke
 
A Deep Dive into ScyllaDB's Architecture
A Deep Dive into ScyllaDB's ArchitectureA Deep Dive into ScyllaDB's Architecture
A Deep Dive into ScyllaDB's Architecture
 
GraphRAG for LifeSciences Hands-On with the Clinical Knowledge Graph
GraphRAG for LifeSciences Hands-On with the Clinical Knowledge GraphGraphRAG for LifeSciences Hands-On with the Clinical Knowledge Graph
GraphRAG for LifeSciences Hands-On with the Clinical Knowledge Graph
 
Essentials of Automations: Exploring Attributes & Automation Parameters
Essentials of Automations: Exploring Attributes & Automation ParametersEssentials of Automations: Exploring Attributes & Automation Parameters
Essentials of Automations: Exploring Attributes & Automation Parameters
 
High performance Serverless Java on AWS- GoTo Amsterdam 2024
High performance Serverless Java on AWS- GoTo Amsterdam 2024High performance Serverless Java on AWS- GoTo Amsterdam 2024
High performance Serverless Java on AWS- GoTo Amsterdam 2024
 
AppSec PNW: Android and iOS Application Security with MobSF
AppSec PNW: Android and iOS Application Security with MobSFAppSec PNW: Android and iOS Application Security with MobSF
AppSec PNW: Android and iOS Application Security with MobSF
 
Biomedical Knowledge Graphs for Data Scientists and Bioinformaticians
Biomedical Knowledge Graphs for Data Scientists and BioinformaticiansBiomedical Knowledge Graphs for Data Scientists and Bioinformaticians
Biomedical Knowledge Graphs for Data Scientists and Bioinformaticians
 
Principle of conventional tomography-Bibash Shahi ppt..pptx
Principle of conventional tomography-Bibash Shahi ppt..pptxPrinciple of conventional tomography-Bibash Shahi ppt..pptx
Principle of conventional tomography-Bibash Shahi ppt..pptx
 
Day 2 - Intro to UiPath Studio Fundamentals
Day 2 - Intro to UiPath Studio FundamentalsDay 2 - Intro to UiPath Studio Fundamentals
Day 2 - Intro to UiPath Studio Fundamentals
 
Freshworks Rethinks NoSQL for Rapid Scaling & Cost-Efficiency
Freshworks Rethinks NoSQL for Rapid Scaling & Cost-EfficiencyFreshworks Rethinks NoSQL for Rapid Scaling & Cost-Efficiency
Freshworks Rethinks NoSQL for Rapid Scaling & Cost-Efficiency
 
Harnessing the Power of NLP and Knowledge Graphs for Opioid Research
Harnessing the Power of NLP and Knowledge Graphs for Opioid ResearchHarnessing the Power of NLP and Knowledge Graphs for Opioid Research
Harnessing the Power of NLP and Knowledge Graphs for Opioid Research
 
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdfHow to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
 

WPEWebKit, the WebKit port for embedded platforms (Linaro Connect San Diego 2019)

  • 1. Philippe Normand philn@igalia.com Linaro Connect San Diego, California 23rd-27th September 2019 WPEWebKit The WebKit port for Embedded
  • 2. Who am I? ● Fiddling with WebKit and GStreamer since 2009 ● WebKit committer and reviewer ● GStreamer committer ● Partner at Igalia ● Worker-owned coop, currently around 80 happy Igalians around the world ● Provides consulting services for various Free Software projects
  • 3. Talk Outline ● What is WPE ● Basic infrastructure for Media playback ● Adaptive streaming in HTML5: Media Source Extensions ● Media-capabilities ● Enabling WPE in your apps ● Hands-on: WPE integration with Yocto on I.MX6 & I.MX8M
  • 4. WPE, Web Platform for Embedded
  • 5. WPE, the basics ● Web-engine based on WebKit, tailored for a wide range embedded devices ● 6 months release cycle synchronized with WebKitGTK, including security updates ● No dependency on any UI toolkit library ● Pluggable view backends in charge of final rendering ● Wayland ● Android experiment ● Device-specific graphics drivers
  • 6. WPE backend for FDO ● Relies on wayland-egl ● Cross-process buffer sharing ● API for: ● EGLImages ● Or wl_resource objects ● Or Linux dma-buf information (already used internally) ● Combined with Mesa ● Works on desktop (packaged in Fedora 30, soon Debian) & embedded (Yocto & Buildroot)
  • 7. Platform support for media playback in WPE
  • 8. GStreamer ● A cross-platform framework for creating Multimedia applications ● Graph-based processing, example of a basic ogg/vorbis player:
  • 9. <audio> & <video> in WPE ● Playbin-based MediaPlayerPrivate implementation ● GL Video rendering with a custom appsink ● Custom GstAllocator using WebKit’s FastMalloc ● White list of supported containers and codecs ● Codec installer support effectively useless
  • 10. Adaptive streaming: MSE By Alicia Boya & Enrique Ocaña
  • 11. The MSE backend, TL;DR ● Chunks queued from JavaScript world to a SourceBuffer ● One GStreamer WebKit Append pipeline per SourceBuffer ● Demuxing and parsing of samples ● Samples stored at WebCore’s MSE layer ● Playback pipeline using a dedicated MediaPlayerPrivate implementation ● Playbin-based ● Custom source element (one source pad per SourceBuffer)
  • 12. MSE-related improvements in GStreamer ● Quite a few improvements in qtdemux for: ● Samples demuxing in push-mode ● Edit list support for push-mode ● Segment event handling ● Duration-related bug fixes ● => Around 15 patches so far! ● Matroskademux improvements ● Emit no-more-pads earlier (after parsing Tracks) (used to be sent while processing the first Cluster) ● Multi-Tracks parsing ● Fixes for WebM byte-stream format handling
  • 13. Current status & plans ● MSE enabled in GNOME-Web! ● MSE backend widely tested on embedded platforms (RPi, i-MX6, …) ● Infrastructure available for combination with EME ● Youtube (“desktop” and /tv) relying on MSE ● VP9 & opus ● H.264 & AAC also supported ● Playbin3 / Stream-collections support: DONE in trunk ● Multi-track SourceBuffer support: planned
  • 15. The (draft) spec ● https://wicg.github.io/media-capabilities/ ● Goal: provide hints to WebApps regarding the most optimal media encoders & decoders ● Input: description of the media format (contentType, width, height, framerate, …) ● Output: 3 booleans: – supported – smooth – powerEfficient
  • 16. GStreamer “probing” ● New “Hardware” element metadata Classifier (=> 1.16 ) ● Elements may implement probing for their NULL→READY state transition ● Possibly refine Caps templates to reflect what the hardware supports ● V4L2 decoders (AVC1 profile/level) (>= 1.18) ● More decoders ● Basic WebKit GStreamer MediaCapabilities backend working for decoders probing
  • 17. Enabling WPE in your apps Three examples
  • 18. Cog, the WPE launcher ● Native application ● Can work in fullscreen or window mode (no window manager decorations yet) ● Provides an API wrapping some of its features ● D-Bus client API for remoting ● Two rendering backends: ● One based on WPEBackend-FDO (mature) ● One based on libdrm, gbm, libinput (experimental)
  • 19. Qt5 QML ● WPEQt QML plugin upstream in WebKit since version 2.24 ● API mimicks QwebView => easy migration path! ● Depends on WPEBackend-FDO ● Works on Linux (Wayland and EGLFS) ● More details: https://base-art.net/Articles/introducing-wpeqt-a-wpe-api-for-qt5/
  • 20. GstWPE: HTML overlay in GStreamer pipelines ● GStreamer source element acting as a web-browser ● Outputs GStreamer buffers containing EGLImages wrapped in GstGLMemory’s ● Allows for zero-copy composition with other GL backed video streams ● More details: https://bit.ly/2kmee2p
  • 21. WPE/GStreamer on i.MX6 QuadPlus & i.MX8M with Yocto
  • 23. Open-source etnaviv driver ● Requires recent kernel (4.19), Mesa (18.2.2), Wayland (1.16), GStreamer (1.14.4) ● Usable WPEBackends, only working in Weston: ● WPEBackend-RDK/wayland ● WPEBackend-fdo (recommended) ● Upstream v4l2 plugin from gst-plugins-good for hardware decoding (and encoding) support
  • 24. i.MX6 video decoding ● CODA960 kernel driver ● Mature integration with gst-plugins-good v4l2 plugin ● On QuadPlus: H.264 1080P@30 handled but sometimes drops frames: 720P recommended: $ export WEBKIT_GST_MAX_AVC1_RESOLUTION=720P
  • 25. i.MX8M video decoding ● Experimental Hantro G1 kernel driver and integration with gst-plugins-good ● Development by Collabora and Pengutronix ● Scheduled for the kernel 5.4 ● Status: ● 1080P@30 H.264 smooth playback ● Should allow for up to 4K@30 with VP8 and H.264 and 4K@60 with VP9 and HEVC ● HEVC and VP9 support: Work in progress
  • 26. YUV video rendering ● Current video sink in WebKit only handles RGBA ● GStreamer video decoders often output YUV: ● Semi-planar NV12 or planar I420 (gst-vaapi, vpxdec) ● Interleaved YUYV (gst-v4l2) ● One extra colorspace conversion (YUV→ RGBA) required due to WebKit ● On-going work in WebKit to directly handle interleaved YUV formats, lowering the cost of the colorspace conversions in the 3D GPU.