SlideShare a Scribd company logo
1 of 34
Download to read offline
Upstream Multimedia on Amlogic
SoCs : From Fiction To Reality
Embedded recipes - 2018
Maxime Jourdan
Neil’s talk last year
1. Amlogic Multimedia status on mainline Linux
2. Implementing a V4L2 Memory-to-Memory video decoder for
Amlogic SoCs
3. Current userspace development for decoder-to-display
pipelines
4. Demo!
Topics
Amlogic Multimedia status on mainline Linux (1/3)
● Display : DRM/KMS Drivers
○ Support
■ HDMI / Composite output on S905, S905D/X, S912
■ Primary Plane RGB with Alpha
○ WiP
■ YUV overlay plane support
■ 4K P30 (HDMI 1.4)
○ To be done
■ HDMI 2.0 support
■ Support for Composite/HDMI on older S802/S812/S805
■ Support for upcoming SoCs A113D/S905D/X2, S922, … (+ DSI output)
Amlogic Multimedia status on mainline Linux (2/3)
● CEC
○ Support
■ CEC support on S805X (non tested), S905/S905X/S905D/S912 and later
○ To be done
■ Suspend support : the driver should communicate the current Logical & Physical
Address before the suspend, then the Suspend firmware code can continue
communicating with the TV and wake up the device.
Amlogic Multimedia status on mainline Linux (3/3)
● Audio : Alsa SoC
○ Support
■ AXG SoC family (A113D/X) : (v4.19 - v4.20)
● TDM input and output (max 128 channels - 192KHz) * 3
● SPDIF output
● PDM input
● Multicodec card driver
○ WiP
■ AXG SPDIF input
■ Gx SoC family: i2s output and spdif output
■ Internal DAC Codec (GXL and G12)
○ To be done
■ G12 (S905D/X2, S922) SoC family support (AXG based)
Implementing a V4L2 Memory-to-Memory video decoder for
Amlogic SoCs
V4L2 M2M Video Decoder
● Video4Linux2: kernel framework for media drivers (cameras,
displays, video accelerators ..)
● Memory2Memory: both inputs and outputs are in RAM
● Device node: /dev/videoX
● Increasingly supported for many SoC vendors: Samsung,
Qualcomm, MediaTek..
○ Not upstream yet: Allwinner, Broadcom, Rockchip, Amlogic
Stateful Video Decoders
● Possess a hardware bitstream parser
● Autonomous
● Almost always firmware-assisted
● Examples: Amlogic, Qualcomm, Samsung, MediaTek
Stateless Video Decoders
● Need assistance from userspace for bitstream parsing and
updating the local state
● Rely on the V4L2 Request API
● Examples: Allwinner, Rockchip
Amlogic video decoder
MJPEG, MPEG2,
MPEG4
H.264 HEVC
HEVC
10-bit
VP9
S805
1080p60
1080p60 1080p30 N/A N/A
S905
4K30 4K60 4K60
N/A
S905X
S912
4K60
AML-S905X-CC “Le Potato”Odroid-C2 (S905) Khadas VIM2 (S912)
Amlogic video decoder
● Custom driver available in vendor kernel
drivers/amlogic/amports/
○ ~20,000 lines of code for the core
○ ~3,000 lines of code for H.264
○ ~10,000 lines of code for HEVC
● Non standard API (~20 custom ioctls)
● In-kernel media player logic
Where do you start ?
● Power / Clocks / IRQs
● Where are the firmware files ?
● Where do you write the bitstream ?
● How do you get the frames back ?
● How much is in vendor kernel / userspace blob ?
Clocks - vendor kernel
amports/arch/clkgx.c
#define VDEC1_CLOCK_ON() 
do { WRITE_HHI_REG_BITS(HHI_VDEC_CLK_CNTL, 1, 8, 1); 
WRITE_HHI_REG_BITS(HHI_VDEC3_CLK_CNTL, 0, 15, 1); 
WRITE_HHI_REG_BITS(HHI_VDEC3_CLK_CNTL, 0, 8, 1); 
WRITE_VREG_BITS(DOS_GCLK_EN0, 0x3ff, 0, 10); 
} while (0)
#define VDEC1_648M() 
WRITE_HHI_REG_BITS(HHI_VDEC_CLK_CNTL, (6 << 9) | (0), 0, 16)
Firmwares - vendor kernel
amports/arch/ucode/h264/h264c_linux.h
static const u32 MicroCode[] __initconst = {
0x06810001, 0x06800000, 0x0d000001, 0x07400040, 0x064c0800,
0x09800300, 0x00000000, 0x060c0800, 0x0649d019, 0x0c006580,
0x0649c134, 0x06880000, 0x060c2900, 0x080c0002, 0x06bfda80,
0x07c02d40, 0x06030400, 0x00400000, 0x0c007d80, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0c7ffe80,
...
Writing the bitstream
VIFIFO
ESPARSER
Input Buffer
16 MiB
Input Buffer
But no IRQ triggered by the parser..
Writing the bitstream
VIFIFO
ESPARSER
Input Buffer
16 MiB
Input Buffer
4KiB
Padding
Start
Code
00 00 01 ff
Retrieving the decoded frames
Canvas
ID: 0-255
Width x Height
Buffer Physical
Address
Block Mode
Endianness
Decoder
Frame 0
Frame 1
Y plane: Canvas 0
U/V plane: Canvas 1
Y plane: Canvas 2
U/V plane: Canvas 3
VIFIFOI P
ESPARSERBPBB
Bitstream packets
Decoder
VDEC_1
Canvas
Frame
N
Decoded picture buffer
Frame
1
Frame
0
FW
CPU
B
Testing
● FFmpeg
○ ffmpeg -c:v h264_v4l2m2m -i input.mp4 -f
rawvideo out.nv12
● GStreamer
○ gst-launch-1.0 filesrc location=input.mp4 !
parsebin ! v4l2video0dec ! fakesink
● Chromium (Igalia)
○ GN_ARGS += “use_v4l2_codec use_linux_v4l2_only”
○ ln -sf video0 /dev/video-dec0
64x32 tiled mode
Block Mode Linear.. but each 8 pixels are reversed ?
Correct byte swapping: Proper NV12!
Linux DRM - Plane
For a full Description of the DRM Subsystem :
https://events.static.linuxfound.org/sites/events/files/slides/brezillon-drm-kms.pdf
Linux DRM - Plane Blending
The DRM Plane abstraction permits :
● Using Hardware assisted Color Space Conversion
○ RGB to YUV
○ NV12 to RGB
● Using Hardware assisted Alpha Blending between multiple planes
○ OSD Plane blended with underlying Video Plane
● Digital TV Hardware usually have an “OSD” Primary Plane and a
“Video” Overlay Plane behind the OSD plane
● Generic Hardware can configure the Order of the planes : z-order
Linux DRM - Plane Blending
3840x2160 NV12 Plane (from Decoder)
1920x1080 ARGB8888 Plane
Upscaling
Color Space
Convert
Alpha
Blending
3840x2160 YUV422 Frame for HDMI
Sharing buffers with dmabuf
● Kernel framework to share physical buffers between devices
● Uses file descriptors
● Consumer devices import the buffers
● Producer devices export the buffers
● V4L2 exposes VIDIOC_EXPBUF to export buffers.
Rendering frames in zero-copy
● DRM Prime with dmabuf
○ Requires plane that supports NV12. Preferably with a scaler.
○ No dependency on GPU for the video path
● EGL dmabuf import
○ Requires a OpenGL stack
○ A single RGB plane is enough
Rendering - DRM Prime
Media
Player
V4L2 M2M
decoder
VIDIOC_EXPBUF
RGB DRM plane
NV12 DRM plane
GPU
drmModeAddFB2
Subtitle
Rendering - EGL dmabuf import
Media
Player
V4L2 M2M
decoder
VIDIOC_EXPBUF
GPU
Subtitle
eglCreateImageKHR
EGL_LINUX_DMA_BUF_EXT
RGB DRM plane
Media players
Kodi mpv GStreamer Chromium
V4L2 +
DRM Prime
kmssink
V4L2 +
EGL import
glimagesink
uses
FFmpeg
Resources
● LibreELEC - “Just enough OS for KODI”
○ https://github.com/chewitt/LibreELEC.tv/tree/amlogic
○ PROJECT=Amlogic_GX DEVICE=LePotato ARCH=arm make image
● OpenEmbedded meta-meson layer
○ https://github.com/superna9999/meta-meson
● Communication
○ http://linux-meson.com/
○ #linux-amlogic on Freenode
○ linux-amlogic@lists.infradead.org
Thanks to..!
● #linux-amlogic community
● #v4l community
● LibreElec community
○ Lukas Rusak for DRM Prime support in Kodi/FFmpeg
○ Christian Hewitt for integration and testing
● Nicolas Dufresne (Collabora) for help with gstreamer

More Related Content

What's hot

BKK16-403 Android HAL Consolidation Status
BKK16-403 Android HAL Consolidation StatusBKK16-403 Android HAL Consolidation Status
BKK16-403 Android HAL Consolidation StatusLinaro
 
Embedded Recipes 2019 - Making embedded graphics less special
Embedded Recipes 2019 - Making embedded graphics less specialEmbedded Recipes 2019 - Making embedded graphics less special
Embedded Recipes 2019 - Making embedded graphics less specialAnne Nicolas
 
Real time image processing in fpga
Real time image processing in fpgaReal time image processing in fpga
Real time image processing in fpgaSneha Nidhi
 
BKK16-402 Cross distro BoF
BKK16-402 Cross distro BoFBKK16-402 Cross distro BoF
BKK16-402 Cross distro BoFLinaro
 
Bitmovin AV1/VVC Presentation_Streaming Media East by Christian Feldmann
Bitmovin AV1/VVC Presentation_Streaming Media East by Christian FeldmannBitmovin AV1/VVC Presentation_Streaming Media East by Christian Feldmann
Bitmovin AV1/VVC Presentation_Streaming Media East by Christian FeldmannBitmovin Inc
 
BKK16-315 Graphics Stack Update
BKK16-315 Graphics Stack UpdateBKK16-315 Graphics Stack Update
BKK16-315 Graphics Stack UpdateLinaro
 
Bitmovin Low Latency CMAF Presentation_Streaming Media East by Paul MacDougall
Bitmovin Low Latency CMAF Presentation_Streaming Media East by Paul MacDougallBitmovin Low Latency CMAF Presentation_Streaming Media East by Paul MacDougall
Bitmovin Low Latency CMAF Presentation_Streaming Media East by Paul MacDougallBitmovin Inc
 
H 264 Pc Based Dvr
H 264 Pc Based DvrH 264 Pc Based Dvr
H 264 Pc Based Dvrandy
 
Full hd d1 at 0808 v8-h24d - Avtron hybrid video recorder
Full hd d1 at 0808 v8-h24d - Avtron hybrid video recorderFull hd d1 at 0808 v8-h24d - Avtron hybrid video recorder
Full hd d1 at 0808 v8-h24d - Avtron hybrid video recorderAvtron
 
H 264 Hybrid Pc Based Dvr
H 264 Hybrid Pc Based DvrH 264 Hybrid Pc Based Dvr
H 264 Hybrid Pc Based Dvrandy
 
Full hd d1 at 1616 v8-h24d - Avtron hybrid video recorder
Full hd d1 at 1616 v8-h24d - Avtron hybrid video recorderFull hd d1 at 1616 v8-h24d - Avtron hybrid video recorder
Full hd d1 at 1616 v8-h24d - Avtron hybrid video recorderAvtron
 
NAB 2019 Latest Technical and Business Progress with AV1
NAB 2019 Latest Technical and Business Progress with AV1NAB 2019 Latest Technical and Business Progress with AV1
NAB 2019 Latest Technical and Business Progress with AV1Karan "Kay" Singh
 
H.264 PC based DVR
H.264 PC based DVRH.264 PC based DVR
H.264 PC based DVRlinovision
 
BKK16-400A LuvOS and ACPI Compliance Testing
BKK16-400A LuvOS and ACPI Compliance TestingBKK16-400A LuvOS and ACPI Compliance Testing
BKK16-400A LuvOS and ACPI Compliance TestingLinaro
 
Kernel Recipes 2014 - Testing Video4Linux Applications and Drivers
Kernel Recipes 2014 - Testing Video4Linux Applications and DriversKernel Recipes 2014 - Testing Video4Linux Applications and Drivers
Kernel Recipes 2014 - Testing Video4Linux Applications and DriversAnne Nicolas
 

What's hot (18)

BKK16-403 Android HAL Consolidation Status
BKK16-403 Android HAL Consolidation StatusBKK16-403 Android HAL Consolidation Status
BKK16-403 Android HAL Consolidation Status
 
Embedded Recipes 2019 - Making embedded graphics less special
Embedded Recipes 2019 - Making embedded graphics less specialEmbedded Recipes 2019 - Making embedded graphics less special
Embedded Recipes 2019 - Making embedded graphics less special
 
Real time image processing in fpga
Real time image processing in fpgaReal time image processing in fpga
Real time image processing in fpga
 
BKK16-402 Cross distro BoF
BKK16-402 Cross distro BoFBKK16-402 Cross distro BoF
BKK16-402 Cross distro BoF
 
Bitmovin AV1/VVC Presentation_Streaming Media East by Christian Feldmann
Bitmovin AV1/VVC Presentation_Streaming Media East by Christian FeldmannBitmovin AV1/VVC Presentation_Streaming Media East by Christian Feldmann
Bitmovin AV1/VVC Presentation_Streaming Media East by Christian Feldmann
 
Andes RISC-V processor solutions
Andes RISC-V processor solutionsAndes RISC-V processor solutions
Andes RISC-V processor solutions
 
Dtu 245 leaflet
Dtu 245 leafletDtu 245 leaflet
Dtu 245 leaflet
 
BKK16-315 Graphics Stack Update
BKK16-315 Graphics Stack UpdateBKK16-315 Graphics Stack Update
BKK16-315 Graphics Stack Update
 
At 0408 v-h9d-hybrid-video-recorder
At 0408 v-h9d-hybrid-video-recorderAt 0408 v-h9d-hybrid-video-recorder
At 0408 v-h9d-hybrid-video-recorder
 
Bitmovin Low Latency CMAF Presentation_Streaming Media East by Paul MacDougall
Bitmovin Low Latency CMAF Presentation_Streaming Media East by Paul MacDougallBitmovin Low Latency CMAF Presentation_Streaming Media East by Paul MacDougall
Bitmovin Low Latency CMAF Presentation_Streaming Media East by Paul MacDougall
 
H 264 Pc Based Dvr
H 264 Pc Based DvrH 264 Pc Based Dvr
H 264 Pc Based Dvr
 
Full hd d1 at 0808 v8-h24d - Avtron hybrid video recorder
Full hd d1 at 0808 v8-h24d - Avtron hybrid video recorderFull hd d1 at 0808 v8-h24d - Avtron hybrid video recorder
Full hd d1 at 0808 v8-h24d - Avtron hybrid video recorder
 
H 264 Hybrid Pc Based Dvr
H 264 Hybrid Pc Based DvrH 264 Hybrid Pc Based Dvr
H 264 Hybrid Pc Based Dvr
 
Full hd d1 at 1616 v8-h24d - Avtron hybrid video recorder
Full hd d1 at 1616 v8-h24d - Avtron hybrid video recorderFull hd d1 at 1616 v8-h24d - Avtron hybrid video recorder
Full hd d1 at 1616 v8-h24d - Avtron hybrid video recorder
 
NAB 2019 Latest Technical and Business Progress with AV1
NAB 2019 Latest Technical and Business Progress with AV1NAB 2019 Latest Technical and Business Progress with AV1
NAB 2019 Latest Technical and Business Progress with AV1
 
H.264 PC based DVR
H.264 PC based DVRH.264 PC based DVR
H.264 PC based DVR
 
BKK16-400A LuvOS and ACPI Compliance Testing
BKK16-400A LuvOS and ACPI Compliance TestingBKK16-400A LuvOS and ACPI Compliance Testing
BKK16-400A LuvOS and ACPI Compliance Testing
 
Kernel Recipes 2014 - Testing Video4Linux Applications and Drivers
Kernel Recipes 2014 - Testing Video4Linux Applications and DriversKernel Recipes 2014 - Testing Video4Linux Applications and Drivers
Kernel Recipes 2014 - Testing Video4Linux Applications and Drivers
 

Similar to Embedded Recipes 2018 - Upstream multimedia on amlogic so cs from fiction to reality - Maxime Jourdan

Moving NEON to 64 bits
Moving NEON to 64 bitsMoving NEON to 64 bits
Moving NEON to 64 bitsChiou-Nan Chen
 
BKK16-209 Chromium with V4L2 playback - is it ready today?
BKK16-209 Chromium with V4L2 playback - is it ready today?BKK16-209 Chromium with V4L2 playback - is it ready today?
BKK16-209 Chromium with V4L2 playback - is it ready today?Linaro
 
Ultra HD Video Scaling: Low-Power HW FF vs. CNN-based Super-Resolution
Ultra HD Video Scaling: Low-Power HW FF vs. CNN-based Super-ResolutionUltra HD Video Scaling: Low-Power HW FF vs. CNN-based Super-Resolution
Ultra HD Video Scaling: Low-Power HW FF vs. CNN-based Super-ResolutionIntel® Software
 
Elc Europe 2020 : u-boot- porting and maintaining a bootloader for a multimed...
Elc Europe 2020 : u-boot- porting and maintaining a bootloader for a multimed...Elc Europe 2020 : u-boot- porting and maintaining a bootloader for a multimed...
Elc Europe 2020 : u-boot- porting and maintaining a bootloader for a multimed...Neil Armstrong
 
Escolhendo o Processador DaVinciTM para sua Aplicação de ...
Escolhendo o Processador DaVinciTM para sua Aplicação de ...Escolhendo o Processador DaVinciTM para sua Aplicação de ...
Escolhendo o Processador DaVinciTM para sua Aplicação de ...Videoguy
 
Escolhendo o Processador DaVinciTM para sua Aplicação de ...
Escolhendo o Processador DaVinciTM para sua Aplicação de ...Escolhendo o Processador DaVinciTM para sua Aplicação de ...
Escolhendo o Processador DaVinciTM para sua Aplicação de ...Videoguy
 
Linxu conj2016 96boards
Linxu conj2016 96boardsLinxu conj2016 96boards
Linxu conj2016 96boardsLF Events
 
S5pc100 Brochure 200902
S5pc100 Brochure 200902S5pc100 Brochure 200902
S5pc100 Brochure 200902guestc82ba2
 
Kernel Recipes 2014 - The Linux graphics stack and Nouveau driver
Kernel Recipes 2014 - The Linux graphics stack and Nouveau driverKernel Recipes 2014 - The Linux graphics stack and Nouveau driver
Kernel Recipes 2014 - The Linux graphics stack and Nouveau driverAnne Nicolas
 
LAS16 100 K1 - Keynote George Grey
LAS16 100 K1 - Keynote George GreyLAS16 100 K1 - Keynote George Grey
LAS16 100 K1 - Keynote George Grey96Boards
 
LAS16-100K1: Welcome Keynote
LAS16-100K1: Welcome KeynoteLAS16-100K1: Welcome Keynote
LAS16-100K1: Welcome KeynoteLinaro
 
Geniatech APC380 Specification
Geniatech  APC380 SpecificationGeniatech  APC380 Specification
Geniatech APC380 SpecificationGeniatech
 
BKK16-303 96Boards - TV Platform
BKK16-303 96Boards - TV PlatformBKK16-303 96Boards - TV Platform
BKK16-303 96Boards - TV PlatformLinaro
 
Geniatech APC380p specification
Geniatech APC380p specificationGeniatech APC380p specification
Geniatech APC380p specificationGeniatech
 
Morello Technology Demonstrator Hardware Overview - Mark Inskip, Arm
Morello Technology Demonstrator Hardware Overview - Mark Inskip, ArmMorello Technology Demonstrator Hardware Overview - Mark Inskip, Arm
Morello Technology Demonstrator Hardware Overview - Mark Inskip, ArmKTN
 
4. innowatch system architecture v3 150227
4. innowatch system architecture v3 1502274. innowatch system architecture v3 150227
4. innowatch system architecture v3 150227N3N
 
Jade SoC Graphics Controllers
Jade SoC Graphics ControllersJade SoC Graphics Controllers
Jade SoC Graphics ControllersPremier Farnell
 
Linaro connect : Introduction to Xen on ARM
Linaro connect : Introduction to Xen on ARMLinaro connect : Introduction to Xen on ARM
Linaro connect : Introduction to Xen on ARMThe Linux Foundation
 
Industrial Technology Multimedia Video Theory Prelim Course
Industrial Technology Multimedia Video Theory Prelim CourseIndustrial Technology Multimedia Video Theory Prelim Course
Industrial Technology Multimedia Video Theory Prelim Coursejliang2145
 
activa200_soc
activa200_socactiva200_soc
activa200_socrnir
 

Similar to Embedded Recipes 2018 - Upstream multimedia on amlogic so cs from fiction to reality - Maxime Jourdan (20)

Moving NEON to 64 bits
Moving NEON to 64 bitsMoving NEON to 64 bits
Moving NEON to 64 bits
 
BKK16-209 Chromium with V4L2 playback - is it ready today?
BKK16-209 Chromium with V4L2 playback - is it ready today?BKK16-209 Chromium with V4L2 playback - is it ready today?
BKK16-209 Chromium with V4L2 playback - is it ready today?
 
Ultra HD Video Scaling: Low-Power HW FF vs. CNN-based Super-Resolution
Ultra HD Video Scaling: Low-Power HW FF vs. CNN-based Super-ResolutionUltra HD Video Scaling: Low-Power HW FF vs. CNN-based Super-Resolution
Ultra HD Video Scaling: Low-Power HW FF vs. CNN-based Super-Resolution
 
Elc Europe 2020 : u-boot- porting and maintaining a bootloader for a multimed...
Elc Europe 2020 : u-boot- porting and maintaining a bootloader for a multimed...Elc Europe 2020 : u-boot- porting and maintaining a bootloader for a multimed...
Elc Europe 2020 : u-boot- porting and maintaining a bootloader for a multimed...
 
Escolhendo o Processador DaVinciTM para sua Aplicação de ...
Escolhendo o Processador DaVinciTM para sua Aplicação de ...Escolhendo o Processador DaVinciTM para sua Aplicação de ...
Escolhendo o Processador DaVinciTM para sua Aplicação de ...
 
Escolhendo o Processador DaVinciTM para sua Aplicação de ...
Escolhendo o Processador DaVinciTM para sua Aplicação de ...Escolhendo o Processador DaVinciTM para sua Aplicação de ...
Escolhendo o Processador DaVinciTM para sua Aplicação de ...
 
Linxu conj2016 96boards
Linxu conj2016 96boardsLinxu conj2016 96boards
Linxu conj2016 96boards
 
S5pc100 Brochure 200902
S5pc100 Brochure 200902S5pc100 Brochure 200902
S5pc100 Brochure 200902
 
Kernel Recipes 2014 - The Linux graphics stack and Nouveau driver
Kernel Recipes 2014 - The Linux graphics stack and Nouveau driverKernel Recipes 2014 - The Linux graphics stack and Nouveau driver
Kernel Recipes 2014 - The Linux graphics stack and Nouveau driver
 
LAS16 100 K1 - Keynote George Grey
LAS16 100 K1 - Keynote George GreyLAS16 100 K1 - Keynote George Grey
LAS16 100 K1 - Keynote George Grey
 
LAS16-100K1: Welcome Keynote
LAS16-100K1: Welcome KeynoteLAS16-100K1: Welcome Keynote
LAS16-100K1: Welcome Keynote
 
Geniatech APC380 Specification
Geniatech  APC380 SpecificationGeniatech  APC380 Specification
Geniatech APC380 Specification
 
BKK16-303 96Boards - TV Platform
BKK16-303 96Boards - TV PlatformBKK16-303 96Boards - TV Platform
BKK16-303 96Boards - TV Platform
 
Geniatech APC380p specification
Geniatech APC380p specificationGeniatech APC380p specification
Geniatech APC380p specification
 
Morello Technology Demonstrator Hardware Overview - Mark Inskip, Arm
Morello Technology Demonstrator Hardware Overview - Mark Inskip, ArmMorello Technology Demonstrator Hardware Overview - Mark Inskip, Arm
Morello Technology Demonstrator Hardware Overview - Mark Inskip, Arm
 
4. innowatch system architecture v3 150227
4. innowatch system architecture v3 1502274. innowatch system architecture v3 150227
4. innowatch system architecture v3 150227
 
Jade SoC Graphics Controllers
Jade SoC Graphics ControllersJade SoC Graphics Controllers
Jade SoC Graphics Controllers
 
Linaro connect : Introduction to Xen on ARM
Linaro connect : Introduction to Xen on ARMLinaro connect : Introduction to Xen on ARM
Linaro connect : Introduction to Xen on ARM
 
Industrial Technology Multimedia Video Theory Prelim Course
Industrial Technology Multimedia Video Theory Prelim CourseIndustrial Technology Multimedia Video Theory Prelim Course
Industrial Technology Multimedia Video Theory Prelim Course
 
activa200_soc
activa200_socactiva200_soc
activa200_soc
 

More from Anne Nicolas

Kernel Recipes 2019 - Driving the industry toward upstream first
Kernel Recipes 2019 - Driving the industry toward upstream firstKernel Recipes 2019 - Driving the industry toward upstream first
Kernel Recipes 2019 - Driving the industry toward upstream firstAnne Nicolas
 
Kernel Recipes 2019 - No NMI? No Problem! – Implementing Arm64 Pseudo-NMI
Kernel Recipes 2019 - No NMI? No Problem! – Implementing Arm64 Pseudo-NMIKernel Recipes 2019 - No NMI? No Problem! – Implementing Arm64 Pseudo-NMI
Kernel Recipes 2019 - No NMI? No Problem! – Implementing Arm64 Pseudo-NMIAnne Nicolas
 
Kernel Recipes 2019 - Hunting and fixing bugs all over the Linux kernel
Kernel Recipes 2019 - Hunting and fixing bugs all over the Linux kernelKernel Recipes 2019 - Hunting and fixing bugs all over the Linux kernel
Kernel Recipes 2019 - Hunting and fixing bugs all over the Linux kernelAnne Nicolas
 
Kernel Recipes 2019 - Metrics are money
Kernel Recipes 2019 - Metrics are moneyKernel Recipes 2019 - Metrics are money
Kernel Recipes 2019 - Metrics are moneyAnne Nicolas
 
Kernel Recipes 2019 - Kernel documentation: past, present, and future
Kernel Recipes 2019 - Kernel documentation: past, present, and futureKernel Recipes 2019 - Kernel documentation: past, present, and future
Kernel Recipes 2019 - Kernel documentation: past, present, and futureAnne Nicolas
 
Embedded Recipes 2019 - Knowing your ARM from your ARSE: wading through the t...
Embedded Recipes 2019 - Knowing your ARM from your ARSE: wading through the t...Embedded Recipes 2019 - Knowing your ARM from your ARSE: wading through the t...
Embedded Recipes 2019 - Knowing your ARM from your ARSE: wading through the t...Anne Nicolas
 
Kernel Recipes 2019 - GNU poke, an extensible editor for structured binary data
Kernel Recipes 2019 - GNU poke, an extensible editor for structured binary dataKernel Recipes 2019 - GNU poke, an extensible editor for structured binary data
Kernel Recipes 2019 - GNU poke, an extensible editor for structured binary dataAnne Nicolas
 
Kernel Recipes 2019 - Analyzing changes to the binary interface exposed by th...
Kernel Recipes 2019 - Analyzing changes to the binary interface exposed by th...Kernel Recipes 2019 - Analyzing changes to the binary interface exposed by th...
Kernel Recipes 2019 - Analyzing changes to the binary interface exposed by th...Anne Nicolas
 
Embedded Recipes 2019 - Remote update adventures with RAUC, Yocto and Barebox
Embedded Recipes 2019 - Remote update adventures with RAUC, Yocto and BareboxEmbedded Recipes 2019 - Remote update adventures with RAUC, Yocto and Barebox
Embedded Recipes 2019 - Remote update adventures with RAUC, Yocto and BareboxAnne Nicolas
 
Embedded Recipes 2019 - Linux on Open Source Hardware and Libre Silicon
Embedded Recipes 2019 - Linux on Open Source Hardware and Libre SiliconEmbedded Recipes 2019 - Linux on Open Source Hardware and Libre Silicon
Embedded Recipes 2019 - Linux on Open Source Hardware and Libre SiliconAnne Nicolas
 
Embedded Recipes 2019 - From maintaining I2C to the big (embedded) picture
Embedded Recipes 2019 - From maintaining I2C to the big (embedded) pictureEmbedded Recipes 2019 - From maintaining I2C to the big (embedded) picture
Embedded Recipes 2019 - From maintaining I2C to the big (embedded) pictureAnne Nicolas
 
Embedded Recipes 2019 - Testing firmware the devops way
Embedded Recipes 2019 - Testing firmware the devops wayEmbedded Recipes 2019 - Testing firmware the devops way
Embedded Recipes 2019 - Testing firmware the devops wayAnne Nicolas
 
Embedded Recipes 2019 - Herd your socs become a matchmaker
Embedded Recipes 2019 - Herd your socs become a matchmakerEmbedded Recipes 2019 - Herd your socs become a matchmaker
Embedded Recipes 2019 - Herd your socs become a matchmakerAnne Nicolas
 
Embedded Recipes 2019 - LLVM / Clang integration
Embedded Recipes 2019 - LLVM / Clang integrationEmbedded Recipes 2019 - LLVM / Clang integration
Embedded Recipes 2019 - LLVM / Clang integrationAnne Nicolas
 
Embedded Recipes 2019 - Introduction to JTAG debugging
Embedded Recipes 2019 - Introduction to JTAG debuggingEmbedded Recipes 2019 - Introduction to JTAG debugging
Embedded Recipes 2019 - Introduction to JTAG debuggingAnne Nicolas
 
Embedded Recipes 2019 - Pipewire a new foundation for embedded multimedia
Embedded Recipes 2019 - Pipewire a new foundation for embedded multimediaEmbedded Recipes 2019 - Pipewire a new foundation for embedded multimedia
Embedded Recipes 2019 - Pipewire a new foundation for embedded multimediaAnne Nicolas
 
Kernel Recipes 2019 - ftrace: Where modifying a running kernel all started
Kernel Recipes 2019 - ftrace: Where modifying a running kernel all startedKernel Recipes 2019 - ftrace: Where modifying a running kernel all started
Kernel Recipes 2019 - ftrace: Where modifying a running kernel all startedAnne Nicolas
 
Kernel Recipes 2019 - Suricata and XDP
Kernel Recipes 2019 - Suricata and XDPKernel Recipes 2019 - Suricata and XDP
Kernel Recipes 2019 - Suricata and XDPAnne Nicolas
 
Kernel Recipes 2019 - Marvels of Memory Auto-configuration (SPD)
Kernel Recipes 2019 - Marvels of Memory Auto-configuration (SPD)Kernel Recipes 2019 - Marvels of Memory Auto-configuration (SPD)
Kernel Recipes 2019 - Marvels of Memory Auto-configuration (SPD)Anne Nicolas
 
Kernel Recipes 2019 - Formal modeling made easy
Kernel Recipes 2019 - Formal modeling made easyKernel Recipes 2019 - Formal modeling made easy
Kernel Recipes 2019 - Formal modeling made easyAnne Nicolas
 

More from Anne Nicolas (20)

Kernel Recipes 2019 - Driving the industry toward upstream first
Kernel Recipes 2019 - Driving the industry toward upstream firstKernel Recipes 2019 - Driving the industry toward upstream first
Kernel Recipes 2019 - Driving the industry toward upstream first
 
Kernel Recipes 2019 - No NMI? No Problem! – Implementing Arm64 Pseudo-NMI
Kernel Recipes 2019 - No NMI? No Problem! – Implementing Arm64 Pseudo-NMIKernel Recipes 2019 - No NMI? No Problem! – Implementing Arm64 Pseudo-NMI
Kernel Recipes 2019 - No NMI? No Problem! – Implementing Arm64 Pseudo-NMI
 
Kernel Recipes 2019 - Hunting and fixing bugs all over the Linux kernel
Kernel Recipes 2019 - Hunting and fixing bugs all over the Linux kernelKernel Recipes 2019 - Hunting and fixing bugs all over the Linux kernel
Kernel Recipes 2019 - Hunting and fixing bugs all over the Linux kernel
 
Kernel Recipes 2019 - Metrics are money
Kernel Recipes 2019 - Metrics are moneyKernel Recipes 2019 - Metrics are money
Kernel Recipes 2019 - Metrics are money
 
Kernel Recipes 2019 - Kernel documentation: past, present, and future
Kernel Recipes 2019 - Kernel documentation: past, present, and futureKernel Recipes 2019 - Kernel documentation: past, present, and future
Kernel Recipes 2019 - Kernel documentation: past, present, and future
 
Embedded Recipes 2019 - Knowing your ARM from your ARSE: wading through the t...
Embedded Recipes 2019 - Knowing your ARM from your ARSE: wading through the t...Embedded Recipes 2019 - Knowing your ARM from your ARSE: wading through the t...
Embedded Recipes 2019 - Knowing your ARM from your ARSE: wading through the t...
 
Kernel Recipes 2019 - GNU poke, an extensible editor for structured binary data
Kernel Recipes 2019 - GNU poke, an extensible editor for structured binary dataKernel Recipes 2019 - GNU poke, an extensible editor for structured binary data
Kernel Recipes 2019 - GNU poke, an extensible editor for structured binary data
 
Kernel Recipes 2019 - Analyzing changes to the binary interface exposed by th...
Kernel Recipes 2019 - Analyzing changes to the binary interface exposed by th...Kernel Recipes 2019 - Analyzing changes to the binary interface exposed by th...
Kernel Recipes 2019 - Analyzing changes to the binary interface exposed by th...
 
Embedded Recipes 2019 - Remote update adventures with RAUC, Yocto and Barebox
Embedded Recipes 2019 - Remote update adventures with RAUC, Yocto and BareboxEmbedded Recipes 2019 - Remote update adventures with RAUC, Yocto and Barebox
Embedded Recipes 2019 - Remote update adventures with RAUC, Yocto and Barebox
 
Embedded Recipes 2019 - Linux on Open Source Hardware and Libre Silicon
Embedded Recipes 2019 - Linux on Open Source Hardware and Libre SiliconEmbedded Recipes 2019 - Linux on Open Source Hardware and Libre Silicon
Embedded Recipes 2019 - Linux on Open Source Hardware and Libre Silicon
 
Embedded Recipes 2019 - From maintaining I2C to the big (embedded) picture
Embedded Recipes 2019 - From maintaining I2C to the big (embedded) pictureEmbedded Recipes 2019 - From maintaining I2C to the big (embedded) picture
Embedded Recipes 2019 - From maintaining I2C to the big (embedded) picture
 
Embedded Recipes 2019 - Testing firmware the devops way
Embedded Recipes 2019 - Testing firmware the devops wayEmbedded Recipes 2019 - Testing firmware the devops way
Embedded Recipes 2019 - Testing firmware the devops way
 
Embedded Recipes 2019 - Herd your socs become a matchmaker
Embedded Recipes 2019 - Herd your socs become a matchmakerEmbedded Recipes 2019 - Herd your socs become a matchmaker
Embedded Recipes 2019 - Herd your socs become a matchmaker
 
Embedded Recipes 2019 - LLVM / Clang integration
Embedded Recipes 2019 - LLVM / Clang integrationEmbedded Recipes 2019 - LLVM / Clang integration
Embedded Recipes 2019 - LLVM / Clang integration
 
Embedded Recipes 2019 - Introduction to JTAG debugging
Embedded Recipes 2019 - Introduction to JTAG debuggingEmbedded Recipes 2019 - Introduction to JTAG debugging
Embedded Recipes 2019 - Introduction to JTAG debugging
 
Embedded Recipes 2019 - Pipewire a new foundation for embedded multimedia
Embedded Recipes 2019 - Pipewire a new foundation for embedded multimediaEmbedded Recipes 2019 - Pipewire a new foundation for embedded multimedia
Embedded Recipes 2019 - Pipewire a new foundation for embedded multimedia
 
Kernel Recipes 2019 - ftrace: Where modifying a running kernel all started
Kernel Recipes 2019 - ftrace: Where modifying a running kernel all startedKernel Recipes 2019 - ftrace: Where modifying a running kernel all started
Kernel Recipes 2019 - ftrace: Where modifying a running kernel all started
 
Kernel Recipes 2019 - Suricata and XDP
Kernel Recipes 2019 - Suricata and XDPKernel Recipes 2019 - Suricata and XDP
Kernel Recipes 2019 - Suricata and XDP
 
Kernel Recipes 2019 - Marvels of Memory Auto-configuration (SPD)
Kernel Recipes 2019 - Marvels of Memory Auto-configuration (SPD)Kernel Recipes 2019 - Marvels of Memory Auto-configuration (SPD)
Kernel Recipes 2019 - Marvels of Memory Auto-configuration (SPD)
 
Kernel Recipes 2019 - Formal modeling made easy
Kernel Recipes 2019 - Formal modeling made easyKernel Recipes 2019 - Formal modeling made easy
Kernel Recipes 2019 - Formal modeling made easy
 

Recently uploaded

(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...gurkirankumar98700
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfAlina Yurenko
 
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...soniya singh
 
Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Andreas Granig
 
Cloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEECloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEEVICTOR MAESTRE RAMIREZ
 
Asset Management Software - Infographic
Asset Management Software - InfographicAsset Management Software - Infographic
Asset Management Software - InfographicHr365.us smith
 
Salesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantSalesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantAxelRicardoTrocheRiq
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)OPEN KNOWLEDGE GmbH
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...MyIntelliSource, Inc.
 
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEBATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEOrtus Solutions, Corp
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsAhmed Mohamed
 
Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software DevelopersVinodh Ram
 
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataBradBedford3
 
The Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdfThe Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdfPower Karaoke
 
chapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptchapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptkotipi9215
 
What is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWhat is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWave PLM
 
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...Christina Lin
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureDinusha Kumarasiri
 
software engineering Chapter 5 System modeling.pptx
software engineering Chapter 5 System modeling.pptxsoftware engineering Chapter 5 System modeling.pptx
software engineering Chapter 5 System modeling.pptxnada99848
 

Recently uploaded (20)

(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
 
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
 
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
 
Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024
 
Cloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEECloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEE
 
Asset Management Software - Infographic
Asset Management Software - InfographicAsset Management Software - Infographic
Asset Management Software - Infographic
 
Salesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantSalesforce Certified Field Service Consultant
Salesforce Certified Field Service Consultant
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
 
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEBATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML Diagrams
 
Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software Developers
 
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
 
The Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdfThe Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdf
 
chapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptchapter--4-software-project-planning.ppt
chapter--4-software-project-planning.ppt
 
What is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWhat is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need It
 
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with Azure
 
software engineering Chapter 5 System modeling.pptx
software engineering Chapter 5 System modeling.pptxsoftware engineering Chapter 5 System modeling.pptx
software engineering Chapter 5 System modeling.pptx
 

Embedded Recipes 2018 - Upstream multimedia on amlogic so cs from fiction to reality - Maxime Jourdan

  • 1. Upstream Multimedia on Amlogic SoCs : From Fiction To Reality Embedded recipes - 2018 Maxime Jourdan
  • 3. 1. Amlogic Multimedia status on mainline Linux 2. Implementing a V4L2 Memory-to-Memory video decoder for Amlogic SoCs 3. Current userspace development for decoder-to-display pipelines 4. Demo! Topics
  • 4. Amlogic Multimedia status on mainline Linux (1/3) ● Display : DRM/KMS Drivers ○ Support ■ HDMI / Composite output on S905, S905D/X, S912 ■ Primary Plane RGB with Alpha ○ WiP ■ YUV overlay plane support ■ 4K P30 (HDMI 1.4) ○ To be done ■ HDMI 2.0 support ■ Support for Composite/HDMI on older S802/S812/S805 ■ Support for upcoming SoCs A113D/S905D/X2, S922, … (+ DSI output)
  • 5. Amlogic Multimedia status on mainline Linux (2/3) ● CEC ○ Support ■ CEC support on S805X (non tested), S905/S905X/S905D/S912 and later ○ To be done ■ Suspend support : the driver should communicate the current Logical & Physical Address before the suspend, then the Suspend firmware code can continue communicating with the TV and wake up the device.
  • 6. Amlogic Multimedia status on mainline Linux (3/3) ● Audio : Alsa SoC ○ Support ■ AXG SoC family (A113D/X) : (v4.19 - v4.20) ● TDM input and output (max 128 channels - 192KHz) * 3 ● SPDIF output ● PDM input ● Multicodec card driver ○ WiP ■ AXG SPDIF input ■ Gx SoC family: i2s output and spdif output ■ Internal DAC Codec (GXL and G12) ○ To be done ■ G12 (S905D/X2, S922) SoC family support (AXG based)
  • 7. Implementing a V4L2 Memory-to-Memory video decoder for Amlogic SoCs
  • 8. V4L2 M2M Video Decoder ● Video4Linux2: kernel framework for media drivers (cameras, displays, video accelerators ..) ● Memory2Memory: both inputs and outputs are in RAM ● Device node: /dev/videoX ● Increasingly supported for many SoC vendors: Samsung, Qualcomm, MediaTek.. ○ Not upstream yet: Allwinner, Broadcom, Rockchip, Amlogic
  • 9. Stateful Video Decoders ● Possess a hardware bitstream parser ● Autonomous ● Almost always firmware-assisted ● Examples: Amlogic, Qualcomm, Samsung, MediaTek
  • 10. Stateless Video Decoders ● Need assistance from userspace for bitstream parsing and updating the local state ● Rely on the V4L2 Request API ● Examples: Allwinner, Rockchip
  • 11. Amlogic video decoder MJPEG, MPEG2, MPEG4 H.264 HEVC HEVC 10-bit VP9 S805 1080p60 1080p60 1080p30 N/A N/A S905 4K30 4K60 4K60 N/A S905X S912 4K60 AML-S905X-CC “Le Potato”Odroid-C2 (S905) Khadas VIM2 (S912)
  • 12. Amlogic video decoder ● Custom driver available in vendor kernel drivers/amlogic/amports/ ○ ~20,000 lines of code for the core ○ ~3,000 lines of code for H.264 ○ ~10,000 lines of code for HEVC ● Non standard API (~20 custom ioctls) ● In-kernel media player logic
  • 13. Where do you start ? ● Power / Clocks / IRQs ● Where are the firmware files ? ● Where do you write the bitstream ? ● How do you get the frames back ? ● How much is in vendor kernel / userspace blob ?
  • 14. Clocks - vendor kernel amports/arch/clkgx.c #define VDEC1_CLOCK_ON() do { WRITE_HHI_REG_BITS(HHI_VDEC_CLK_CNTL, 1, 8, 1); WRITE_HHI_REG_BITS(HHI_VDEC3_CLK_CNTL, 0, 15, 1); WRITE_HHI_REG_BITS(HHI_VDEC3_CLK_CNTL, 0, 8, 1); WRITE_VREG_BITS(DOS_GCLK_EN0, 0x3ff, 0, 10); } while (0) #define VDEC1_648M() WRITE_HHI_REG_BITS(HHI_VDEC_CLK_CNTL, (6 << 9) | (0), 0, 16)
  • 15. Firmwares - vendor kernel amports/arch/ucode/h264/h264c_linux.h static const u32 MicroCode[] __initconst = { 0x06810001, 0x06800000, 0x0d000001, 0x07400040, 0x064c0800, 0x09800300, 0x00000000, 0x060c0800, 0x0649d019, 0x0c006580, 0x0649c134, 0x06880000, 0x060c2900, 0x080c0002, 0x06bfda80, 0x07c02d40, 0x06030400, 0x00400000, 0x0c007d80, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0c7ffe80, ...
  • 16. Writing the bitstream VIFIFO ESPARSER Input Buffer 16 MiB Input Buffer But no IRQ triggered by the parser..
  • 17. Writing the bitstream VIFIFO ESPARSER Input Buffer 16 MiB Input Buffer 4KiB Padding Start Code 00 00 01 ff
  • 18. Retrieving the decoded frames Canvas ID: 0-255 Width x Height Buffer Physical Address Block Mode Endianness Decoder Frame 0 Frame 1 Y plane: Canvas 0 U/V plane: Canvas 1 Y plane: Canvas 2 U/V plane: Canvas 3
  • 20. Testing ● FFmpeg ○ ffmpeg -c:v h264_v4l2m2m -i input.mp4 -f rawvideo out.nv12 ● GStreamer ○ gst-launch-1.0 filesrc location=input.mp4 ! parsebin ! v4l2video0dec ! fakesink ● Chromium (Igalia) ○ GN_ARGS += “use_v4l2_codec use_linux_v4l2_only” ○ ln -sf video0 /dev/video-dec0
  • 21.
  • 23. Block Mode Linear.. but each 8 pixels are reversed ?
  • 24. Correct byte swapping: Proper NV12!
  • 25. Linux DRM - Plane For a full Description of the DRM Subsystem : https://events.static.linuxfound.org/sites/events/files/slides/brezillon-drm-kms.pdf
  • 26. Linux DRM - Plane Blending The DRM Plane abstraction permits : ● Using Hardware assisted Color Space Conversion ○ RGB to YUV ○ NV12 to RGB ● Using Hardware assisted Alpha Blending between multiple planes ○ OSD Plane blended with underlying Video Plane ● Digital TV Hardware usually have an “OSD” Primary Plane and a “Video” Overlay Plane behind the OSD plane ● Generic Hardware can configure the Order of the planes : z-order
  • 27. Linux DRM - Plane Blending 3840x2160 NV12 Plane (from Decoder) 1920x1080 ARGB8888 Plane Upscaling Color Space Convert Alpha Blending 3840x2160 YUV422 Frame for HDMI
  • 28. Sharing buffers with dmabuf ● Kernel framework to share physical buffers between devices ● Uses file descriptors ● Consumer devices import the buffers ● Producer devices export the buffers ● V4L2 exposes VIDIOC_EXPBUF to export buffers.
  • 29. Rendering frames in zero-copy ● DRM Prime with dmabuf ○ Requires plane that supports NV12. Preferably with a scaler. ○ No dependency on GPU for the video path ● EGL dmabuf import ○ Requires a OpenGL stack ○ A single RGB plane is enough
  • 30. Rendering - DRM Prime Media Player V4L2 M2M decoder VIDIOC_EXPBUF RGB DRM plane NV12 DRM plane GPU drmModeAddFB2 Subtitle
  • 31. Rendering - EGL dmabuf import Media Player V4L2 M2M decoder VIDIOC_EXPBUF GPU Subtitle eglCreateImageKHR EGL_LINUX_DMA_BUF_EXT RGB DRM plane
  • 32. Media players Kodi mpv GStreamer Chromium V4L2 + DRM Prime kmssink V4L2 + EGL import glimagesink uses FFmpeg
  • 33. Resources ● LibreELEC - “Just enough OS for KODI” ○ https://github.com/chewitt/LibreELEC.tv/tree/amlogic ○ PROJECT=Amlogic_GX DEVICE=LePotato ARCH=arm make image ● OpenEmbedded meta-meson layer ○ https://github.com/superna9999/meta-meson ● Communication ○ http://linux-meson.com/ ○ #linux-amlogic on Freenode ○ linux-amlogic@lists.infradead.org
  • 34. Thanks to..! ● #linux-amlogic community ● #v4l community ● LibreElec community ○ Lukas Rusak for DRM Prime support in Kodi/FFmpeg ○ Christian Hewitt for integration and testing ● Nicolas Dufresne (Collabora) for help with gstreamer