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
- 1. Smoother playback: a real vsync video clock
- 2. Reboot / shutdown recovers itself
- 3. A new default skin
- 4. Interlaced, MBAFF and framerate fixes
- 5. CoreELEC fast (keyframe-accurate) seek
- 6. Lower RAM use
- 7. The p3i addon repository (
repository.p3i) - 8. DV/HDR presets and a 12-bit Deep Color pipeline
- 9. Dolby Vision: automatic L5 active-area detection
- 10. Dolby Vision: subtitle enhancements
- 11. Dolby Vision: projector SDR↔HDR flip fix
- 12. HDR10+ black-screen fix
- 13. Subtitles
- 14. Audio
- 15. Live TV
- 16. Dolby Vision: HDR10+ → DV P8.1 conversion and CMv4.0
- 17. Dolby Vision: multi-video-track files
- 18. New skin infolabel: Dolby Vision track type
- 19. 3D / stereoscopic
- 20. Storage & USB
- 21. Per-folder overrides and seamless branching
- 22. Under the hood: FFmpeg 8.1
- Known issues
- Changelog
- Installation
- Thanks
- Contributors
Roughly ordered by how many people each change affects, and how visible it is.
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.
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_wdtstays alive through reboot; systemdRuntimeWatchdogSec), 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 inadvancedsettings.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.
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.
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.
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.
- Lower RAM use, no more slow memory creep. glibc's secondary arenas are capped on ARM (
MALLOC_ARENA_MAX=8plus 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_kbytesis also raised to 32 MB for more headroom.
T4 pre-installs our own addon repo, served at p3irepo.pm4k.eu. Through it we now ship:
service.p3i.sbandservice.p3i.override, our two opt-in helper addons (detailed under Per-folder overrides and seamless branching below).inputstream.ffmpegdirect22.2.5.1 (Piers), built against FFmpeg 8.1.inputstream.adaptive21.5.18-p3i.1.2: a CBCS backport so HLS SAMPLE-AES (cbcs) plus ClearKey plays on Kodi 21.3.plugin.video.themoviedb.helper6.15.6-p3i.1: skips the SQLite VACUUM while a player is active, and restores the broken vacuum/delete interval guards.script.embuary.helper2.0.8-p3i.1 / 2.0.9-p3i.1: skips the background fanart grabber during playback to stop microstutter.
- 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.
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.
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.
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.
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.
- 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.
- 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.
- 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.
- 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_jsonpath), with source-luminance clamping ported across for proper Player-Led dynamic dimming. - Fixed the purple playback and exit stall on a DV → HDR10 transition.
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.
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).
- 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.
- 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
udevildisk mounter no longer overwritesmount.ntfs(it now builds from ourpannal/udevilfork).
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.overridereads a per-folderoverride.iniand 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.sbflips 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 anSB/SB.txtmarker. settings & marker reference.
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.
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.
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_RefreshRateon 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_rateexceptions 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
CalcFrameRatefrom 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_overridenamespace; 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=nullin round-trip sites - DV: clear
FLAG_TOGGLE_FRAMEinaml_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_jsonfor HDR10+ → P8.1, including CMv4.0 metadata in the RPU - DV: restore the HDR10+ → P8.1 conversion sysfs write; drop
xbmc_dv_hdr10plus_convto 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_US64marker 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_framefor 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
eac3passthroughis 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.volumestepscap 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.12bitto 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; stockskin.estuarykept in the manifest as a fallback)
Skin infolabels
- PlayerProcessInfo: expose HDMI wire format as a skin infolabel (prettified); read it from
/confignot/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
.mkafiles (@the-black-eagle) - addons: trust
repository.p3iandservice.p3i.sbin the default manifest
🐧 Kernel (linux-amlogic, amlogic-4.9-20)
osd_fb: drop the VD1 gate fromFBIO_WAITFORVSYNC_64(real vsync for the new video clock)hdmitx20: addhdr10plus_vsif_holdto suppress VSIF during mode switches; fix it blocking VSIF cleanup on stop; fix VS10 non-IPT config reporting a stale DV EOTFamvecm: gate per-vsync PQ work onCSC_FLAG_BYPASS_PQfor native DVamdolby_vision: L5 active-area injection from Kodi-detected valuesamdolby_vision: separatexbmc_override_l5_*fromxbmc_detected_l5_*;xbmc_force_l5_override(truly unconditional) forservice.p3i.overrideamdolby_vision: respect OSD/subtitle gating for detected L5 injection; separate sysfs for L5 subtitle suppressionamdolby_vision: renamexbmc_dv_dither → xbmc_dv_deep_coloramdolby_vision: port VSVDB source-luminance clamping + Player-Led metadata pre-processing from avdvplusamdolby_vision: allowsource_meta_copyfor Player-Led HDR10+ conversion; clamp max mastering luminance to 9997 nitsamdolby_vision: filter variable-length L8 blocks; remove thexbmc_dv_hdr10plus_convdependency; remove duplicate pre-control_path blocks; per-frame metadata debughdmitx: 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 overauge: enable audio DDR arbiter and HBR QoS tuningusb-audio: add HyperX Cloud II Wireless quirk- DV:
hw_dumpdebug command + gate dump behinddebug_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_bitfor bit-precise CMv4.0; rebuild prebuilt withdovi_generate_from_json - libass: update to master (post-0.17.4)
- Memory:
kodicapped glibc arenas on ARM (MALLOC_ARENA_MAX=8) for heavy-Python RAM;busyboxbumpvm.min_free_kbytesto 32 MB - zram: new compressed-swap package, fix the systemd ordering cycle, user override via
/storage/.config/zram.conf - UAS: out-of-tree
uas.kopackage + boot/hot-plug rebind plumbing; per-device blacklist via/storage/.config/uas-blacklist.txt; +5unusual_uas.hentries backported from v6.6 - udevil: source from
pannal/udevil(a restored alpharde fork over IgnorantGuru 0.4.4); never overwritemount.ntfs - Reboot/shutdown: enable shutdown/reboot watchdog via
system.conf.ddrop-in; enableRuntimeWatchdogSec; mitigate the intermittent reboot hang after screensaver wake (connman); moveDefaultTimeoutStopSecto a separate drop-in - p3i repo: add
repository.p3ifetch +inputstream.ffmpegdirect(Piers) override; pre-installservice.p3i.sb; backport CBCS for HLS+ClearKey ininputstream.adaptive RTL8152-amlbump to v2.21.4-1;rusttoolchain 1.93.1 + cargo-c 0.10.22;avahiautogen fix andwireguard-linux-compatchecksum 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_serviceand audio-device enumeration when BT is disabled - Add timeouts to all synchronous D-Bus and JSON-RPC calls; move
bluez/connmanchecks inside timeout-protected threads; add a 2s timeout to theget_audio_devicescall
🧩 Addon repository (`repository.p3i`)
- New pre-installed
repository.p3i(served atp3irepo.pm4k.eu), bundling override addon zips + regenerated manifests inputstream.ffmpegdirect22.2.5.1 (Piers, FFmpeg 8.1)inputstream.adaptive21.5.18-p3i.1.2 — CBCS backport (HLS SAMPLE-AES + ClearKey on Kodi 21.3)service.p3i.sb0.1.0 → 0.1.6 — seamless-branching LAV auto-switcher:SB/SB.txtmarker (per-filename/glob), prefix-match codec gate, toast on switch. SETTINGS.mdservice.p3i.override0.1.0 → 0.1.8 — per-folderoverride.iniengine; subtitle-settings catalog; one-parent-folder walk; L5 override flows to TV (0,0,0,0valid). SETTINGS.mdplugin.video.themoviedb.helper6.15.6-p3i.1 — skip SQLite VACUUM while a player is active; restore vacuum/delete interval guardsscript.embuary.helper2.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)
c517968d46DV: bypass VS10 for SDR BT.2020 content to preserve gamut5b90f408e8Settings: improve help text for CoreELEC/DV settingsc10a6bbf73Settings: Fix description for Reduce color banding (VS10) not representing the default3d5e68c206Revert MAT packer Reset on seek for standard passthrough path66041244faSettings: Default refresh rate change delay to 2.5s45b589f6afHDR10+: hold VSIF during mode switches to fix intermittent black screenadaebdb09dDV: re-enable L5 active area subtitle restriction with stream-level fixba13ba2231DV: fix L5 active area subtitle distortion — use margins instead of rect84203e490bHDR10+: fix VSIF hold sysfs path (hdmitx20, not amhdmitx)e19262996aDV: track actual subtitle presence for L5 suppression2781436f7dDV: fix L5 active area subtitle distortion — use position offsetf8d45730f1DV: fix HDR10 OSD peak brightness slider not applying80c54338baDV: fix long black screen on live TV channel change with DV mode ON7cf78bbbc8DV: disable style margins when L5 active area overrides subtitle position97fdafd950DV: add option to apply user subtitle position with L5 active area01083915bfDV: fix L5 active area — track per-frame, handle top alignment, clamp12a6237355DV: handle PM4K invisible overlay for L5 OSD detectionebb236463bMake Python addon stop/terminate timeouts configurable via advancedsettings.xml4897023d03DV: cache PM4K seek dialog ID for L5 OSD detection4b4e7a021b[depends][target] Bump to ffmpeg 8.1 — @U3knOwn3e92d1e4b0DV: skip redundant sysfs writes for L5 subtitle and OSD flagsf617d90237DV: sync EGL creation with DV pipeline restoration (minimal fix)c6da3465b9DV: fix L5 active area restriction for top-aligned subtitlesc66ebf5afbDV: reduce per-frame overhead in L5 and OSD handlingb1983d025bDV: fix subtitle alignment corruption in L5 active area handlingac5bd9af38DV: apply L5 forceBottomAlign override per-frame in RenderImagee3c3d99675DV: use INSIDE_ACTIVE_AREA margins for L5 subtitle restriction13e870354eDV: compensate font scale for L5 active area marginsa59da9dbf5DV: restore HDR10+ to DV P8.1 conversion sysfs write9cfcdf7fd2DV: include CMv4.0 metadata in HDR10+ to P8.1 RPU2feaebb522DV: honor user position and margin in L5 active area when enabledf35ae5749dDV: disable xbmc_dv_hdr10plus_conv sysfs write, match avdvplus919fd5f520DV: hide L5 subtitle restriction settings in Player-Led modedebf11c5e0DV: clamp image-based subtitles to L5 active areaaa0c7db945DV: use style MarginV instead of renderer margins for L5 restriction3130d5e832DV: update restrict setting description for PGS subtitle support7b4eb92c8fDV: signal image subtitle presence for L5 suppressionc103d3cc66DV: restructure L5 settings with parent toggle and subtitle signal mode6afa3d3b98Add shutdown watchdog to force-exit if Stop() deadlocks5f4c01c60bDV: gate CreateNewWindow IPT restore on playback-active flag3de31d1da4DV: update restrict setting description for PGS subtitle supporta84242cee9Use ffmpeg to read more tags from mka files — @the-black-eagle5f0e71b25dDV: scale text subtitle margin relative to active area height28ca0372afDV: add proportional padding when clamping image subs to L5 active area8be699db6dDV: reset L5 state on playback stop8409175d36DV: add CMv4.0 dynamic append for native DV contentf1a73e7667DV: fix CMv4.0 setting description — applies to all profiles04e2493029DV: cache display params for CMv4.0 append decisionb2ca587ed0DV: fix CMv4.0 Auto mode always appending on first frame239a35c461DV: skip redundant off/on cycle in aml_dv_start when already in IPT5b72b8c5e6DV: update CMv version string dynamically, not just on first frameee47eb3333DV: prefix appended CMv4.0 version string with "V"5b4660a797RenderManager: handle fps-only change without full reconfigured2f8038cecAMLCodec: abort blocked AddData write loop on flush9ef5f7cb21Subtitles: fix gray fringe on bitmap subs and add zoom-dependent filtering4d88803c81DV: move synchronous IPT restore before early return in CreateNewWindowea14c24c9aDV: skip display_auto_now in aml_dv_off during DV_MODE_ON IPT restorec8292d7ae7DV: trigger display mode re-write after IPT restore in early-return pathf03b29c114DV: force VPP reconfiguration in aml_dv_off via display mode re-write181f808b3cSubtitles: update libass to master, add ASS override settingcbb53869d1DV: add L5 active area detection via FFmpeg border scan65e98e71c8DV: ignore unreliable L/R borders in active area detection4b9816a4a4DV: fix double percent in active area detection log output370ae4c1a5DV: use majority consensus for active area detection, not unanimityb551f631dbDV: fix detection not running when g_application.CurrentFile() is emptye27ede46b7DV: add diagnostic logging for active area detection start path1bb164993eDV: restrict subtitles for pre-cropped frames via display letterboxaf9c4f6531DV: fix off-by-one in AR snap border computation3adbb9cad5DV: retry dark frames in active area detection01fcf25655DV: improve active area detection robustness17885aac29DV: add early exit and P7 FEL note to setting description66abcef550DV: add diagnostic logging for detection codec/decode failuresa643c42eecDV: fix detection decode loop for multi-stream remuxes (Profile 7)1b8acf0704DV: use symmetric fallback when one T/B border has consensus615bc17f34DV: early exit detection when T/B consensus reachedf11adbfd1dDV: decode only keyframes for active area detection7667810c4cDV: use contrast-based frame skip instead of absolute brightnesse34ce1b730DV: adaptive scan threshold for dark DV contentecc039d1f1DV: require symmetric L/R for pillarbox detectiona3ce4656f7DV: dynamic T/B consensus threshold and corroboration9a871ec393DV: skip CMv4.0 append only for CMv2.9 4+ L2 trims71902a2c13DV: improve active area detection robustness and pre-cropped handlinga25e2afc4bDV: start active area sampling at 0% to catch fullscreen intros1fe1a20714DV: require minimum usable samples for active area detection6a04c57a2eDV: tighten minimum usable sample threshold to 6/7be6ece1e6fDV: fix variable AR check for frames with one-sided false bar readingbaa0374109DV: expose active area detection state to skin7fee2bb82eAE: fix downmix normalization not applied for integer source formatsdb2f410b8dAE: pass surround mix level from codec metadata to resamplerecb3fbf89dAE: transcode to EAC3 when eac3passthrough is enabled, with sink validation75101244b2AE: update German translation for EAC3 transcode settinge113d1599bVP: fix wrong framerate for H.264 MBAFF interlaced content8babfb6474DV: gate L5 active area detection on native DV content, skip P9f4c3638daaVP: don't override hardware-confirmed interlace with progressive fallbackad6ce814b8VP: fix video_rate exceptions for interlaced and H.264 content on Amlogic21527d77dcVP: compensate Amlogic deinterlace pipeline latency for interlaced content6209e73cacDV: add cancel flag and optional I/O throttle for active area detectionb3affc3f65DV: disable L5 detection by default, add SMB warning to descriptioncfcc98049eDV: add Inactive (5) and Running (6) detection states for skind89cd65a2dDV: use bit-precise CMv4.0 append via libdovi cmv29_payload_end_bit47996ba69fDV: log when I/O throttle is active for detection diagnostics90815a93e7DV: make throttle setting a child of detect active areab2eaca4a57DV: abort active area scan early when source L5 appears329c8c8986fix live TV passthrough A/V sync: use audio clock, skip SpeedAdjust06bfb4a486DV: fix detection state stuck on Running for BDMV/ISO sources1b9218203eDV: use libdovi API for CMv4.0 append, remove bitstream surgery40322a45c0DV: skip active area detection for BDMV/DVD disc sourcese4f0e572e8VP: require positive progressive confirmation for interlace fallbackf18d3b3235fix live TV decoded audio mute: extend sync fix to all live streamsf9fdaf2016DV: use libdovi dovi_generate_from_json for HDR10+ to P8.1 conversionf5dcf28fe5DV: manage DV pipeline for SW-decoded content via GLES renderer46d126bfb4DV: flush decoder to extract buffered frames during detectionfc3a874b45fix 3D SBS/TAB/FP: always halve viewport in stereo modesabef20093cfix 3D SBS/TAB aspect ratio on Amlogic hardware video plane554662bc00fix 29.97/25fps progressive wrongly treated as interlaced1f73afeae2VP: don't let transient DI progressive clear demuxer interlace flage00f1ff398VP: block progressive fallback entirely for demuxer-flagged interlaced6d55dfb317DolbyVision: Implement C++ options filler for VSVDB colour space setting — @Sebastiiii7d874c2d1cDVDDemuxFFmpeg: distinguish independent DV streams from dependency layersb1bbad9ae5VP: block CalcFrameRate from halving fps for demuxer-flagged interlaced709d043146DV: skip L5 detection for MPEG-TS and stalled decodersb9b7bb7cf7DV: fix purple playback and exit stall on DV → HDR10 transition63ce9ad29eBitstreamConverter: inject PTS_US64 marker into DV FEL RPU (DT-DL only)39865d1a9dPlayerProcessInfo: expose DV DT-DL vs ST-DL as a skin infolabel4c77c613c4Subtitles: premultiply alpha in linear light for bitmap overlays51bbacad82Subtitles: linear-light PMA for ASS glyph rendering (GLES)b2c7b77da2Settings: clarify OSD base brightness applies to text-based subtitles2fb8794f5fSettings: default VS10 12-bit dither off; warn about TV detail enhancement9785411af4guilib: gate 2-loop label scroll cap on smartredraw9f5daefcaeSettings: add 12-bit Deep Color pipeline toggle, drop standalone ditherc358e769f7Settings: add TV preset for DV/HDR pipeline3cdeed7700Settings: gate L5 children on Display-LED and drop preset L5 auto-enable49cfc9ef62DV: gate CMv4.0 append on Display-LED onlyf2704cc630Settings: TV preset picks DV type by actual EDID capabilityd83899a39eSettings: scope preset prefer.12bit to Display-LED only61d8cd1a79DV: note L5 reference video limitation in detect active area helpce53ecea6dDV: gate VSVDB children re-show on DV group visibility08d047b3b0Settings: enable force.modes in Samsung/Auto-no-DV preset branch293554adaaSettings: Samsung/no-DV preset uses HDR10 422 12-bit, not LLDV74116119c0Settings: extend Auto for HDR10-only sinks, never auto-pick 4:4:4d5f859ef92Revert "fix 3D SBS/TAB aspect ratio on Amlogic hardware video plane"a853ebcf8aRevert "fix 3D SBS/TAB/FP: always halve viewport in stereo modes"05964980cePlayerProcessInfo: expose HDMI wire format as skin infolabeld39150de49DVDDemuxFFmpeg: fix per-eye DAR for stereo MKV under ffmpeg 8280a410edaPlayerProcessInfo: prettify HDMI wire format6886c379c5BaseRenderer: drop SBS per-eye ratio divide that over-corrects FSBS8b090d7cdeDV: skip L5 subtitle signal when text subs sit inside active areaf2d73e7488DV: update L5 signal mode help for margin-aware text sub check7917f65cc4DV: use calibrated subtitle baseline for L5 signal overlap checkc7dc3dc933AE: add setting to ignore stream-carried downmix metadata0e8fb4145eSettings: clarify 12-bit pipeline help covers 8/10-bit content too355b979804PlayerProcessInfo: read HDMI wire format from /config, not /attrca40d5adb2DV: decouple VPP 12-bit preservation from wire EDID gate for tunnel modes50adf48985VideoSyncAML: drive clock from real vsync, fix fallback precision3ee620b8dcVideoReferenceClock: re-enable thread so VideoSyncAML actually runscb67e3bf82VideoReferenceClock: keep synthesized vblank interval in double precision74f408d677Settings: gate vsync reference clock behind a CoreELEC toggle3007dc5e77VideoReferenceClock: extend double-precision vblank interval to TimeOfNextVblankf0356a5c42VP: fix audio desync + passthrough stutter at start of x264 B-pyramid playback4d8527a40dVP: extend over-doubled framerate fix from H.264 to all interlaced codecs0767b6e5b0VideoRefClock: diagnostic logs for videodebug-overlay frame skipping232c2d5e27VideoSyncAML: refresh fps each loop, recover from mid-Run mode switchesb6eed0cbf5VP: scope stream-start reorder artefact gate to H.264 video350120bc6dSettings: 12-bit Deep Color toggle pins 4:2:2 + forces 12bit over user CDbd3f9ce8faDV: make Deep Color EDID gate CS-aware to avoid broken signals926c5bd38cVideoSyncAML: don't catch up across kernel-ts blackouts22c97c995dVideoRefClock: refresh m_RefreshRate on mid-Run fps change56fbeac67f3D filename detection: match FSBS/FTAB in addition to HSBS/HTAB1827af0e78VideoPlayer: apply per-eye DAR for filename-detected stereo filesd0b24bb05dVP: add CoreELEC fast (keyframe-accurate) seek togglea66803e1c9VP: fix 1080i25 playing at 100fps when fpsrate is double-doublede4901eb22dAML: skip refresh-change delay when HDMI mode isn't actually changing1f16c7e3493D: force window rebuild on quit-stereo-on-stop so kernel flag clears59026563fdSettings: raise audiooutput.volumesteps cap to 100 (was 90)6cb119cd33VP: stop playback on broken-source stalls and seek wedges5bdf3774efaddons: trust repository.p3i in default manifestf983ec3dc2addons: trust service.p3i.sb in default manifest72daca6f5aVP: re-read LAV mode setting on each passthrough codec Open8287eadb31DV: live re-push of L5 sysfs flags on setting change5e7ac9ed6cDV: per-folder L5 active-area override channelcdcc495b8bDV: short-circuit L5 active-area detect when override is setda6cd5657fDV: allow empty default on L5 override setting82888ee8ffDV: runtime-promote L5 override visibility (unblock JSON-RPC writes)cd2b837c85DV: present L5 override to TV via xbmc_force_l5_override sysfsc4f833a41fDV: stop detect before pushing L5 override sysfs values7732d11e37DV: switch L5 override to xbmc_override_l5_* sysfs namespaceeaa7c5d3d7DV: log full kernel + cached state at every DV transition7e8bd175e6DV: extend state dump with InfoFrame/colorimetry params9c3eceb04eDV: clear HDR10/VSVDB InfoFrame injection flags on dv_off0de23bbd48DV: log HDMI TX link state + add vsync-stall snapshot1cac9d582bDV: clear FLAG_TOGGLE_FRAME in aml_dv_off0594cd12e5DV: force-clear FLAG_TOGGLE_FRAME after toggle wait timeout124051fbffDV: never re-assert /sys/class/display/mode=null in round-trip sitesa21b606a20VideoPlayer: gate PTS-offset reset on external subtitle presence56e7abff2eAMLCodec: minimal vmap for non-interlace DVab954a287aDV: open VS10 on auto-played next item5456d4741eVideoSync: opt-in stall fallback to legacy timing635f2fbf86VideoSync: nest fallback setting under usedisplayasclock96e2dfe8f7Subtitles: skip ass_render_frame for unchanged static overlaysec1bd7e98cSubtitles: split oversized libass glyph atlas across GLES textures2e31637b14DV: opt-in re-assert of VS10/HDR output after resolution switchb4f94bb271DV: extend re-assert to DoVi (IPT) output + avoid resolution re-trigger loop5417d94c2cVP: don't drop deliberate resume seeks during startup (fastseek regression)961a1a730bDV: make active-area detect I/O throttle cache-awarebed05a0cd9Audio: normalise AC3/EAC3 naming in settings strings239fcde5a2DV: default active-area detect I/O throttle to on04993770cbDV: abort active-area scan mid-read when playback buffer goes criticale287260247DV: honor container default flag for multi-video-stream DV files07ac8cd8b5skin: default to skin.p3i.estuary
Kernel (linux-amlogic, 31 commits)
f539fe4842hdmitx: add hdr10plus_vsif_hold parameter to suppress VSIF during mode switchesf178b75a87hdmitx: fix VS10 non-IPT config sysfs reporting stale DV EOTF45cc1b453fhdmitx: fix hdr10plus_vsif_hold blocking VSIF cleanup on stopbc1df3b935meson_wdt: keep watchdog armed during reboot to recover from kernel hangse9643b1e2fmeson_wdt: cancel hrtimer auto-ping when userspace takes over watchdogd6204c84a7amdolby_vision: clamp max mastering luminance to 9997 nitsdfc45f86e3amdolby_vision: add Player-Led metadata pre-processing from avdvpluse16c57dc55amdolby_vision: remove duplicate pre-control_path blocksf9bf2f463ehdmitx: suppress HPD events during reboot to prevent shutdown deadlocke558f6748chdmitx: only disable TMDS PHY on halt/poweroff, not reboot47e55465e4amdolby_vision: add per-frame metadata debug output after control_pathcde900ed91amdolby_vision: allow source_meta_copy for Player-Led HDR10+ conversion8447222bc4Revert "hdmitx: only disable TMDS PHY on halt/poweroff, not reboot"94d6d7bc78amdolby_vision: port VSVDB source luminance clamping from avdvplusa7fa38397famdolby_vision: remove xbmc_dv_hdr10plus_conv dependency, match avdvpluscd35ee2342DV: add separate sysfs for L5 subtitle suppressionfb4689e707DV: filter variable-length L8 blocks in source_meta_copy5891351ce9DV: cache provider name comparisons as booleansca4e854208DV: add L5 active area injection from Kodi-detected valuesd3782fec4dDV: respect OSD/subtitle gating for detected L5 injection15ae7010c6DV: add hw_dump debug command for blackout diagnosis7e7eaf9646DV: gate dump_buffer behind debug_dolby575f946a15hdmitx: don't force I2S-8ch source for 2-ch PCM in aout notify63ee744534amdolby_vision: rename xbmc_dv_dither → xbmc_dv_deep_colorfd07f44359usb-audio: add HyperX Cloud II Wireless quirkb75792bc2fosd_fb: drop VD1 gate from FBIO_WAITFORVSYNC_64f20cbf6f03amdolby_vision: xbmc_force_l5_override for service.p3i.override274a426e5damdolby_vision: force_l5_override is truly unconditional61aaaed51camdolby_vision: separate xbmc_override_l5_* from xbmc_detected_l5_*76ac2df92fauge: enable audio DDR arbiter and HBR QoS tuning0d7f64a381amvecm: gate per-vsync PQ work on CSC_FLAG_BYPASS_PQ for native DV
CoreELEC (distro & packages)
434e103872Update FFmpeg and dependencies to 8.1 — @Jamal0b7fcbe942[systemd] Enable shutdown/reboot watchdog via system.conf.d drop-inb92490619c[systemd] Enable RuntimeWatchdogSec to ensure watchdog is active6c54f13ec6[systemd/connman] Mitigate intermittent reboot hang after screensaver wakeec04ca603e[systemd] Move DefaultTimeoutStopSec to separate drop-in832277f9e0libass: update to master (fadc390583, post-0.17.4)6ec3a583e2ffmpeg: enable EAC3 encoder119788157elibdovi: add cmv29_payload_end_bit for bit-precise CMv4.0 append278f19c148libdovi: upgrade to 3.3.2c33b73ce83libdovi: upgrade to 3.3.3 (main post-merge), drop cmv29 patch76e5b343e2libdovi: rebuild prebuilt with dovi_generate_from_json support446ef91255FFMPEG: Update mvc patch to upstream92cd61d00f[Amlogic-ng] Add out-of-tree uas.ko package27600b532cuas: append 5 unusual_uas.h entries backported from v6.6df1ad14616busybox: bump vm.min_free_kbytes to 32 MB52dd4b6386[Amlogic-ng] Add zram compressed-swap package4ef20dc9f8zram: fix systemd ordering cycle with local-fs.targetfec6af07dbp3i: add repository.p3i fetch + inputstream.ffmpegdirect Piers overrided47a489f87p3i: backport CBCS for HLS+ClearKey in inputstream.adaptive70306c16fbRTL8152-aml: bump package to 84834745 (v2.21.4-1)2be8159e51uas: add boot and hot-plug rebind plumbing9e06e9e5a7uas-rebind: per-device blacklist via /storage/.config/uas-blacklist.txt2eb06b93adkodi: pre-install service.p3i.sb from p3i repoa06e07667budevil: switch to maintained udevil-ng source — @samurihlf529f0c8d3zram: read user override from /storage/.config/zram.confc1f5a579c2wireguard-linux-compat: refresh snapshot checksum — @samurihlf9e8f2100bavahi: run autogen.sh from PKG_BUILD — @samurihlf35ad8bc33rust: bump toolchain to 1.93.1 + cargo-c v0.10.22565b78e6e5udevil: point source at pannal/udevil518924c8efudevil: never overwrite mount.ntfs4773a1a60ckodi: cap glibc arenas on ARM (MALLOC_ARENA_MAX=8) for heavy-Python RAM161e8d2deaskin.p3i.estuary: bundle as default skin, packed from source
CoreELEC Settings Addon
5e04eca2e0Skip audio device enumeration when Bluetooth is disabled22dc8486c7Add 2s timeout to get_audio_devices JSON-RPC call1dd5f70754Move system_has_bluez/connman checks inside timeout-protected threadse9934bd83bAdd timeouts to all synchronous D-Bus and JSON-RPC calls88d7b15d9fSkip bluetooth start_service when BT is disabled5a6f097f02Initialize bluetooth module when user enables BT at runtimedf8c77c4e7bluetooth: stop overwriting user audio selection at startupe4b9b1dbc1Add UAS opt-in toggle under Hardware → HDD0c7ccc9d9eUAS InfoText: document per-device blacklist file
Addon repository (repository.p3i)
438a328Add inputstream.ffmpegdirect 22.2.5.1 (Piers, built against FFmpeg 8.1)0b2f566README: note that the repo is pre-installed on p3i firmware27b1649inputstream.adaptive 21.5.18-p3i.1.2: backport CBCS for HLS+ClearKey0996208Add service.p3i.sb 0.1.0: seamless-branching LAV auto-switcher8c50714service.p3i.sb 0.1.1: add toast notification on LAV switche990b5eservice.p3i.sb 0.1.2: SB/SB.txt marker file + new icon7f4f7c2service.p3i.sb 0.1.3: fix codec detection (VideoPlayer.AudioCodec)8ef12f6service.p3i.sb 0.1.4: bump toast timeout to 5s for HDMI mode switchescc9a054service.p3i.sb 0.1.5: prefix-match codec gate (truehd_atmos, eac3_atmos)4b521eerepository.p3i 0.1.1: bump to flush stale client caches30e8fcfservice.p3i.override 0.1.0: new opt-in per-folder override.ini addona1879dfservice.p3i.sb 0.1.6: per-filename listing in SB/SB.txt markerbba6223repository.p3i 0.1.1: add missing root-level zip38c39e8service.p3i.override: SETTINGS.md examples sectionc56e5e8service.p3i.override 0.1.1: walk one parent folder3e4548fgitignore: drop accidentally-committed pycache from override addone8ce5b4service.p3i.override 0.1.2: catalog all subtitle settings364e6cfservice.p3i.override 0.1.3: distinct gear icon2f62592service.p3i.override 0.1.4: update addon.xml description9746982service.p3i.override 0.1.5: stop deferring to PlexMod4Kodiec73f53repository.p3i 0.1.2: regenerate manifests + bundle service.p3i.override zips966e443service.p3i.override: document that L5 override also disables detectf3164d6service.p3i.override 0.1.6: log JSON-RPC error on SetSettingValue fail2f5b5ffservice.p3i.override 0.1.7: document CMv4 visible-dependency caveatsdeceeb0service.p3i.override 0.1.8: L5 override now flows to TV; 0,0,0,0 valid3898368Add plugin.video.themoviedb.helper 6.15.6-p3i.10a8cd1aAdd script.embuary.helper 2.0.8-p3i.1: skip background grabber during playbackc2afc9eembuary.helper: add 2.0.9-p3i.1 (matrix base) alongside 2.0.8-p3i.1277b3a3service.p3i.sb: add SETTINGS.md (marker file + settings reference)
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.
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.
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.
Use the provided Flash img.gz to prepare your SD card as you would with any other CoreELEC build.
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/aml-4.9-21.3_dev_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
Sources and contributors whose work landed in T4:
- vlix —
skin.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
.mkafiles - U3knOwn / Jamal — FFmpeg 8.1 bump (Kodi + CoreELEC)
- samurihl — avahi and wireguard-linux-compat (CoreELEC)