Skip to content

Releases: djnice/CoreELEC

Dolby Vision P7 FEL and 3D MVC on S928X (S5) - experimental build 2026-10-01 (CoreELEC 22)

Choose a tag to compare

@djnice djnice released this 01 Oct 06:51

Experimental CoreELEC 22 (Piers) development build for Amlogic S928X (S5) that composes
Dolby Vision Profile 7 FEL on the GPU instead of dropping the enhancement layer - now also with
3D Blu-ray (MVC) decoded in software and output as full resolution frame packing.

This is a test build made from the dv-fel-s5 branch on top of CoreELEC coreelec-22 as of
2026-09-30 (after v22.0 RC1, Kodi 69b25a65). Use it at your own risk and keep a backup of your system.

A build of the same work on top of SamuriHL's CoreELEC 22 is available at
djnice/CoreELEC-samurihl releases. It adds
SamuriHL's highly configurable player-led (LLDV) Dolby Vision options, an L1 brightness readout in the
demo mode and the full VSVDB black level range - recommended for projectors and Samsung TVs.

New: 3D Blu-ray (MVC) in software, full resolution frame packing

The S5's hardware MVC decoder corrupts the second (dependent) view of some 3D titles (blocky right eye
for a fraction of a second, the left eye clean). 3D MVC is now decoded on the CPU with
edge264-mvc (multithreaded, about 1.5-3 cores for a 3D
Blu-ray) and both views go to the video layer through a new kernel module (mvcout):

  • Frame packing at full resolution (1920x2205: left view, 45 lines of active space, right view; HDMI
    1080p24 3D), for 3D projectors and 3D TVs: both eyes keep their full 1920x1080.
  • 2D (mono) from the left or right view, following Kodi's stereoscopic 3D settings as usual. Half
    resolution side-by-side / top-bottom output is there too but not tested on a display yet.
  • Works with 3D MKV/MK3D files and 3D Blu-ray folders/ISOs (main title).
  • On S5 3D MVC always uses the software decoder. On the other Amlogic SoCs it is a setting:
    Settings → CoreELEC → Decode 3D MVC in software (expert level, off by default).

Frame packing needs a display that offers it (its EDID): the 3D modes show up in the resolution
whitelist as e.g. 1920x1080 @ 23.98 - Full Screen 3D FP/TB. If you use a custom whitelist, add
that mode
, otherwise Kodi cannot switch to frame packing. Kodi's stereoscopic playback mode (Settings
→ Player → Videos → Stereoscopic 3D
) decides between 3D and 2D, as with any 3D source.

Fixes

  • Hardware EL after a seek on FEL titles whose EL has another picture order than the BL (e.g. the
    common P7_FEL_STDL1 test clip, its dual-track variant DTDL2): after a seek the EL never came back
    and the rest of the title played without it. The layers are now paired by each picture's place in the
    display order, taken from the stream (POC and random access points) instead of counting decoded
    pictures, which differs between the layers after a seek. A few frames right after a seek are still
    shown without the EL on these files, until the EL's next keyframe: that follows from how they are coded.
  • GUI after 3D frame packed playback: a mode switch now also happens when frame packing is entered or
    left (the display mode name stays the same), and frame packing is only used on a mode that offers it (no
    "unsupported signal" when Kodi falls back to a 2D mode).
  • Kodi no longer re-evaluates the display mode on every frame for the first seconds of a 3D title played
    in 2D on a 3D capable display.
  • Stopping playback right at the end of some FEL files (e.g. P7_FEL_STDL1) no longer holds the player
    for 40 seconds before the next file can start.
  • Hardware MVC decoder (other SoCs): picture buffers are released in order, so the decoder no longer
    decodes into the picture on screen (tearing, older pictures mixing in).

Also included

  • Updated to the current coreelec-22 (Kodi 69b25a65 and the LibreELEC changes since RC1).
  • Dune front display: the clock on the TM1628 front panel works (openvfd, display type 0x0B), tested on
    the Dune HD Pro 8K Plus and the Dune HD Pro One 8K Plus.
  • R_volution PlayerPro 8K device tree (device_trees/s5_s928x_rvolution_playerpro_8k.dtb) with its
    front display config. Not tested on the hardware yet - feedback welcome.
  • Dune HD Pro One 8K Plus: booting from the USB 3.0 ports. The VIA hub behind them never woke up once
    suspended, so a stick or SSD there was not found. USB autosuspend is now off on the Dune and R_volution
    device trees.
  • Booting from a USB 3.0 port on vendor bootloaders that only start the first USB controller, and the Dune
    HD Pro 8K Plus device tree (from the previous build; see there).

What the FEL composition does

The Dolby Vision hardware in the S5 has no enhancement-layer input, so CoreELEC converts P7 to
P8.1 and drops the EL: FEL titles lose their full-enhancement detail. This build adds the FEL
reconstruction back, while the output still goes through the hardware Dolby Vision pipeline:

  1. The hardware HEVC decoder decodes the base layer and the enhancement layer (10-bit AFBC).
  2. A vfm node (dvfel kernel module, between the decoder and the display) decompresses each base
    layer frame and its EL picture with the VICP block into linear 10-bit buffers shared with the GPU
    (dma-buf).
  3. Kodi parses the original P7 RPU (libdovi).
  4. The Mali-G57 composes every frame in GLES 3.2 in fp32: Lanczos-3 EL upsampling, NLQ (linear
    with dead zone) and base layer prediction (polynomial / MMR) from the RPU.
  5. The result is quantized to 10 bits with a static blue noise dither to keep gradients free of
    banding.
  6. VICP recompresses the composed frame to AFBC for the display; the hardware DV core gets it
    with a no-op P8.1 RPU, so the dynamic metadata (L1/L2, ...) and the TV-led DV output stay
    as usual.

The composition matches a CPU reference implementation within ±1 LSB.

Requirements

  • S928X (S5) device using the Amlogic-no image. FEL: TV with Dolby Vision, DV enabled in CoreELEC.
    3D: a 3D TV or projector (frame packing), or any display for 2D playback of 3D titles.
  • The original dovi.ko is required (the Dolby Vision kernel module from your box's firmware, set up as
    for any Dolby Vision playback in CoreELEC). It does not need to be patched: the Dolby Vision core gets a
    regular profile 8.1 stream.
  • Only P7 FEL streams use the FEL path. MEL, P5, P8, HDR10 and SDR, and all other SoCs, play
    exactly as before.

Install

  • Update: copy the .tar to the /storage/.update folder (the Update Samba share) and reboot.
  • New install: write the -Generic.img.gz to an SD card / USB stick (e.g. with balenaEtcher or
    Rufus) and set up the device tree as usual for your box.

Settings

In Settings → CoreELEC (expert level):

  • Dolby Vision FEL composition (S5, on by default): off gives the regular CoreELEC behaviour (P7
    converted to P8.1 without the enhancement layer). Takes effect when playback starts.
  • Dither Dolby Vision FEL output (S5, on by default): blue noise dither of the composed picture to
    10 bits. Takes effect immediately, also during playback.
  • Dolby Vision FEL demo mode (S5, off by default): split screen for P7 FEL titles, the full FEL
    composition on the left, the base layer as regular CoreELEC shows it on the right.
  • Decode 3D MVC in software (not on S5, where it is always on; off by default).

Limitations / known issues

  • FEL: 4K 24p only for now (about 35 ms of GPU time per 4K frame, budget 41.7 ms).
  • The S5 display path takes at most 10 bits, so the FEL output is 10 bits plus dither, not a true
    12-bit signal.
  • 3D MVC: 1080p titles only (3D Blu-ray). Tested on 3D MKV/MK3D samples, a 3D Blu-ray ISO and one 3D
    projector; chapter skipping on full 3D Blu-ray discs is not tested yet.
  • On one test clip (P7_FEL_STDL2) a single frame flashes blue or red now and then; it happens with
    the software EL decoder too and is being investigated.

Debug switches (on the box)

  • /storage/dvfel_sw_el: if the file exists, the FEL EL is decoded in software (comparison).
  • /storage/dvfel_dither: overrides the setting, 0 off, 1 on, 2 left half only (comparison).
  • /storage/dvfel_pattern: 1 shows a 12-bit grey ramp test pattern instead of the video.
  • Statistics: cat /sys/kernel/debug/dvfel/stats (needs debugfs mounted).

Source: https://github.com/djnice/CoreELEC/tree/dv-fel-s5

Dolby Vision P7 FEL on S928X (S5) - experimental build 2026-09-30 (hardware EL, CoreELEC 22.0 RC1)

Choose a tag to compare

@djnice djnice released this 30 Sep 07:49

Experimental CoreELEC 22 (Piers) development build for Amlogic S928X (S5) that composes
Dolby Vision Profile 7 FEL on the GPU instead of dropping the enhancement layer - now with the
enhancement layer decoded in hardware.

This is a test build made from the dv-fel-s5 branch on top of CoreELEC coreelec-22
v22.0 RC1 (Kodi 22.0rc1). Use it at your own risk and keep a backup of your system.

A build of the same FEL work on top of SamuriHL's CoreELEC 22 is available at
djnice/CoreELEC-samurihl releases. It adds
SamuriHL's highly configurable player-led (LLDV) Dolby Vision options, an L1 brightness readout in the
demo mode and the full VSVDB black level range - recommended for projectors and Samsung TVs.

New: hardware decoded enhancement layer

Until now Kodi decoded the EL in software, and on heavy UHD remuxes (70-90 Mbit/s, e.g. Airplane!,
Jurassic Park) the CPU could not keep up in busy scenes: those frames were shown without the EL,
visible as flicker between the FEL and the base layer picture. Now the S5's HEVC decoder decodes both
layers (Dolby Vision dual layer decoding, the EL in a second decoder instance) and the dvfel kernel
module hands the decoded EL picture of every frame to the GPU together with the base layer.

  • No more frames without the EL on heavy remuxes, and no CPU for the EL: Kodi uses about 5-10 % of one
    core during FEL playback.
  • BL, EL and RPU stay frame-exactly paired, also when the EL is coded in another picture order than
    the BL (paired by display order; the RPU comes with the EL picture, as with the software decoder).
  • Used automatically for P7 FEL. MEL, P5, P8, HDR10 and SDR play as before. The software EL decoder
    is still there (see Debug switches); it now uses every CPU core instead of three.

Making the S5 dual layer decoder work for this needed fixes in the HEVC decoder driver
(media_modules): the layer switch followed a stale flag after a repeated decoder run (error pictures
and 200 ms decoder timeouts on the EL, the EL trailing the BL by up to a second), the EL pictures came
out a whole decode cycle late, streams without reordering showed their first picture twice, and the
pairing label of the pictures was overwritten. It also includes SamuriHL's fix for the stream write
pointer of the second (EL) decoder instance.

Fixes

  • Kernel panic when a Dolby Vision title starts (rare, timing dependent): switching the display
    mode for playback (e.g. 1080p60 -> 2160p24) resets the HDMI transmitter, and the Dolby Vision vsync
    handler could write an HDMI packet into it right then (SError). HDMI packets are no longer written
    from the vsync handler while the output is being reconfigured.
  • FEL titles whose EL is coded 1920x1088 (cropped to 1080, common): with the hardware EL these
    were shown without the EL; the EL picture is now read cropped.

What it does

The Dolby Vision hardware in the S5 has no enhancement-layer input, so CoreELEC converts P7 to
P8.1 and drops the EL: FEL titles lose their full-enhancement detail. This build adds the FEL
reconstruction back, while the output still goes through the hardware Dolby Vision pipeline:

  1. The hardware HEVC decoder decodes the base layer and the enhancement layer (10-bit AFBC).
  2. A vfm node (dvfel kernel module, between the decoder and the display) decompresses each base
    layer frame and its EL picture with the VICP block into linear 10-bit buffers shared with the GPU
    (dma-buf).
  3. Kodi parses the original P7 RPU (libdovi).
  4. The Mali-G57 composes every frame in GLES 3.2 in fp32: Lanczos-3 EL upsampling, NLQ (linear
    with dead zone) and base layer prediction (polynomial / MMR) from the RPU.
  5. The result is quantized to 10 bits with a static blue noise dither (one code value, not
    visible) to keep gradients free of banding.
  6. VICP recompresses the composed frame to AFBC for the display; the hardware DV core gets it
    with a no-op P8.1 RPU, so the dynamic metadata (L1/L2, ...) and the TV-led DV output stay
    as usual.

The composition matches a CPU reference implementation within ±1 LSB.

Requirements

  • S928X (S5) device using the Amlogic-no image, TV with Dolby Vision, DV enabled in CoreELEC.
  • No patched dovi.ko is needed: the Dolby Vision core gets a regular profile 8.1 stream.
  • Only P7 FEL streams use the new path. MEL, P5, P8, HDR10 and SDR, and all other SoCs, play
    exactly as before.

Install

  • Update: copy the .tar to the /storage/.update folder (the Update Samba share) and reboot.
  • New install: write the -Generic.img.gz to an SD card / USB stick (e.g. with balenaEtcher or
    Rufus) and set up the device tree as usual for your box.

Limitations / known issues

  • 4K 24p only for now: about 35 ms of GPU time per 4K frame (budget 41.7 ms). 4K 30/50/60 FEL
    does not fit.
  • The S5 display path takes at most 10 bits, so the output is 10 bits plus dither, not a true
    12-bit signal.
  • On one test clip (P7_FEL_STDL2, a few minutes long) a single frame flashes blue or red now and
    then; it happens with the software EL decoder too and is being investigated.

Settings

Shown on S5 (S928X) only.

  • Settings → CoreELEC → Dolby Vision FEL composition (expert level, on by default): turn it off
    to get the regular CoreELEC behaviour (P7 converted to P8.1 without the enhancement layer). Takes
    effect when playback starts; the two settings below are greyed out while it is off.
  • Settings → CoreELEC → Dither Dolby Vision FEL output (expert level, next to Disable noise
    reduction
    ): blue noise dither of the composed picture to 10 bits, on by default. Takes effect
    immediately, also during playback.
  • Settings → CoreELEC → Dolby Vision FEL demo mode (off by default): split screen for P7 FEL
    titles. The left half shows the full FEL composition (RPU mapping and enhancement layer), the
    right half the base layer as regular CoreELEC shows P7 converted to P8.1.

Debug switches (on the box)

  • /storage/dvfel_sw_el: if the file exists, the EL is decoded in software as before (comparison).
  • /storage/dvfel_dither: overrides the setting, 0 off, 1 on, 2 left half only (comparison).
  • /storage/dvfel_pattern: 1 shows a 12-bit grey ramp test pattern instead of the video.
  • Statistics: cat /sys/kernel/debug/dvfel/stats (needs debugfs mounted).

Also included

  • Booting from a USB 3.0 port: some vendor bootloaders (e.g. Dune HD Pro 8K Plus) only start
    the first USB controller, so CoreELEC on the USB 3.0 port was not found and Android started.
    The install script (aml_autoscript) now makes the bootloader try the other controllers too.
    It is written to the bootloader environment on the first install (toothpick / recovery button
    boot). On a box that already runs CoreELEC, either do that boot once more, or run over SSH:

    fw_setenv bootfromusb 'usb start; if usb storage; then run cfgloadusb; fi; for i in 1 2; do usb stop; usb start ${i}; if usb storage; then run cfgloadusb; fi; done'
    
  • Dune HD Pro 8K Plus device tree (device_trees/s5_s928x_dune_hd_pro_8k_plus.dtb): the Ugoos
    SK1 tree plus the power of the internal HDD bay. Copy it as dtb.img to the root of the
    CoreELEC FAT partition.

Source: https://github.com/djnice/CoreELEC/tree/dv-fel-s5

Dolby Vision P7 FEL on S928X (S5) - experimental build 2026-09-29 #2 (CoreELEC 22.0 RC1)

Choose a tag to compare

@djnice djnice released this 29 Sep 12:54

Experimental CoreELEC 22 (Piers) development build for Amlogic S928X (S5) that composes
Dolby Vision Profile 7 FEL on the GPU instead of dropping the enhancement layer.

This is a test build made from the dv-fel-s5 branch on top of CoreELEC coreelec-22
v22.0 RC1 (Kodi 22.0rc1). Use it at your own risk and keep a backup of your system.

A build of the same FEL work on top of SamuriHL's CoreELEC 22 is available at
djnice/CoreELEC-samurihl releases. It adds
SamuriHL's highly configurable player-led (LLDV) Dolby Vision options, an L1 brightness readout in the
demo mode and the full VSVDB black level range - recommended for projectors and Samsung TVs.

Fixes

  • Playback no longer stalls for good after skipping chapters on Blu-ray discs (seen on a UHD disc
    played with menus, skipping chapters quickly). A chapter skip into another clip can hand the decoder
    a first frame without a timestamp (Kodi blanks the timestamps while a timeline correction is not
    confirmed); Kodi took it as time 0, the clock jumped, and with the FEL composition the pipeline
    deadlocked. Two fixes:

    • dvfel kernel module: frames the display returns after a reset are released at once, and when
      every buffer is still held it passes one frame through instead of waiting forever.
    • Kodi (AMLCodec): a decoder timestamp of 0 is treated as "no timestamp", and such a frame is
      dropped when it is the first one after a reset, so the clock follows the new position.

    The same fixes were tested on the SamuriHL based build of this work (20+ fast chapter-skip runs on
    the same disc, no stall); the dvfel module is identical.

What it does

The Dolby Vision hardware in the S5 has no enhancement-layer input, so CoreELEC converts P7 to
P8.1 and drops the EL: FEL titles lose their full-enhancement detail. This build adds the FEL
reconstruction back, while the output still goes through the hardware Dolby Vision pipeline:

  1. The hardware HEVC decoder decodes the base layer as usual (10-bit AFBC).
  2. A new vfm node (dvfel kernel module, between the decoder and the display) decompresses each
    base layer frame with the VICP block into a linear 10-bit 4:4:4 buffer shared with the GPU
    (dma-buf).
  3. Kodi splits the EL NAL units from the stream (single-track MKV or dual-track MP4), decodes
    them in software (FFmpeg) and parses the original P7 RPU (libdovi).
  4. The Mali-G57 composes every frame in GLES 3.2 in fp32: Lanczos-3 EL upsampling, NLQ (linear
    with dead zone) and base layer prediction (polynomial / MMR) from the RPU.
  5. The result is quantized to 10 bits with a static blue noise dither (one code value, not
    visible) to keep gradients free of banding.
  6. VICP recompresses the composed frame to AFBC for the display; the hardware DV core gets it
    with a no-op P8.1 RPU, so the dynamic metadata (L1/L2, ...) and the TV-led DV output stay
    as usual.

BL, EL and RPU are paired frame-exactly by display order, like the hardware composers do, also
when the EL uses another GOP structure than the BL. The composition matches a CPU reference
implementation within ±1 LSB.

Requirements

  • S928X (S5) device using the Amlogic-no image, TV with Dolby Vision, DV enabled in CoreELEC.
  • No patched dovi.ko is needed: the FEL is composed on the GPU and the Dolby Vision core gets a
    regular profile 8.1 stream, so the stock dovi.ko does the rest.
  • Only P7 FEL streams use the new path. MEL, P5, P8, HDR10 and SDR, and all other SoCs, play
    exactly as before.

Install

Copy the .tar to the /storage/.update folder (the Update Samba share) and reboot.

Limitations / known issues

  • 4K 24p only for now: about 35 ms of GPU time per 4K frame (budget 41.7 ms). 4K 30/50/60 FEL
    does not fit.
  • The S5 display path takes at most 10 bits (P010-style and 12-bit 4:2:2 containers are
    truncated to the upper 10 bits, measured with the VPP probe), so the output is 10 bits plus
    dither, not a true 12-bit signal.
  • After a seek, a few frames (longer on some encodes whose EL keyframes are not aligned with the
    BL) are shown without the EL until the next EL keyframe.
  • Kodi CPU load is higher during FEL playback (software EL decoding).

Settings

Shown on S5 (S928X) only.

  • Settings → CoreELEC → Dolby Vision FEL composition (expert level, on by default): turn it off
    to get the regular CoreELEC behaviour (P7 converted to P8.1 without the enhancement layer). Takes
    effect when playback starts; the two settings below are greyed out while it is off.

  • Settings → CoreELEC → Dither Dolby Vision FEL output (expert level, next to Disable noise
    reduction
    ): blue noise dither of the composed picture to 10 bits, on by default. Takes effect
    immediately, also during playback.

  • Settings → CoreELEC → Dolby Vision FEL demo mode (off by default): split screen for P7 FEL
    titles. The left half shows the full FEL composition (RPU mapping and enhancement layer), the
    right half the base layer as regular CoreELEC shows P7 converted to P8.1 (base layer plus the
    L1/L2/... trims, which apply to the whole picture).

Debug switches (on the box)

  • /storage/dvfel_dither: overrides the setting, 0 off, 1 on, 2 left half only (comparison).
  • /storage/dvfel_pattern: 1 shows a 12-bit grey ramp test pattern instead of the video.
  • Statistics: cat /sys/kernel/debug/dvfel/stats (needs debugfs mounted).

Also included

  • Booting from a USB 3.0 port: some vendor bootloaders (e.g. Dune HD Pro 8K Plus) only start
    the first USB controller, so CoreELEC on the USB 3.0 port was not found and Android started.
    The install script (aml_autoscript) now makes the bootloader try the other controllers too.
    It is written to the bootloader environment on the first install (toothpick / recovery button
    boot). On a box that already runs CoreELEC, either do that boot once more, or run over SSH:

    fw_setenv bootfromusb 'usb start; if usb storage; then run cfgloadusb; fi; for i in 1 2; do usb stop; usb start ${i}; if usb storage; then run cfgloadusb; fi; done'
    
  • Dune HD Pro 8K Plus device tree (device_trees/s5_s928x_dune_hd_pro_8k_plus.dtb): the Ugoos
    SK1 tree plus the power of the internal HDD bay. Copy it as dtb.img to the root of the
    CoreELEC FAT partition.

Source: https://github.com/djnice/CoreELEC/tree/dv-fel-s5