github pannal/CoreELEC T4
Release T4

6 hours ago

p3i T4

T4 is our biggest release since the U3k line. About ten weeks of work across Kodi, the kernel, the CoreELEC distro and a new addon repository. It is also the first build to ship our own pre-installed addon repo (repository.p3i), the seamless-branching helper, the per-folder override engine, and a new default skin.

The headline changes:

  • For the first time, a real display-synced video clock: smoother playback, less judder.
  • Reboot and shutdown are watchdog-protected: the occasional hang now reboots itself instead of needing a power pull.
  • A new default skin, skin.p3i.estuary.
  • A pile of interlaced / MBAFF / framerate bugs fixed (no more 100fps 1080i or wrong-speed playback).
  • Keyframe-accurate fast seek (on by default).
  • Lower RAM use and less heap fragmentation, so the box stays stable under memory pressure.
  • A pre-installed addon repo (repository.p3i) with our helpers and patched inputstreams.
  • Simpler DV/HDR setup presets, automatic DV L5 active-area detection, and a fix for the projector SDR↔HDR flip.

Highlights

Roughly ordered by how many people each change affects, and how visible it is.

1. Smoother playback: a real vsync video clock

This is the big one. The Ugoos AM6B+ has simply never played video this cleanly. Until T4 there was no working display-synced clock at all: the VideoSync thread was stubbed out, so Kodi ran free and hoped the frames landed. Now VideoSyncAML locks onto the kernel's real HDMI vsync (FBIO_WAITFORVSYNC_64), the reference-clock thread actually runs, and all the vblank math stays in double precision, so the legacy fallback no longer rounds to whole milliseconds.

You can see it right away. Pacing is rock-steady, slow pans stop stuttering, and the judder that used to creep into 24p is gone. It rides through a mid-playback mode or fps switch without a hitch, and it never tries to "catch up" after a kernel-timestamp blackout. For the rare sink that doesn't get along with it, a CoreELEC toggle (Settings/System) with an opt-in fallback to legacy timing lets you drop right back.

One thing to do for the full benefit: if you run plugin.video.themoviedb.helper or script.embuary.helper, switch to our variants from the p3i addon repository. The stock versions run heavy background work (SQLite VACUUMs, fanart grabbing) that can still cause intermittent stutter during playback; our forks hold that work off while a video is playing.

2. Reboot / shutdown recovers itself

A restart can still stall now and then, but it no longer leaves you staring at a black box that only a power pull will fix. If something wedges, the watchdog forces a reboot and the box comes back on its own.

  • The shutdown/reboot watchdog is armed again (meson_wdt stays alive through reboot; systemd RuntimeWatchdogSec), so a kernel hang during restart self-recovers within the watchdog timeout instead of wedging for good.
  • HPD events are suppressed during reboot and TMDS PHY handling was corrected, which fixes a shutdown deadlock.
  • The intermittent reboot hang after screensaver wake (a connman/systemd ordering problem) is mitigated.
  • A shutdown watchdog inside Kodi force-exits if Stop() deadlocks, and Python addon stop/terminate timeouts are now configurable in advancedsettings.xml.
  • The CoreELEC Settings addon now wraps every synchronous D-Bus / JSON-RPC call in a timeout (the bluez/connman probes run in timeout-protected threads), so a stuck service can't freeze the Settings UI or delay a reboot. Bluetooth also stops overwriting your audio-output choice at startup.

3. A new default skin

The build now ships and defaults to skin.p3i.estuary, vlix's Estuary variant, packed from source at build time. Stock skin.estuary stays installed as a fallback, so nothing breaks if you switch back.

Its standout feature is a comprehensive Player Process Info overlay. Where stock Estuary shows only a few codec lines, vlix's lays the whole playback picture out in one place: the video and audio decoder, the deinterlace method, the Amlogic pixel format and VS10 mode, the source HDR type, and a full Dolby Vision metadata readout (profile and level, CM/metadata version, L1 min/avg/max nits and PQ, L5 active-area offsets, L6 MaxCLL/MaxFALL, and source min/max luminance), plus live video/audio queue and cache levels, bitrate, and PVR signal stats. If you want to see exactly what the DV/HDR pipeline is doing on a given title, this is the place.

4. Interlaced, MBAFF and framerate fixes

A big cluster of fixes for content that used to play at the wrong speed or drift out of sync:

  • H.264 MBAFF 1080i no longer plays at the wrong framerate.
  • 1080i25 no longer runs at 100fps (a double-doubled fpsrate).
  • Hardware-confirmed interlaced content is no longer overridden by a wrong "progressive" guess, and 29.97/25fps progressive is no longer mistaken for interlaced.
  • Amlogic deinterlace latency is compensated, which tightens A/V sync on interlaced material.
  • Fixed the audio desync and passthrough stutter at the start of x264 B-pyramid playback.

5. CoreELEC fast (keyframe-accurate) seek

A new fast seek toggle (Settings/System/CoreELEC), on by default, snaps to keyframes for near-instant seeking. A startup-seek regression it introduced (dropped resume seeks) is fixed in the same release, so resume-from-position is reliable.

6. Lower RAM use

  • Lower RAM use, no more slow memory creep. glibc's secondary arenas are capped on ARM (MALLOC_ARENA_MAX=8 plus trim), which stops the heap fragmentation that let memory use grow over long or heavy sessions. You can override these caps per box in /storage/.config/kodi.conf.
  • A new zram compressed swap is on by default at 1 GiB. Because zram compresses roughly 3:1 in RAM, that gigabyte of swap costs only about a third of a gigabyte of physical RAM when full, so it stretches the box's usable memory by close to a gigabyte under pressure instead of stalling or OOM-killing. Resize or disable it in /storage/.config/zram.conf. vm.min_free_kbytes is also raised to 32 MB for more headroom.

7. The p3i addon repository (repository.p3i)

T4 pre-installs our own addon repo, served at p3irepo.pm4k.eu. Through it we now ship:

  • service.p3i.sb and service.p3i.override, our two opt-in helper addons (detailed under Per-folder overrides and seamless branching below).
  • inputstream.ffmpegdirect 22.2.5.1 (Piers), built against FFmpeg 8.1.
  • inputstream.adaptive 21.5.18-p3i.1.2: a CBCS backport so HLS SAMPLE-AES (cbcs) plus ClearKey plays on Kodi 21.3.
  • plugin.video.themoviedb.helper 6.15.6-p3i.1: skips the SQLite VACUUM while a player is active, and restores the broken vacuum/delete interval guards.
  • script.embuary.helper 2.0.8-p3i.1 / 2.0.9-p3i.1: skips the background fanart grabber during playback to stop microstutter.

8. DV/HDR presets and a 12-bit Deep Color pipeline

  • New DV/HDR pipeline presets: a TV preset that picks the DV type from your display's actual EDID capability, and a Samsung / no-DV preset (HDR10 4:2:2 12-bit). The Player-Led vs Display-LED gating was cleaned up throughout, so settings show and hide sensibly.
  • A single 12-bit Deep Color pipeline toggle (on by default; it pins 4:2:2 and forces 12-bit) replaces the old standalone dither setting. It holds the whole pipeline at 12-bit and avoids the 12-bit → 10-bit → 12-bit truncation round-trip, so precision is preserved instead of thrown away and rebuilt. How visible that is depends on the content. The matching kernel param was renamed xbmc_dv_dither → xbmc_dv_deep_color.
  • "Auto" no longer forces 4:4:4, and now also covers HDR10-only sinks.

9. Dolby Vision: automatic L5 active-area detection

A Dolby Vision title carries L5 metadata that marks its active area: where the real picture sits inside any letterboxing. A lot of content ships with that metadata missing or wrong, and the DV pipeline then works off the bad numbers. T4 can measure the true active area itself by scanning frame borders with FFmpeg, and use that in place of the faulty L5. The detector copes with dark scenes, pillarboxing, pre-cropped frames and multi-stream Profile-7 remuxes, decodes only keyframes, bails out early once it reaches consensus, and exposes its state to skins.

It is off by default, because the border scan reads extra data from the file, which can be heavy over a network share (SMB) or on slow storage. When it is on, the scan's I/O throttle is cache-aware and on by default: it waits for the playback buffer before each seek and aborts a long read if the buffer goes critical, so detection no longer stalls playback on slow USB. You can also drive L5 per-folder through the new service.p3i.override addon, including a fully manual override that flows all the way to the TV. Two caveats: it assumes a single active area for the whole title, so it can't handle mixed-aspect-ratio content such as IMAX Enhanced (where the framing changes from scene to scene); and it only works while the black bars are still part of the video frame, since there is nothing to scan once a title has been cropped to its active area.

10. Dolby Vision: subtitle enhancements

On letterboxed Dolby Vision content, subtitles can land down in the black bars, where some displays push them off-screen or crop them. The "Restrict subtitles to DV active area" option was in the menu before but did nothing (the code path was hardcoded off through T3b); T4 makes it actually work and rebuilds it properly, so with it on, subtitles sit on the real picture.

It covers both text and image-based subtitles: text margins are scaled to the active-area height, and PGS/VobSub overlays are clamped into the active area with proportional padding and font-scale compensation. It tracks the active area per frame, handles top-aligned subtitles, and honors your own subtitle position and margin. The active area comes from the title's L5, or from the detector above when that is missing or wrong.

There's also a complementary option, "Set L5 to 0 for subtitles". With it enabled, the build zeroes the L5 active-area signal (instead of moving the subtitle) so the TV shows the full frame and the subtitle stays visible. You pick the policy: off, only while a subtitle track is active, or, new in T4, only while subtitles are genuinely on screen. That last mode is the smart one: it tracks actual on-screen subtitle presence per frame, instead of zeroing L5 for the whole playback just because a track is enabled, and returns to the source L5 the moment the subtitle clears. It also skips the flip when text subs already clear the bars, and for image-based (PGS) subs only signals when they actually extend outside the active area. If you've enabled "Restrict subtitles to DV active area" above, it's best to leave this one off: the two are alternative ways to solve the same problem (one moves the subtitle onto the picture, the other shows the whole frame), so you only want one of them active at a time. All of these L5 options now live in one tidied, nested menu under a single parent toggle, so you can leave the whole thing off if you prefer.

11. Dolby Vision: projector SDR↔HDR flip fix

On a direct-to-projector setup with auto dynamic-range, 4K HEVC/DV titles could flip between SDR and HDR, because the HDR/VSIF was configured at the GUI resolution before the switch to 2160p. T4 adds an opt-in setting to re-assert the VS10/HDR output after the mode switch (it covers both HDR10 and IPT/DoVi output, with a loop guard). It is the in-build version of the manual VS10 mode-toggle people used as a workaround.

12. HDR10+ black-screen fix

The intermittent black screen some TVs throw (e.g. the TCL 646) during an HDMI mode switch is fixed by holding the HDR10+ VSIF across the switch (a new kernel hdr10plus_vsif_hold parameter) and releasing it once the mode settles.

13. Subtitles

  • libass updated to master, with a new ASS-override setting.
  • Heavy anime typesetting that used to drop video to ~1fps is fixed by a static-overlay render cache that skips re-rendering signs that haven't changed; animated events still render every frame.
  • Oversized glyph atlases are paged across multiple GLES textures, which fixes the white blocks on very large typesetting.
  • Linear-light premultiplied alpha for ASS glyphs and bitmap overlays, plus a gray-fringe fix and zoom-dependent filtering for bitmap subs.
  • Image-based subtitle scaling (resize and position PGS/VobSub to taste), continuing the PGS colour/tonemap work from T3a.

14. Audio

  • New option to transcode to EAC3 when EAC3 passthrough is on (with sink validation).
  • New option to ignore stream-carried downmix metadata.
  • The volume step cap is raised to 100 (was 90) for finer control.
  • Fixed downmix normalization for integer source formats, and the surround mix level from codec metadata is now passed to the resampler.
  • Audio setting labels use consistent AC3 / EAC3 naming (no more inconsistent hyphenation).
  • (Kernel) Fixed the TrueHD → 2-channel PCM mute on the SPDIF/sysdefault path.

15. Live TV

  • A/V sync on passthrough live streams now uses the audio clock and skips SpeedAdjust.
  • Fixed the decoded-audio mute on live streams.
  • Fixed the long black screen on a live-TV channel change while DV mode is on.

16. Dolby Vision: HDR10+ → DV P8.1 conversion and CMv4.0

  • CMv4.0 dynamic metadata is now appended for native DV content through the libdovi API (bit-precise), replacing the old bitstream surgery.
  • HDR10+ → DV P8.1 conversion is restored and improved (CMv4.0 blocks included, via the dovi_generate_from_json path), with source-luminance clamping ported across for proper Player-Led dynamic dimming.
  • Fixed the purple playback and exit stall on a DV → HDR10 transition.

17. Dolby Vision: multi-video-track files

Some Dolby Vision files carry more than one independent video track, for example a colour grade alongside a black-and-white grade (both Profile 5). T4 fixes these on two fronts.

First, Kodi now recognises those extra tracks as real, selectable video streams instead of folding them into the base layer as if they were enhancement layers, so you can actually switch to and play the second stream in the first place. Second, it honors the container's default-track flag, so the grade the file marks as default is the one that plays, instead of always landing on the last track.

18. New skin infolabel: Dolby Vision track type

For skinners and the curious, a new infolabel reports during playback whether a DV title is dual-track (DT-DL) or single-track (ST-DL).

19. 3D / stereoscopic

  • FSBS / FTAB filename detection (alongside HSBS/HTAB), with correct per-eye DAR for filename-detected and MKV stereo files under FFmpeg 8.
  • Reverted the earlier over-correcting viewport-halving changes; stereo aspect is handled correctly on the Amlogic video plane.

20. Storage & USB

  • UAS (USB Attached SCSI) opt-in: a new toggle under Hardware → HDD (CoreELEC Settings addon) enables an out-of-tree uas.ko (blacklisted by default), with a per-device blacklist; the quirks table is backported from v6.6.
  • The udevil disk mounter no longer overwrites mount.ntfs (it now builds from our pannal/udevil fork).

21. Per-folder overrides and seamless branching

Two small helper addons ship in the repo for people who want finer control. Both are opt-in and off unless you set them up.

  • service.p3i.override reads a per-folder override.ini and applies Kodi setting overrides for whatever plays out of that folder, with INI sections, fnmatch globs and a one-parent-folder walk. It also carries the live L5 active-area override that flows all the way to the TV. override.ini reference.
  • service.p3i.sb flips CoreELEC's LAV filter into its seamless-branching mode for titles that need it, so the audio stops dropping, and restores it afterwards. It matches a curated IMDb/TMDB list, or you force it per folder or per file with an SB/SB.txt marker. settings & marker reference.

22. Under the hood: FFmpeg 8.1

The whole stack moves to FFmpeg 8.1 (Kodi depends, the CoreELEC build, and the MVC patch updated to upstream). It underpins the 3D, DV and subtitle work above.


Known issues

Denon / Marantz AVRs: black screen or "no signal" on HDMI mode switches

This is not new in T4, and we did not introduce it. It happens on stock (vanilla) CoreELEC too, not just our builds, and goes back well before T4. It is a long-standing AVR-side issue, not a p3i or T4 regression.

On some setups with a Denon or Marantz AVR between the box and the TV, the TV can drop to black or "no signal" around an HDMI mode or format change: a title starting, a resolution or refresh switch, or playback entering or leaving Dolby Vision. We have not been able to pin down exactly what sets it off; it may be any mode switch. It might take one start or a handful before it happens, and the only reliable recovery is to power-cycle the AVR (sometimes the TV too).

We chased this hard during the T4 cycle, and the conclusion is that it is AVR-side, not the box. In every captured failure the box was still putting a valid signal on the wire (correct timing, valid AVR EDID), but the AVR stopped forwarding it to the TV. The same box plays the same content cleanly straight into a TV, and through other AVRs and soundbars. We saw it across Dolby Vision, LLDV and plain SDR/HDR, with and without a resolution change, so it tracks the HDMI re-lock in general rather than any one format.

Because the trigger is downstream of the box, no setting in the build fixes it. (The experimental DV mode-switch signalling we tried did not help and was removed.) What does help is on the AVR side:

  • Set the AVR's HDMI input Signal Format (the "4K/8K Signal Format" option) to Enhanced. This is the classic Denon/Marantz 4K-black fix.
  • Update the AVR firmware.
  • To test or work around it, bypass the AVR: run the box straight into the TV and take the audio back over eARC.
VS10 SDR can drop video on some live-TV streams

On some live-TV sources (IPTV Simple Client / inputstream.adaptive and Tvheadend), VS10 SDR conversion sometimes fails to put out video when a stream starts. You get a black screen while the GUI still works: you can open the OSD and the menus, there is just no picture. This is not the HDMI/AVR blackout described above.

Disabling VS10 SDR avoids it entirely. It looks like a timing issue at live-TV start; we are still looking into it, and a fix may land in a later release.


Changelog

The complete per-component commit list. Click any section to expand.

🎬 xbmc / Kodi

Video sync & reference clock

  • VideoSyncAML: drive clock from real vsync (FBIO_WAITFORVSYNC_64), fix fallback precision
  • VideoReferenceClock: re-enable thread so VideoSyncAML actually runs
  • VideoReferenceClock: keep synthesized vblank interval in double precision; extend to TimeOfNextVblank
  • VideoSyncAML: refresh fps each loop, recover from mid-Run mode switches; refresh m_RefreshRate on mid-Run fps change
  • VideoSyncAML: don't catch up across kernel-ts blackouts
  • VideoSync: opt-in stall fallback to legacy timing, nested under "use display as clock"
  • Settings: gate the vsync reference clock behind a CoreELEC toggle
  • RenderManager: handle fps-only change without full reconfigure
  • VideoRefClock: diagnostic logs for videodebug-overlay frame skipping

Interlaced / MBAFF / framerate

  • VP: fix wrong framerate for H.264 MBAFF interlaced content
  • VP: fix video_rate exceptions for interlaced and H.264 content on Amlogic
  • VP: compensate Amlogic deinterlace pipeline latency for interlaced content
  • VP: fix 1080i25 playing at 100fps when fpsrate is double-doubled
  • VP: extend the over-doubled framerate fix from H.264 to all interlaced codecs
  • VP: block CalcFrameRate from halving fps for demuxer-flagged interlaced
  • VP: don't override hardware-confirmed interlace with progressive fallback
  • VP: require positive progressive confirmation before an interlace fallback
  • VP: block progressive fallback entirely for demuxer-flagged interlaced
  • VP: don't let a transient DI "progressive" clear the demuxer interlace flag
  • fix 29.97/25fps progressive wrongly treated as interlaced
  • VP: fix audio desync + passthrough stutter at start of x264 B-pyramid playback
  • VP: scope the stream-start reorder-artefact gate to H.264 video

Live TV

  • fix live TV passthrough A/V sync: use audio clock, skip SpeedAdjust
  • fix live TV decoded-audio mute: extend sync fix to all live streams
  • DV: fix long black screen on live-TV channel change with DV mode ON

Seeking

  • VP: add CoreELEC fast (keyframe-accurate) seek toggle
  • VP: don't drop deliberate resume seeks during startup (fastseek regression)

Dolby Vision — L5 active-area detection, throttle & subtitle restriction

  • DV: add L5 active-area detection via FFmpeg border scan, exposed to skins (incl. Inactive/Running states)
  • DV: detection robustness — majority consensus, symmetric L/R pillarbox check, dynamic T/B consensus + corroboration
  • DV: detection robustness — adaptive/contrast-based dark-frame handling, keyframe-only decode, early exit on consensus
  • DV: detection robustness — pre-cropped handling, minimum-usable-sample thresholds, multi-stream Profile-7 decode loop
  • DV: add a cancel flag and optional I/O throttle for active-area detection
  • DV: make the active-area I/O throttle cache-aware (wait for the playback buffer before each seek)
  • DV: default the active-area I/O throttle to on
  • DV: abort an active-area scan mid-read when the playback buffer goes critical
  • DV: disable L5 detection by default (with an SMB warning); gate on native DV, skip P9
  • DV: skip detection for BDMV/DVD/ISO and MPEG-TS / stalled decoders; abort early when source L5 appears
  • DV: clamp image-based subtitles to the L5 active area; honor user position/margin
  • DV: per-frame tracking, top-alignment handling, proportional padding and font-scale compensation for L5 subs
  • DV: restructure L5 settings with a parent toggle and a subtitle-signal mode
  • DV: per-folder L5 active-area override channel; live re-push of L5 sysfs flags on setting change
  • DV: switch L5 override to the xbmc_override_l5_* / xbmc_force_l5_override namespace; runtime-promote visibility; short-circuit detect when set
  • DV: reset L5 state on playback stop; reduce per-frame overhead in L5/OSD handling
  • DV: cache the PM4K seek-dialog ID and handle its invisible overlay for L5 OSD detection

Dolby Vision — output re-assert after mode switch

  • DV: opt-in re-assert of VS10/HDR output after resolution switch; extend to DoVi (IPT) output + avoid resolution re-trigger loop
  • DV: open VS10 on auto-played next item

Dolby Vision — display-null wedge & toggle flags

  • DV: never re-assert /sys/class/display/mode=null in round-trip sites
  • DV: clear FLAG_TOGGLE_FRAME in aml_dv_off; force-clear after toggle-wait timeout
  • DV: clear HDR10/VSVDB InfoFrame injection flags on dv_off
  • DV: extensive state-dump / link-state / vsync-stall diagnostic logging at transitions

Dolby Vision — CMv4.0 / HDR10+ conversion (ported from avdvplus R9 / CPM)

  • DV: add CMv4.0 dynamic append for native DV content (bit-precise via libdovi cmv29_payload_end_bit)
  • DV: move CMv4.0 append to the libdovi API and remove the bitstream surgery
  • DV: cache display params for the append decision; dynamic CMv version string; gate on Display-LED; skip only for CMv2.9 4+ L2 trims
  • DV: use libdovi dovi_generate_from_json for HDR10+ → P8.1, including CMv4.0 metadata in the RPU
  • DV: restore the HDR10+ → P8.1 conversion sysfs write; drop xbmc_dv_hdr10plus_conv to match avdvplus
  • DV: fix purple playback and exit stall on a DV → HDR10 transition

Dolby Vision — multi-stream / SW decode / misc

  • DV: honor the container default flag for multi-video-stream DV files
  • DV: distinguish independent DV streams from dependency layers
  • DV: manage the DV pipeline for SW-decoded content via the GLES renderer
  • DV: flush the decoder to extract buffered frames during detection; fix detection stuck on "Running" for BDMV/ISO
  • DV: inject a PTS_US64 marker into the DV FEL RPU (DT-DL only)
  • DV: force VPP reconfiguration in aml_dv_off; sync EGL creation with DV pipeline restoration
  • DV: skip the redundant off/on cycle when already in IPT
  • DV: fix the HDR10 OSD peak-brightness slider not applying

HDR10+

  • HDR10+: hold VSIF during mode switches to fix intermittent black screen; fix VSIF hold sysfs path (hdmitx20)

Subtitles

  • Subtitles: update libass to master, add ASS-override setting
  • Subtitles: skip ass_render_frame for unchanged static overlays
  • Subtitles: split oversized libass glyph atlas across GLES textures
  • Subtitles: linear-light PMA for ASS glyph rendering and bitmap overlays
  • Subtitles: fix gray fringe on bitmap subs, add zoom-dependent filtering

Audio

  • AE: transcode to EAC3 when eac3passthrough is enabled, with sink validation (+ German translation)
  • AE: add setting to ignore stream-carried downmix metadata
  • AE: fix downmix normalization not applied for integer source formats; pass surround mix level from codec metadata to resampler
  • Settings: raise audiooutput.volumesteps cap to 100 (was 90)
  • Audio: normalise AC3/EAC3 naming across the passthrough and dialnorm setting strings

12-bit pipeline / DV+HDR settings & presets

  • Settings: add a 12-bit Deep Color pipeline toggle (pins 4:2:2 + forces 12-bit), drop the standalone dither; default VS10 12-bit dither off
  • Settings: add DV/HDR pipeline presets — TV preset (DV type by actual EDID capability) and Samsung/no-DV preset (HDR10 422 12-bit, force.modes), scope prefer.12bit to Display-LED
  • Settings: "Auto" extended to HDR10-only sinks, never auto-picks 4:4:4
  • DV: decouple VPP 12-bit preservation from the wire-EDID gate for tunnel modes; make the Deep Color EDID gate colour-space-aware
  • Settings: clarify 12-bit help covers 8/10-bit content too; OSD base-brightness applies to text subtitles
  • DolbyVision: C++ options filler for the VSVDB colour-space setting (@Sebastiiii)

3D / stereoscopic

  • 3D filename detection: match FSBS/FTAB in addition to HSBS/HTAB; apply per-eye DAR for filename-detected stereo
  • DVDDemuxFFmpeg: fix per-eye DAR for stereo MKV under FFmpeg 8
  • BaseRenderer: drop the SBS per-eye ratio divide that over-corrected FSBS
  • 3D: force window rebuild on quit-stereo-on-stop so the kernel flag clears
  • Reverted the earlier always-halve-viewport / video-plane aspect changes

Skin

  • skin: default to skin.p3i.estuary (by vlix; stock skin.estuary kept in the manifest as a fallback)

Skin infolabels

  • PlayerProcessInfo: expose HDMI wire format as a skin infolabel (prettified); read it from /config not /attr
  • PlayerProcessInfo: expose DV DT-DL vs ST-DL as a skin infolabel

Stability

  • Add a shutdown watchdog to force-exit if Stop() deadlocks
  • VP: stop playback on broken-source stalls and seek wedges
  • AMLCodec: abort blocked AddData write loop on flush; minimal vmap for non-interlace DV
  • Make Python addon stop/terminate timeouts configurable via advancedsettings.xml
  • AML: skip refresh-change delay when the HDMI mode isn't actually changing
  • guilib: gate 2-loop label-scroll cap on smartredraw
  • VP: re-read LAV mode setting on each passthrough codec Open
  • VP: gate PTS-offset reset on external subtitle presence

Build / addons

  • [depends][target] Bump to FFmpeg 8.1 (@U3knOwn)
  • Use ffmpeg to read more tags from .mka files (@the-black-eagle)
  • addons: trust repository.p3i and service.p3i.sb in the default manifest
🐧 Kernel (linux-amlogic, amlogic-4.9-20)
  • osd_fb: drop the VD1 gate from FBIO_WAITFORVSYNC_64 (real vsync for the new video clock)
  • hdmitx20: add hdr10plus_vsif_hold to suppress VSIF during mode switches; fix it blocking VSIF cleanup on stop; fix VS10 non-IPT config reporting a stale DV EOTF
  • amvecm: gate per-vsync PQ work on CSC_FLAG_BYPASS_PQ for native DV
  • amdolby_vision: L5 active-area injection from Kodi-detected values
  • amdolby_vision: separate xbmc_override_l5_* from xbmc_detected_l5_*; xbmc_force_l5_override (truly unconditional) for service.p3i.override
  • amdolby_vision: respect OSD/subtitle gating for detected L5 injection; separate sysfs for L5 subtitle suppression
  • amdolby_vision: rename xbmc_dv_dither → xbmc_dv_deep_color
  • amdolby_vision: port VSVDB source-luminance clamping + Player-Led metadata pre-processing from avdvplus
  • amdolby_vision: allow source_meta_copy for Player-Led HDR10+ conversion; clamp max mastering luminance to 9997 nits
  • amdolby_vision: filter variable-length L8 blocks; remove the xbmc_dv_hdr10plus_conv dependency; remove duplicate pre-control_path blocks; per-frame metadata debug
  • hdmitx: don't force an I2S-8ch source for 2-ch PCM in aout notify (fixes TrueHD → 2-ch PCM mute)
  • hdmitx: suppress HPD events during reboot; only disable TMDS PHY on halt/poweroff (then reverted to avoid a deadlock)
  • meson_wdt: keep the watchdog armed during reboot to recover from kernel hangs; cancel the hrtimer auto-ping when userspace takes over
  • auge: enable audio DDR arbiter and HBR QoS tuning
  • usb-audio: add HyperX Cloud II Wireless quirk
  • DV: hw_dump debug command + gate dump behind debug_dolby
📦 CoreELEC (distro & packages)
  • skin.p3i.estuary: bundle vlix's skin as the default, packed from source at build time (TexturePacker, with CoreELEC power + calibration icons overlaid)
  • FFmpeg 8.1: update FFmpeg and dependencies (@U3knOwn / Jamal); update the MVC patch to upstream; enable the EAC3 encoder
  • libdovi: upgrade to 3.3.2 → 3.3.3 (drop the cmv29 patch); add cmv29_payload_end_bit for bit-precise CMv4.0; rebuild prebuilt with dovi_generate_from_json
  • libass: update to master (post-0.17.4)
  • Memory: kodi capped glibc arenas on ARM (MALLOC_ARENA_MAX=8) for heavy-Python RAM; busybox bump vm.min_free_kbytes to 32 MB
  • zram: new compressed-swap package, fix the systemd ordering cycle, user override via /storage/.config/zram.conf
  • UAS: out-of-tree uas.ko package + boot/hot-plug rebind plumbing; per-device blacklist via /storage/.config/uas-blacklist.txt; +5 unusual_uas.h entries backported from v6.6
  • udevil: source from pannal/udevil (a restored alpharde fork over IgnorantGuru 0.4.4); never overwrite mount.ntfs
  • Reboot/shutdown: enable shutdown/reboot watchdog via system.conf.d drop-in; enable RuntimeWatchdogSec; mitigate the intermittent reboot hang after screensaver wake (connman); move DefaultTimeoutStopSec to a separate drop-in
  • p3i repo: add repository.p3i fetch + inputstream.ffmpegdirect (Piers) override; pre-install service.p3i.sb; backport CBCS for HLS+ClearKey in inputstream.adaptive
  • RTL8152-aml bump to v2.21.4-1; rust toolchain 1.93.1 + cargo-c 0.10.22; avahi autogen fix and wireguard-linux-compat checksum refresh (@SamuriHL)
⚙️ CoreELEC Settings Addon
  • Add a UAS opt-in toggle under Hardware → HDD; InfoText documents the per-device blacklist file
  • Bluetooth: stop overwriting the user's audio selection at startup; initialize the module when BT is enabled at runtime; skip start_service and audio-device enumeration when BT is disabled
  • Add timeouts to all synchronous D-Bus and JSON-RPC calls; move bluez/connman checks inside timeout-protected threads; add a 2s timeout to the get_audio_devices call
🧩 Addon repository (`repository.p3i`)
  • New pre-installed repository.p3i (served at p3irepo.pm4k.eu), bundling override addon zips + regenerated manifests
  • inputstream.ffmpegdirect 22.2.5.1 (Piers, FFmpeg 8.1)
  • inputstream.adaptive 21.5.18-p3i.1.2 — CBCS backport (HLS SAMPLE-AES + ClearKey on Kodi 21.3)
  • service.p3i.sb 0.1.0 → 0.1.6 — seamless-branching LAV auto-switcher: SB/SB.txt marker (per-filename/glob), prefix-match codec gate, toast on switch. SETTINGS.md
  • service.p3i.override 0.1.0 → 0.1.8 — per-folder override.ini engine; subtitle-settings catalog; one-parent-folder walk; L5 override flows to TV (0,0,0,0 valid). SETTINGS.md
  • plugin.video.themoviedb.helper 6.15.6-p3i.1 — skip SQLite VACUUM while a player is active; restore vacuum/delete interval guards
  • script.embuary.helper 2.0.8-p3i.1 / 2.0.9-p3i.1 — skip the background fanart grabber during playback (microstutter fix)
📜 Full commit history (all repos, T3b → T4)

xbmc / Kodi (212 commits)

  • c517968d46 DV: bypass VS10 for SDR BT.2020 content to preserve gamut
  • 5b90f408e8 Settings: improve help text for CoreELEC/DV settings
  • c10a6bbf73 Settings: Fix description for Reduce color banding (VS10) not representing the default
  • 3d5e68c206 Revert MAT packer Reset on seek for standard passthrough path
  • 66041244fa Settings: Default refresh rate change delay to 2.5s
  • 45b589f6af HDR10+: hold VSIF during mode switches to fix intermittent black screen
  • adaebdb09d DV: re-enable L5 active area subtitle restriction with stream-level fix
  • ba13ba2231 DV: fix L5 active area subtitle distortion — use margins instead of rect
  • 84203e490b HDR10+: fix VSIF hold sysfs path (hdmitx20, not amhdmitx)
  • e19262996a DV: track actual subtitle presence for L5 suppression
  • 2781436f7d DV: fix L5 active area subtitle distortion — use position offset
  • f8d45730f1 DV: fix HDR10 OSD peak brightness slider not applying
  • 80c54338ba DV: fix long black screen on live TV channel change with DV mode ON
  • 7cf78bbbc8 DV: disable style margins when L5 active area overrides subtitle position
  • 97fdafd950 DV: add option to apply user subtitle position with L5 active area
  • 01083915bf DV: fix L5 active area — track per-frame, handle top alignment, clamp
  • 12a6237355 DV: handle PM4K invisible overlay for L5 OSD detection
  • ebb236463b Make Python addon stop/terminate timeouts configurable via advancedsettings.xml
  • 4897023d03 DV: cache PM4K seek dialog ID for L5 OSD detection
  • 4b4e7a021b [depends][target] Bump to ffmpeg 8.1 — @U3knOwn
  • 3e92d1e4b0 DV: skip redundant sysfs writes for L5 subtitle and OSD flags
  • f617d90237 DV: sync EGL creation with DV pipeline restoration (minimal fix)
  • c6da3465b9 DV: fix L5 active area restriction for top-aligned subtitles
  • c66ebf5afb DV: reduce per-frame overhead in L5 and OSD handling
  • b1983d025b DV: fix subtitle alignment corruption in L5 active area handling
  • ac5bd9af38 DV: apply L5 forceBottomAlign override per-frame in RenderImage
  • e3c3d99675 DV: use INSIDE_ACTIVE_AREA margins for L5 subtitle restriction
  • 13e870354e DV: compensate font scale for L5 active area margins
  • a59da9dbf5 DV: restore HDR10+ to DV P8.1 conversion sysfs write
  • 9cfcdf7fd2 DV: include CMv4.0 metadata in HDR10+ to P8.1 RPU
  • 2feaebb522 DV: honor user position and margin in L5 active area when enabled
  • f35ae5749d DV: disable xbmc_dv_hdr10plus_conv sysfs write, match avdvplus
  • 919fd5f520 DV: hide L5 subtitle restriction settings in Player-Led mode
  • debf11c5e0 DV: clamp image-based subtitles to L5 active area
  • aa0c7db945 DV: use style MarginV instead of renderer margins for L5 restriction
  • 3130d5e832 DV: update restrict setting description for PGS subtitle support
  • 7b4eb92c8f DV: signal image subtitle presence for L5 suppression
  • c103d3cc66 DV: restructure L5 settings with parent toggle and subtitle signal mode
  • 6afa3d3b98 Add shutdown watchdog to force-exit if Stop() deadlocks
  • 5f4c01c60b DV: gate CreateNewWindow IPT restore on playback-active flag
  • 3de31d1da4 DV: update restrict setting description for PGS subtitle support
  • a84242cee9 Use ffmpeg to read more tags from mka files — @the-black-eagle
  • 5f0e71b25d DV: scale text subtitle margin relative to active area height
  • 28ca0372af DV: add proportional padding when clamping image subs to L5 active area
  • 8be699db6d DV: reset L5 state on playback stop
  • 8409175d36 DV: add CMv4.0 dynamic append for native DV content
  • f1a73e7667 DV: fix CMv4.0 setting description — applies to all profiles
  • 04e2493029 DV: cache display params for CMv4.0 append decision
  • b2ca587ed0 DV: fix CMv4.0 Auto mode always appending on first frame
  • 239a35c461 DV: skip redundant off/on cycle in aml_dv_start when already in IPT
  • 5b72b8c5e6 DV: update CMv version string dynamically, not just on first frame
  • ee47eb3333 DV: prefix appended CMv4.0 version string with "V"
  • 5b4660a797 RenderManager: handle fps-only change without full reconfigure
  • d2f8038cec AMLCodec: abort blocked AddData write loop on flush
  • 9ef5f7cb21 Subtitles: fix gray fringe on bitmap subs and add zoom-dependent filtering
  • 4d88803c81 DV: move synchronous IPT restore before early return in CreateNewWindow
  • ea14c24c9a DV: skip display_auto_now in aml_dv_off during DV_MODE_ON IPT restore
  • c8292d7ae7 DV: trigger display mode re-write after IPT restore in early-return path
  • f03b29c114 DV: force VPP reconfiguration in aml_dv_off via display mode re-write
  • 181f808b3c Subtitles: update libass to master, add ASS override setting
  • cbb53869d1 DV: add L5 active area detection via FFmpeg border scan
  • 65e98e71c8 DV: ignore unreliable L/R borders in active area detection
  • 4b9816a4a4 DV: fix double percent in active area detection log output
  • 370ae4c1a5 DV: use majority consensus for active area detection, not unanimity
  • b551f631db DV: fix detection not running when g_application.CurrentFile() is empty
  • e27ede46b7 DV: add diagnostic logging for active area detection start path
  • 1bb164993e DV: restrict subtitles for pre-cropped frames via display letterbox
  • af9c4f6531 DV: fix off-by-one in AR snap border computation
  • 3adbb9cad5 DV: retry dark frames in active area detection
  • 01fcf25655 DV: improve active area detection robustness
  • 17885aac29 DV: add early exit and P7 FEL note to setting description
  • 66abcef550 DV: add diagnostic logging for detection codec/decode failures
  • a643c42eec DV: fix detection decode loop for multi-stream remuxes (Profile 7)
  • 1b8acf0704 DV: use symmetric fallback when one T/B border has consensus
  • 615bc17f34 DV: early exit detection when T/B consensus reached
  • f11adbfd1d DV: decode only keyframes for active area detection
  • 7667810c4c DV: use contrast-based frame skip instead of absolute brightness
  • e34ce1b730 DV: adaptive scan threshold for dark DV content
  • ecc039d1f1 DV: require symmetric L/R for pillarbox detection
  • a3ce4656f7 DV: dynamic T/B consensus threshold and corroboration
  • 9a871ec393 DV: skip CMv4.0 append only for CMv2.9 4+ L2 trims
  • 71902a2c13 DV: improve active area detection robustness and pre-cropped handling
  • a25e2afc4b DV: start active area sampling at 0% to catch fullscreen intros
  • 1fe1a20714 DV: require minimum usable samples for active area detection
  • 6a04c57a2e DV: tighten minimum usable sample threshold to 6/7
  • be6ece1e6f DV: fix variable AR check for frames with one-sided false bar reading
  • baa0374109 DV: expose active area detection state to skin
  • 7fee2bb82e AE: fix downmix normalization not applied for integer source formats
  • db2f410b8d AE: pass surround mix level from codec metadata to resampler
  • ecb3fbf89d AE: transcode to EAC3 when eac3passthrough is enabled, with sink validation
  • 75101244b2 AE: update German translation for EAC3 transcode setting
  • e113d1599b VP: fix wrong framerate for H.264 MBAFF interlaced content
  • 8babfb6474 DV: gate L5 active area detection on native DV content, skip P9
  • f4c3638daa VP: don't override hardware-confirmed interlace with progressive fallback
  • ad6ce814b8 VP: fix video_rate exceptions for interlaced and H.264 content on Amlogic
  • 21527d77dc VP: compensate Amlogic deinterlace pipeline latency for interlaced content
  • 6209e73cac DV: add cancel flag and optional I/O throttle for active area detection
  • b3affc3f65 DV: disable L5 detection by default, add SMB warning to description
  • cfcc98049e DV: add Inactive (5) and Running (6) detection states for skin
  • d89cd65a2d DV: use bit-precise CMv4.0 append via libdovi cmv29_payload_end_bit
  • 47996ba69f DV: log when I/O throttle is active for detection diagnostics
  • 90815a93e7 DV: make throttle setting a child of detect active area
  • b2eaca4a57 DV: abort active area scan early when source L5 appears
  • 329c8c8986 fix live TV passthrough A/V sync: use audio clock, skip SpeedAdjust
  • 06bfb4a486 DV: fix detection state stuck on Running for BDMV/ISO sources
  • 1b9218203e DV: use libdovi API for CMv4.0 append, remove bitstream surgery
  • 40322a45c0 DV: skip active area detection for BDMV/DVD disc sources
  • e4f0e572e8 VP: require positive progressive confirmation for interlace fallback
  • f18d3b3235 fix live TV decoded audio mute: extend sync fix to all live streams
  • f9fdaf2016 DV: use libdovi dovi_generate_from_json for HDR10+ to P8.1 conversion
  • f5dcf28fe5 DV: manage DV pipeline for SW-decoded content via GLES renderer
  • 46d126bfb4 DV: flush decoder to extract buffered frames during detection
  • fc3a874b45 fix 3D SBS/TAB/FP: always halve viewport in stereo modes
  • abef20093c fix 3D SBS/TAB aspect ratio on Amlogic hardware video plane
  • 554662bc00 fix 29.97/25fps progressive wrongly treated as interlaced
  • 1f73afeae2 VP: don't let transient DI progressive clear demuxer interlace flag
  • e00f1ff398 VP: block progressive fallback entirely for demuxer-flagged interlaced
  • 6d55dfb317 DolbyVision: Implement C++ options filler for VSVDB colour space setting — @Sebastiiii
  • 7d874c2d1c DVDDemuxFFmpeg: distinguish independent DV streams from dependency layers
  • b1bbad9ae5 VP: block CalcFrameRate from halving fps for demuxer-flagged interlaced
  • 709d043146 DV: skip L5 detection for MPEG-TS and stalled decoders
  • b9b7bb7cf7 DV: fix purple playback and exit stall on DV → HDR10 transition
  • 63ce9ad29e BitstreamConverter: inject PTS_US64 marker into DV FEL RPU (DT-DL only)
  • 39865d1a9d PlayerProcessInfo: expose DV DT-DL vs ST-DL as a skin infolabel
  • 4c77c613c4 Subtitles: premultiply alpha in linear light for bitmap overlays
  • 51bbacad82 Subtitles: linear-light PMA for ASS glyph rendering (GLES)
  • b2c7b77da2 Settings: clarify OSD base brightness applies to text-based subtitles
  • 2fb8794f5f Settings: default VS10 12-bit dither off; warn about TV detail enhancement
  • 9785411af4 guilib: gate 2-loop label scroll cap on smartredraw
  • 9f5daefcae Settings: add 12-bit Deep Color pipeline toggle, drop standalone dither
  • c358e769f7 Settings: add TV preset for DV/HDR pipeline
  • 3cdeed7700 Settings: gate L5 children on Display-LED and drop preset L5 auto-enable
  • 49cfc9ef62 DV: gate CMv4.0 append on Display-LED only
  • f2704cc630 Settings: TV preset picks DV type by actual EDID capability
  • d83899a39e Settings: scope preset prefer.12bit to Display-LED only
  • 61d8cd1a79 DV: note L5 reference video limitation in detect active area help
  • ce53ecea6d DV: gate VSVDB children re-show on DV group visibility
  • 08d047b3b0 Settings: enable force.modes in Samsung/Auto-no-DV preset branch
  • 293554adaa Settings: Samsung/no-DV preset uses HDR10 422 12-bit, not LLDV
  • 74116119c0 Settings: extend Auto for HDR10-only sinks, never auto-pick 4:4:4
  • d5f859ef92 Revert "fix 3D SBS/TAB aspect ratio on Amlogic hardware video plane"
  • a853ebcf8a Revert "fix 3D SBS/TAB/FP: always halve viewport in stereo modes"
  • 05964980ce PlayerProcessInfo: expose HDMI wire format as skin infolabel
  • d39150de49 DVDDemuxFFmpeg: fix per-eye DAR for stereo MKV under ffmpeg 8
  • 280a410eda PlayerProcessInfo: prettify HDMI wire format
  • 6886c379c5 BaseRenderer: drop SBS per-eye ratio divide that over-corrects FSBS
  • 8b090d7cde DV: skip L5 subtitle signal when text subs sit inside active area
  • f2d73e7488 DV: update L5 signal mode help for margin-aware text sub check
  • 7917f65cc4 DV: use calibrated subtitle baseline for L5 signal overlap check
  • c7dc3dc933 AE: add setting to ignore stream-carried downmix metadata
  • 0e8fb4145e Settings: clarify 12-bit pipeline help covers 8/10-bit content too
  • 355b979804 PlayerProcessInfo: read HDMI wire format from /config, not /attr
  • ca40d5adb2 DV: decouple VPP 12-bit preservation from wire EDID gate for tunnel modes
  • 50adf48985 VideoSyncAML: drive clock from real vsync, fix fallback precision
  • 3ee620b8dc VideoReferenceClock: re-enable thread so VideoSyncAML actually runs
  • cb67e3bf82 VideoReferenceClock: keep synthesized vblank interval in double precision
  • 74f408d677 Settings: gate vsync reference clock behind a CoreELEC toggle
  • 3007dc5e77 VideoReferenceClock: extend double-precision vblank interval to TimeOfNextVblank
  • f0356a5c42 VP: fix audio desync + passthrough stutter at start of x264 B-pyramid playback
  • 4d8527a40d VP: extend over-doubled framerate fix from H.264 to all interlaced codecs
  • 0767b6e5b0 VideoRefClock: diagnostic logs for videodebug-overlay frame skipping
  • 232c2d5e27 VideoSyncAML: refresh fps each loop, recover from mid-Run mode switches
  • b6eed0cbf5 VP: scope stream-start reorder artefact gate to H.264 video
  • 350120bc6d Settings: 12-bit Deep Color toggle pins 4:2:2 + forces 12bit over user CD
  • bd3f9ce8fa DV: make Deep Color EDID gate CS-aware to avoid broken signals
  • 926c5bd38c VideoSyncAML: don't catch up across kernel-ts blackouts
  • 22c97c995d VideoRefClock: refresh m_RefreshRate on mid-Run fps change
  • 56fbeac67f 3D filename detection: match FSBS/FTAB in addition to HSBS/HTAB
  • 1827af0e78 VideoPlayer: apply per-eye DAR for filename-detected stereo files
  • d0b24bb05d VP: add CoreELEC fast (keyframe-accurate) seek toggle
  • a66803e1c9 VP: fix 1080i25 playing at 100fps when fpsrate is double-doubled
  • e4901eb22d AML: skip refresh-change delay when HDMI mode isn't actually changing
  • 1f16c7e349 3D: force window rebuild on quit-stereo-on-stop so kernel flag clears
  • 59026563fd Settings: raise audiooutput.volumesteps cap to 100 (was 90)
  • 6cb119cd33 VP: stop playback on broken-source stalls and seek wedges
  • 5bdf3774ef addons: trust repository.p3i in default manifest
  • f983ec3dc2 addons: trust service.p3i.sb in default manifest
  • 72daca6f5a VP: re-read LAV mode setting on each passthrough codec Open
  • 8287eadb31 DV: live re-push of L5 sysfs flags on setting change
  • 5e7ac9ed6c DV: per-folder L5 active-area override channel
  • cdcc495b8b DV: short-circuit L5 active-area detect when override is set
  • da6cd5657f DV: allow empty default on L5 override setting
  • 82888ee8ff DV: runtime-promote L5 override visibility (unblock JSON-RPC writes)
  • cd2b837c85 DV: present L5 override to TV via xbmc_force_l5_override sysfs
  • c4f833a41f DV: stop detect before pushing L5 override sysfs values
  • 7732d11e37 DV: switch L5 override to xbmc_override_l5_* sysfs namespace
  • eaa7c5d3d7 DV: log full kernel + cached state at every DV transition
  • 7e8bd175e6 DV: extend state dump with InfoFrame/colorimetry params
  • 9c3eceb04e DV: clear HDR10/VSVDB InfoFrame injection flags on dv_off
  • 0de23bbd48 DV: log HDMI TX link state + add vsync-stall snapshot
  • 1cac9d582b DV: clear FLAG_TOGGLE_FRAME in aml_dv_off
  • 0594cd12e5 DV: force-clear FLAG_TOGGLE_FRAME after toggle wait timeout
  • 124051fbff DV: never re-assert /sys/class/display/mode=null in round-trip sites
  • a21b606a20 VideoPlayer: gate PTS-offset reset on external subtitle presence
  • 56e7abff2e AMLCodec: minimal vmap for non-interlace DV
  • ab954a287a DV: open VS10 on auto-played next item
  • 5456d4741e VideoSync: opt-in stall fallback to legacy timing
  • 635f2fbf86 VideoSync: nest fallback setting under usedisplayasclock
  • 96e2dfe8f7 Subtitles: skip ass_render_frame for unchanged static overlays
  • ec1bd7e98c Subtitles: split oversized libass glyph atlas across GLES textures
  • 2e31637b14 DV: opt-in re-assert of VS10/HDR output after resolution switch
  • b4f94bb271 DV: extend re-assert to DoVi (IPT) output + avoid resolution re-trigger loop
  • 5417d94c2c VP: don't drop deliberate resume seeks during startup (fastseek regression)
  • 961a1a730b DV: make active-area detect I/O throttle cache-aware
  • bed05a0cd9 Audio: normalise AC3/EAC3 naming in settings strings
  • 239fcde5a2 DV: default active-area detect I/O throttle to on
  • 04993770cb DV: abort active-area scan mid-read when playback buffer goes critical
  • e287260247 DV: honor container default flag for multi-video-stream DV files
  • 07ac8cd8b5 skin: default to skin.p3i.estuary

Kernel (linux-amlogic, 31 commits)

  • f539fe4842 hdmitx: add hdr10plus_vsif_hold parameter to suppress VSIF during mode switches
  • f178b75a87 hdmitx: fix VS10 non-IPT config sysfs reporting stale DV EOTF
  • 45cc1b453f hdmitx: fix hdr10plus_vsif_hold blocking VSIF cleanup on stop
  • bc1df3b935 meson_wdt: keep watchdog armed during reboot to recover from kernel hangs
  • e9643b1e2f meson_wdt: cancel hrtimer auto-ping when userspace takes over watchdog
  • d6204c84a7 amdolby_vision: clamp max mastering luminance to 9997 nits
  • dfc45f86e3 amdolby_vision: add Player-Led metadata pre-processing from avdvplus
  • e16c57dc55 amdolby_vision: remove duplicate pre-control_path blocks
  • f9bf2f463e hdmitx: suppress HPD events during reboot to prevent shutdown deadlock
  • e558f6748c hdmitx: only disable TMDS PHY on halt/poweroff, not reboot
  • 47e55465e4 amdolby_vision: add per-frame metadata debug output after control_path
  • cde900ed91 amdolby_vision: allow source_meta_copy for Player-Led HDR10+ conversion
  • 8447222bc4 Revert "hdmitx: only disable TMDS PHY on halt/poweroff, not reboot"
  • 94d6d7bc78 amdolby_vision: port VSVDB source luminance clamping from avdvplus
  • a7fa38397f amdolby_vision: remove xbmc_dv_hdr10plus_conv dependency, match avdvplus
  • cd35ee2342 DV: add separate sysfs for L5 subtitle suppression
  • fb4689e707 DV: filter variable-length L8 blocks in source_meta_copy
  • 5891351ce9 DV: cache provider name comparisons as booleans
  • ca4e854208 DV: add L5 active area injection from Kodi-detected values
  • d3782fec4d DV: respect OSD/subtitle gating for detected L5 injection
  • 15ae7010c6 DV: add hw_dump debug command for blackout diagnosis
  • 7e7eaf9646 DV: gate dump_buffer behind debug_dolby
  • 575f946a15 hdmitx: don't force I2S-8ch source for 2-ch PCM in aout notify
  • 63ee744534 amdolby_vision: rename xbmc_dv_dither → xbmc_dv_deep_color
  • fd07f44359 usb-audio: add HyperX Cloud II Wireless quirk
  • b75792bc2f osd_fb: drop VD1 gate from FBIO_WAITFORVSYNC_64
  • f20cbf6f03 amdolby_vision: xbmc_force_l5_override for service.p3i.override
  • 274a426e5d amdolby_vision: force_l5_override is truly unconditional
  • 61aaaed51c amdolby_vision: separate xbmc_override_l5_* from xbmc_detected_l5_*
  • 76ac2df92f auge: enable audio DDR arbiter and HBR QoS tuning
  • 0d7f64a381 amvecm: gate per-vsync PQ work on CSC_FLAG_BYPASS_PQ for native DV

CoreELEC (distro & packages)

  • 434e103872 Update FFmpeg and dependencies to 8.1 — @jamal
  • 0b7fcbe942 [systemd] Enable shutdown/reboot watchdog via system.conf.d drop-in
  • b92490619c [systemd] Enable RuntimeWatchdogSec to ensure watchdog is active
  • 6c54f13ec6 [systemd/connman] Mitigate intermittent reboot hang after screensaver wake
  • ec04ca603e [systemd] Move DefaultTimeoutStopSec to separate drop-in
  • 832277f9e0 libass: update to master (fadc390583, post-0.17.4)
  • 6ec3a583e2 ffmpeg: enable EAC3 encoder
  • 119788157e libdovi: add cmv29_payload_end_bit for bit-precise CMv4.0 append
  • 278f19c148 libdovi: upgrade to 3.3.2
  • c33b73ce83 libdovi: upgrade to 3.3.3 (main post-merge), drop cmv29 patch
  • 76e5b343e2 libdovi: rebuild prebuilt with dovi_generate_from_json support
  • 446ef91255 FFMPEG: Update mvc patch to upstream
  • 92cd61d00f [Amlogic-ng] Add out-of-tree uas.ko package
  • 27600b532c uas: append 5 unusual_uas.h entries backported from v6.6
  • df1ad14616 busybox: bump vm.min_free_kbytes to 32 MB
  • 52dd4b6386 [Amlogic-ng] Add zram compressed-swap package
  • 4ef20dc9f8 zram: fix systemd ordering cycle with local-fs.target
  • fec6af07db p3i: add repository.p3i fetch + inputstream.ffmpegdirect Piers override
  • d47a489f87 p3i: backport CBCS for HLS+ClearKey in inputstream.adaptive
  • 70306c16fb RTL8152-aml: bump package to 84834745 (v2.21.4-1)
  • 2be8159e51 uas: add boot and hot-plug rebind plumbing
  • 9e06e9e5a7 uas-rebind: per-device blacklist via /storage/.config/uas-blacklist.txt
  • 2eb06b93ad kodi: pre-install service.p3i.sb from p3i repo
  • a06e07667b udevil: switch to maintained udevil-ng source — @SamuriHL
  • f529f0c8d3 zram: read user override from /storage/.config/zram.conf
  • c1f5a579c2 wireguard-linux-compat: refresh snapshot checksum — @SamuriHL
  • f9e8f2100b avahi: run autogen.sh from PKG_BUILD — @SamuriHL
  • f35ad8bc33 rust: bump toolchain to 1.93.1 + cargo-c v0.10.22
  • 565b78e6e5 udevil: point source at pannal/udevil
  • 518924c8ef udevil: never overwrite mount.ntfs
  • 4773a1a60c kodi: cap glibc arenas on ARM (MALLOC_ARENA_MAX=8) for heavy-Python RAM
  • 161e8d2dea skin.p3i.estuary: bundle as default skin, packed from source

CoreELEC Settings Addon

  • 5e04eca2e0 Skip audio device enumeration when Bluetooth is disabled
  • 22dc8486c7 Add 2s timeout to get_audio_devices JSON-RPC call
  • 1dd5f70754 Move system_has_bluez/connman checks inside timeout-protected threads
  • e9934bd83b Add timeouts to all synchronous D-Bus and JSON-RPC calls
  • 88d7b15d9f Skip bluetooth start_service when BT is disabled
  • 5a6f097f02 Initialize bluetooth module when user enables BT at runtime
  • df8c77c4e7 bluetooth: stop overwriting user audio selection at startup
  • e4b9b1dbc1 Add UAS opt-in toggle under Hardware → HDD
  • 0c7ccc9d9e UAS InfoText: document per-device blacklist file

Addon repository (repository.p3i)

  • 438a328 Add inputstream.ffmpegdirect 22.2.5.1 (Piers, built against FFmpeg 8.1)
  • 0b2f566 README: note that the repo is pre-installed on p3i firmware
  • 27b1649 inputstream.adaptive 21.5.18-p3i.1.2: backport CBCS for HLS+ClearKey
  • 0996208 Add service.p3i.sb 0.1.0: seamless-branching LAV auto-switcher
  • 8c50714 service.p3i.sb 0.1.1: add toast notification on LAV switch
  • e990b5e service.p3i.sb 0.1.2: SB/SB.txt marker file + new icon
  • 7f4f7c2 service.p3i.sb 0.1.3: fix codec detection (VideoPlayer.AudioCodec)
  • 8ef12f6 service.p3i.sb 0.1.4: bump toast timeout to 5s for HDMI mode switches
  • cc9a054 service.p3i.sb 0.1.5: prefix-match codec gate (truehd_atmos, eac3_atmos)
  • 4b521ee repository.p3i 0.1.1: bump to flush stale client caches
  • 30e8fcf service.p3i.override 0.1.0: new opt-in per-folder override.ini addon
  • a1879df service.p3i.sb 0.1.6: per-filename listing in SB/SB.txt marker
  • bba6223 repository.p3i 0.1.1: add missing root-level zip
  • 38c39e8 service.p3i.override: SETTINGS.md examples section
  • c56e5e8 service.p3i.override 0.1.1: walk one parent folder
  • 3e4548f gitignore: drop accidentally-committed pycache from override addon
  • e8ce5b4 service.p3i.override 0.1.2: catalog all subtitle settings
  • 364e6cf service.p3i.override 0.1.3: distinct gear icon
  • 2f62592 service.p3i.override 0.1.4: update addon.xml description
  • 9746982 service.p3i.override 0.1.5: stop deferring to PlexMod4Kodi
  • ec73f53 repository.p3i 0.1.2: regenerate manifests + bundle service.p3i.override zips
  • 966e443 service.p3i.override: document that L5 override also disables detect
  • f3164d6 service.p3i.override 0.1.6: log JSON-RPC error on SetSettingValue fail
  • 2f5b5ff service.p3i.override 0.1.7: document CMv4 visible-dependency caveats
  • deceeb0 service.p3i.override 0.1.8: L5 override now flows to TV; 0,0,0,0 valid
  • 3898368 Add plugin.video.themoviedb.helper 6.15.6-p3i.1
  • 0a8cd1a Add script.embuary.helper 2.0.8-p3i.1: skip background grabber during playback
  • c2afc9e embuary.helper: add 2.0.9-p3i.1 (matrix base) alongside 2.0.8-p3i.1
  • 277b3a3 service.p3i.sb: add SETTINGS.md (marker file + settings reference)

Installation

Note

On a dirty upgrade your current skin is kept; the new skin.p3i.estuary default only applies on a fresh flash. To use it on an existing install, switch to it under Settings/Interface/Skin.

1. Dirty

Drop the update tar into your CoreELEC update folder and reboot - this can be used as a dirty upgrade from CPM A14 or any of the U3k, avdvplus and earlier p3i (T1–T3b) builds.

Should hitting reboot result in a black screen (long-standing issue with any build), wait 10 seconds to make sure this wasn't just a fluke, then unplug and re-plug the device's power. The upgrade will commence afterwards.

Reset Settings/System/CoreELEC, reboot.

Caution

Resetting Settings/System/CoreELEC to defaults after doing this is necessary. Not the CoreELEC Settings Addon!
Resetting Settings/System/Audio might be necessary for you to see the new settings.
Resetting Settings/Player/Subtitles might be necessary for you to see the new subtitle settings.

2. Dirty (safe)

Drop the update tar into your CoreELEC update folder, shut down the device, pull the power plug for 30 seconds, replug.

Reset Settings/System/CoreELEC, reboot.

Caution

Resetting Settings/System/CoreELEC to defaults after doing this is necessary. Not the CoreELEC Settings Addon!
Resetting Settings/System/Audio might be necessary for you to see the new settings.
Resetting Settings/Player/Subtitles might be necessary for you to see the new subtitle settings.

3. Flash

Use the provided Flash img.gz to prepare your SD card as you would with any other CoreELEC build.


Thanks

A massive shoutout to everyone involved in this build! Special thanks to the testers and reporters who chased down the DV projector flip, the anime-typesetting stall, the interlaced/MBAFF cases and the reboot hangs, and to the upstream projects this builds on: avdvplus (DV metadata handling), libdovi and libass.

Full Changelog (Kodi core): https://github.com/pannal/xbmc/commits/T4/
Full Changelog (CoreELEC-Settings): https://github.com/pannal/service.coreelec.settings/commits/T4
Full Changelog (Kernel): https://github.com/pannal/linux-amlogic/commits/T4
Full Changelog (CoreELEC): https://github.com/pannal/CoreELEC/commits/T4
Addon repo: https://github.com/pannal/p3i_repo

Contributors

Sources and contributors whose work landed in T4:

  • vlixskin.p3i.estuary, the new default skin
  • CPM / avdvplus (R9) (@cpm-code) — DV CMv4.0 append + HDR10+ → P8.1 RPU lineage
  • Sebastiiii (Team-MediaPortal) — VSVDB colour-space options filler
  • the-black-eagle — extra tag reading for .mka files
  • U3knOwn / Jamal — FFmpeg 8.1 bump (Kodi + CoreELEC)
  • samurihl — avahi and wireguard-linux-compat (CoreELEC)

Don't miss a new CoreELEC release

NewReleases is sending notifications on new releases.