Skip to content

Release T4a

Latest

Choose a tag to compare

@pannal pannal released this 29 Jun 20:47

p3i T4a

T4a is a focused follow-up to T4. It is mostly bug-fixes and a batch of new audio and Dolby Vision tuning, on top of everything T4 already shipped. If you are coming from T3b or earlier, read the T4 notes first — this release builds straight on them.

The headline changes:

  • A whole new set of audio controls: AC3/EAC3 dynamic range compression, DTS/DTS-HD/DTS:X dialnorm defeat, a finer centre-channel boost, LFE downmix up to 300%, and LAV Full is now the default passthrough sync mode.
  • Fixed decoded AC3/EAC3 jumping louder after a seek and staying that way (the decoder's range compression was switched off on the first seek).
  • A new toggle (on by default) that gives audio the same DDR-bus priority as video, closing a rare split-second HDMI dropout under heavy 4K/Dolby Vision decode.
  • Several playback glitches gone: the post-seek picture freeze, the pause/resume video wedge, and the green flash at the start of playback and on seeks.
  • The display-synced video clock now recovers from a vsync stall on its own (no more black-screen-with-audio), and its on/off toggle is finally live — in T4 the setting needed a reboot to take effect once it had been on for a single playback.
  • New seek-back recall for embedded text subtitles: the line that should be on screen at the seek target shows up right away, instead of staying blank until the next event.
  • More Dolby Vision tuning: an adjustable SDR target brightness for DV/HDR tone-mapped to SDR via VS10 (it used to come out dim), a CMv4.0→CMv2.9 down-convert for older DV TVs, a Smart CMv4.0 mode (now the default on Display-LED), and auto-letterbox for cropped DV.
  • Dual-track Dolby Vision .mp4 files now play the right stream instead of just the enhancement layer.
  • Skin reloads now announce themselves, giving add-ons the hooks to avoid the UI freeze a background skin update could otherwise cause (upstreamed to Kodi).
  • On a 4K display, the GUI desktop now defaults to 1080p instead of 2160p50/60, sidestepping an HDMI link-budget sync issue some AVR chains hit in the menus (your saved screenmode and the video whitelist are unaffected).
  • Under the hood: FFmpeg 8.1.2, zram swap-in tuning, and a refreshed default skin.

Highlights

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

1. Audio: a batch of new controls and fixes

The biggest cluster of new work in T4a. Most of this came straight out of reporter requests.

  • Fewer HDMI audio dropouts under heavy decode. On Amlogic the audio DMA shares a DDR-bus port that sits below the display and the video decoder in priority, so a peak 4K/Dolby Vision frame can briefly saturate memory bandwidth, starve the small audio FIFO, and make the AVR throw a split-second dropout. A new "Prioritise audio on the system DDR bus" toggle (Settings/System/Audio, on by default) raises that port to super-urgent for all audio — the same priority the display reader and video decoder already have, so audio is lifted to match video, not ahead of it. Audio is a fraction of a percent of DDR bandwidth, so it costs video playback effectively nothing. This is the clean, user-controllable replacement for the kernel-side DDR-arbiter tuning T4 experimented with (now reverted).
  • Dynamic range compression for decoded AC3/EAC3. A new "Dynamic range compression (AC3/EAC3)" slider (Settings/System/Audio, 0–100%, default 100% = unchanged). Decoded AC3/EAC3 always had FFmpeg's full compression baked in with no way to dial it back from the GUI; now you can. Pull it down for a flatter, more faithful track, or leave it at 100% for the old behaviour. It is a no-op for codecs that carry no FFmpeg DRC control (DTS/AAC).
  • Fixed decoded AC3/EAC3 getting louder after a seek. This is the one vlix and Daffietje kept hitting: a track started out correctly compressed, then on the first seek stepped up to its full uncompressed level and stayed there for the rest of playback (not a runaway climb — one jump, then sustained). FFmpeg's decoder flush quietly zeroes the compression scale on every seek; T4a re-applies it after each flush, so the level stays put. (Long-standing FFmpeg behaviour, not a p3i regression — it was just never adjustable before the new DRC setting above.)
  • DTS dialnorm defeat for passthrough. A new "DTS dialogue normalisation defeat" toggle (Settings/System/Audio, on by default) forces dialnorm to 0 dB in DTS, DTS-HD HRA/MA and DTS:X passthrough bitstreams, so your AVR plays them at full reference level instead of the attenuation the stream carries. It joins the AC3/EAC3/TrueHD defeats already in the build, and only touches packings it recognises — a CRC self-check leaves anything unexpected alone. Validated against eac3to on real DTS-HD MA streams.
  • Finer centre-channel boost. The centre-channel downmix boost now steps in 0.5 dB increments (0–30 dB) instead of whole dB, on a slider.
  • LFE in the downmix can now go up to 300% for extra bass, up from the previous 100% ceiling. And in the "Front L/R" LFE target, the LFE now folds in at the same −3 dB as the default downmix, so the slider means the same thing in both modes and the bass stays balanced with the surrounds. The downmix matrix in that mode also honors the centre boost, the surround mix levels from the stream, and normalization — all of which it used to silently ignore.
  • LAV Full is now the default passthrough audio sync mode (the setting is renamed from "Audio Fixes mode" to "Passthrough audio sync mode"). It is the validated path for the hardened TrueHD MAT packer and the vsync clock-sync work, and it gives the tightest lip-sync. The setting's help now spells out the options: LAV Full (recommended default), LAV SB (for seamless-branch discs only), and Off (stock Kodi). The TrueHD packer also picked up a few correctness fixes (negative-padding carry, counter unwrap, and a 96/192 kHz seamless-branch padding fix).
  • Extra HDMI PCM layouts (4.0/5.0). Adopting CPM/avdvplus's approach, the Amlogic HDMI driver can advertise exact 4.0 / 5.0 channel allocations for multichannel PCM output, so the AVR reports the real layout instead of a padded 5.1. A new "Extra HDMI PCM layouts" toggle (Settings/System/Audio, default off) enables it; it takes effect on the next playback, no reboot. G12B/SC2-class boxes.

Note

Because LAV Full is now on by default and there are several new audio settings, reset Settings/System/Audio after upgrading so the new options appear. If a particular setup doesn't get along with LAV Full, set Passthrough audio sync mode → Off to get stock Kodi behaviour back.

2. Fewer playback glitches: freezes, wedges and the green flash

A run of fixes for things that interrupted playback. These affect everyone, not just a particular content type.

  • Post-seek picture freeze fixed. On some seeks the picture would freeze (audio carried on, the screen black-flashing every few seconds) and only another seek would recover it. The root cause was an ancient upstream bug: when neither stream had a real timestamp yet right after a seek, Kodi pinned its master clock to 0, starved the decoder of buffers, and fell into a reset loop. T4a waits for a real timestamp (a few frames, bounded to 2 s) instead of pinning to 0.
  • Pause/resume video wedge fixed. Pausing high-bitrate 4K HEVC could wedge the video for ~17 s on resume (audio and the clock kept running, video fell behind then fast-forwarded to catch up). T4a detects that wedge directly and clears it with a quick internal re-seek, so playback resumes cleanly in about 2 s.
  • The green flash is masked. That brief green rectangle/flash on the video plane at the start of playback and on seeks is an inherited Amlogic decode-restart race. A new "Mask green flash on video restart" toggle (Settings/System/CoreELEC, on by default) holds the output black through the decode restart until the first real frame lands. For the rare stream that still shows a torn green frame right at the seek edge, an opt-in sub-setting adds a one-or-two-frame settle (off by default, since it costs a few tens of milliseconds per seek and most streams don't need it).
  • Green OSD on Back→replay fixed. Replaying a Profile-7 FEL Dolby Vision title without stopping first could show ~6 s of black video with a green OSD; the drain now returns immediately when nothing has been fed since the codec reset.

3. Embedded text subtitles: seek-back recall

The new feature here is seek-back recall for embedded text subtitles (ASS/SRT/mov_text/WebVTT), mostly off reports from nissel. Image-based subtitles (PGS/VobSub/DVB) and external subtitle files are unaffected.

  • The line active at a seek target is recalled. A subtitle that should be on screen at the seek target is normally muxed before the keyframe the demuxer lands on, so it would otherwise not appear until the next line — sometimes a long wait with a large GOP. T4a caches the selected text subtitle as it plays and re-emits the right line at the target. This costs no extra I/O and is always on. For seeking into never-played territory there's an optional file-fallback (coreelec.subtitles.recallfromfile, default off) that reads the active line from the file, carefully budgeted so it can't stall playback.
  • And lines no longer go blank after a backward jump. This part was a T4-era regression: with libass updated to master in T4, it pruned upcoming lines against a stale pre-seek clock and deleted events it would never re-read, so subtitles could go blank for ~30 s (proportional to the size of the jump). The libass track is now flushed on each seek and that faulty pruning is gone, so lines re-render correctly.

4. Dolby Vision: brightness, conversion and cropping tuning

  • Adjustable VS10→SDR brightness (issue #59). DV/HDR content tone-mapped to SDR through VS10 looked dim next to the GUI and native SDR files, because the kernel hardcodes the SDR target to 100 nits. A new VS10 SDR target luminance slider (100–500 nits, default 100 = unchanged) lets you map for your panel's real SDR brightness.
  • CMv4.0 → CMv2.9 down-convert for older DV TVs. Some older CMv2.9-only DV TVs black-screen (no OSD) on CMv4.0 content because they fail to fall back. A new opt-in setting strips the CMv4.0 extension blocks from each frame, leaving a clean CMv2.9 stream the older set can lock onto. It is the inverse of T4's CMv4.0 append and mutually exclusive with it.
  • A "Smart" CMv4.0 append mode, now the default. On top of the existing Off/Always append modes, Smart decides per frame: it appends CMv4.0 where it helps, but bypasses it (and lets the TV use the native CMv2.9 dynamic metadata) when the frame's actual peak already sits comfortably above your display's capability, with an adjustable headroom threshold. It is now the default on Display-LED setups (the Always default and the auto-preset both move to Smart).
  • Auto-letterbox for cropped DV. Cropped DV encodes (bars removed, e.g. 3840×1600) could show grey letterbox bars when the DV trim carries a high positive lift. T4a synthesizes the active-area geometry from the coded aspect and issues correct DV L5 metadata for the TV to handle the bars. It's pure geometry (the border detector is never engaged), gated to non-16:9 native DV, on by default, and a manual L5 override still wins. It's now its own setting, independent of the other L5 controls.
  • VS10 SDR8/SDR10 output defaults back to Bypass. VS10's SDR→SDR path measurably clips whiter-than-white detail, and the smoother pacing it once seemed to lend is now provided by the real vsync clock instead. VS10 SDR stays available as an opt-in.

5. Dolby Vision: multi-track .mp4 files play the right stream

A dual-track dual-layer (DT-DL) Profile-7 Dolby Vision .mp4 carries its base and enhancement layers on two separate tracks. Kodi only knew how to combine them in MKV files, so an .mp4 ended up playing only the enhancement layer (and mislabelling itself "ST-DL"). T4a recognises the enhancement layer by its Dolby Vision config and combines the two correctly, while still leaving genuinely independent DV streams alone. (This complements T4's multi-video-track work, which let you select the extra streams in the first place.)

6. Dolby Vision: stability fixes

A set of fixes for hangs, color corruption and a settings glitch, mostly from on-device reports.

  • Back→replay deadlock fixed. Hitting Back and replaying a DV title could freeze the picture on a lock-ordering deadlock between the DV-core lock and the GUI graphics lock. The locking is reworked, the DV-core sysfs is serialized behind a single recursive mutex, and a watchdog now names the blocked path instead of failing silently.
  • DV→DV switch color corruption (gray/green) when one title was switching while another played in the background: the stale title's stop handler no longer reconfigures the DV core over the live stream. (For most setups the green-flash hold from highlight 2, on by default, also covers the brief blip this could leave.)
  • "Reset to default" no longer needs two clicks. The DV/HDR TV preset used to stay on Manual after the first reset and only land on Auto on the second; a deferred recompute was flipping it back. It now sticks on the first click.
  • VS10 no longer corrupts software-decoded video. VS10 conversion is a hardware-video-layer feature. On the occasional stream the Amlogic decoder declines (small MPEG-4/XVID, decoded in software), engaging it pushed plain SDR pixels through the DV core and turned the picture magenta/yellow. T4a recognises the software-decode path and keeps VS10 in Bypass there, and the live VS10 toggle now declines the conversion modes on such content (with a brief toast) — so the corruption can't happen.
  • A GUI-path HDMI link watchdog and extra transition instrumentation went in to chase the remaining AVR-side blackout reports.

7. The display-synced video clock: a live toggle, stall recovery, tighter sync

T4 introduced the first real display-synced video clock. T4a hardens it on several concrete fronts.

  • The "use display as clock" toggle is now live. In T4 the CoreELEC setting was read only once, at the first player startup — so after it had been on for a single playback, flipping it (on or off) silently did nothing until you rebooted. T4a applies it immediately (a brief A/V glitch is possible if you flip it mid-playback). The clock thread also only runs during video playback now, instead of polling the framebuffer the whole time Kodi sits idle in the GUI.
  • Recovers automatically from a vsync stall. This is the one you'd actually notice: if the kernel's vsync wait stalls (a VPP reconfig on a seek, a mode switch, a wedged sink), the clock used to ride it down and the picture could go black for seconds with audio still playing, recovering only on stop. It now drops to legacy timing within ~750 ms and probes its way back as soon as vsync returns.
  • Frame-accurate A/V corrections at matched rates. An inverted gate meant the frame-quantized clock corrections were running exactly when they shouldn't and disabled when they should. With the real vsync clock now driving things, the upstream behaviour is restored: on matched rates (24@24, 25@50, 60@60) an A/V correction becomes one clean frame dup/drop instead of an arbitrary clock lurch, and lip-sync under LAV Full is held to a tighter window.

8. Add-ons can survive a skin reload

A skin reload (usually a background skin-addon auto-update that calls ReloadSkin) tears down and rebuilds every window. An add-on sitting in a modal window at that moment (PM4K, for instance) can be left spinning over a destroyed window with nothing to react to, and the UI freezes until a full Kodi restart. T4a fires GUI announcements around the reload (OnSkinUnloading, then OnSkinLoaded, or OnSkinLoadFailed on the dead-end paths) that an add-on can subscribe to, so it can close or restart its own windows in time. The add-on has to implement these to benefit; it isn't automatic, and one that ignores them can still freeze. But the hooks are now there. A failed reload of a non-default skin also falls back cleanly to the default instead of leaving nothing loaded. The change is upstreamed to Kodi as xbmc/xbmc#28431.

9. 3D MVC subtitle depth

3D MVC (frame-packed Blu-ray) PGS subtitles used to render flat, at zero depth. T4a carries the per-stream 3D subtitle plane through to the decoded picture, so the subtitle now sits at the correct stereoscopic depth.

10. New default skin, refreshed

skin.p3i.estuary (vlix's Estuary variant, the default since T4) moves from 8.8.8 to 8.8.15 with a batch of presentation work:

  • Codec logos on the startup toast and info: configurable layout and position, dark-themed variants, and an option (on by default) to keep them inside the DV active area so they don't land in the letterbox bars — using the new resolution-independent aspect class the player now exposes.
  • A richer Player Process Info: new video-output detail (including Player-Led DV/HDR10), a subtitle section that scrolls long names, an audio-channel-layout fix, and info for the new CMv4.0 → CMv2.9 feature.
  • A new option to hide the progress bar on pause and/or on seek.
  • CoreELEC power-button and calibration icons.
  • Fixed overlapping music-video media flags.

11. The p3i addon repository keeps growing

The pre-installed repository.p3i (served at p3irepo.pm4k.eu) picked up:

  • inputstream.ffmpegdirect and inputstream.adaptive re-versioned under a 666.<upstream>-p3i.1 epoch so they cleanly update over the stock add-ons.
  • script.module.jurialmunkey 0.2.35, the dependency for our plugin.video.themoviedb.helper build.
  • A texture-packed variant of skin.p3i.estuary for faster repo installs.

12. The GUI desktop defaults off 2160p50/60

A 2160p50/60 desktop doesn't make the menus any sharper — Kodi renders the GUI at 1080p or below and hardware-scales it — but it does drive the HDMI link to its 594 MHz ceiling (4:2:2/12-bit deep colour). A marginal AVR/repeater chain, or a near-limit cable in a long run, can fail to lock onto that and keep dropping sync while you sit in the menus. So when your display's native mode is 2160p50/60, T4a now points the desktop at the 1080p entry at the same refresh rate by default. This only changes the out-of-the-box default: an explicitly chosen 2160p50/60 screenmode still wins, the mode stays in the list for manual selection, and the whitelist still switches to 2160p50/60 for genuine 50/60fps 4K video. The Resolution / Refresh rate / Whitelist help text was reworded to explain the trade-off.

13. Under the hood

  • FFmpeg 8.1 → 8.1.2. A point release rolling up the PixelSmash fix plus the usual demux/decode hardening (mpegts, matroska, mov, hevc/h264, swscale). No API/ABI change; all our patches re-verified with zero rejects.
  • zram swap-in tuning. With zram swap active, the kernel's read-ahead (page-cluster) is set to 0 — zram has no seek cost, so read-ahead only added decompression latency. Overridable via /storage/.config/zram.conf. (Closes #63.)
  • Reverted the experimental audio DDR arbiter / HBR QoS kernel tuning T4 introduced, in favour of the user-controllable DDR-priority audio toggle (highlight 1).
  • libdovi gained the dovi_rpu_remove_cmv40_metadata primitive (source-patch + prebuilt rebuild) behind the new CMv4.0→CMv2.9 down-convert.

Known issues

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

This is not new in T4a, 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 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. The only reliable recovery is to power-cycle the AVR (sometimes the TV too).

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. Because the trigger is downstream of the box, no setting in the build fixes it. 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.


Changelog

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

🎬 xbmc / Kodi

Audio

  • AEStreamInfo: DTS / DTS-HD / DTS:X dialnorm defeat (default on; CRC-gated, validated against eac3to)
  • AESinkALSA: GUI toggle to prioritise audio on the system DDR bus (super-urgent, same as video; default on)
  • AESinkALSA: GUI toggle for the extra HDMI PCM layouts (4.0/5.0; default off), and write the knob for the AML PCM device too, not only HDMI
  • AE: add GUI setting for AC3/EAC3 decoder dynamic range compression (slider, 0–100%, default 100)
  • AE: re-apply AC3/EAC3 DRC after flush (FFmpeg wipes drc_scale on every seek — the "louder after seek" fix)
  • AE: reset the stream limiter on flush
  • AE: clarify DRC vs downmix-normalization in the setting help texts
  • Audio: normalise EAC3 naming in the DRC settings strings
  • AE: allow 0.5 dB steps for the centre-channel downmix boost; use a slider, not a broken number spinner
  • AE: honor downmix levels and normalization in the LFE-redirect matrix
  • AE: apply −3 dB (1/√2) to the LFE in the "Front L/R" downmix target
  • AE: raise the LFE downmix level cap to 200%, then 300%
  • AE: default Passthrough audio sync to LAV Full; relabel "Audio Fixes mode" → "Passthrough audio sync mode"
  • AE: LAV TrueHD relatch — carry negative MAT padding, fix the counter-unwrap off-by-one
  • AE: PackerMAT — avoid nullptr pointer arithmetic in the padding split
  • PackerMAT: rate-correct the seamless-branch default padding at 96/192 kHz TrueHD
  • AESinkALSA: drive precise HDMI channel allocation for extra PCM layouts (4.0/5.0)

Playback robustness

  • VideoPlayer: don't pin the master clock to 0 on an all-NOPTS post-seek sync (post-seek picture freeze)
  • VideoPlayer: recover the Amlogic video feed/drain wedge via reseek (pause/resume freeze)
  • VP: corroborate broken-file detection with source read progress

Green flash / decode restart

  • AMLCodec: mask green-flash on decode restart with a video hold; simplify the setting to a boolean (default on)
  • AMLCodec: close the green seam at the seek edge with a vsync settle; gate it behind a sub-setting (default off)
  • AMLCodec: return VC_EOF from drain when nothing was fed since codec_reset (green OSD on FEL replay)
  • AMLCodec: fix the right_left stereo-mode typo in SetVideoRect

Video sync & reference clock

  • RenderManager: re-enable vsync clock sync at matched rates, gated on the ref clock
  • VideoPlayerAudio: tighten the SYNC_DISCON gate under LAV Full + vsync clock sync
  • VideoSyncAML: auto-recovering stall fallback instead of multi-second black
  • VideoSyncAML: re-anchor the dead-reckoning ledger on the primary→legacy handoff
  • VideoReferenceClock: gate the thread lifetime on video-playback state
  • VideoReferenceClock: live-toggle coreelec.amlogic.usedisplayasclock

Subtitles

  • VideoPlayer: recall embedded text subtitles after seek (with an optional, budgeted file fallback, default off)
  • VideoPlayer: fix the subtitle seek-recall file fallback never running; update its help; log when it finds nothing
  • Subtitles: stop pruning libass events (a stale post-seek clock was deleting upcoming lines)
  • VideoPlayer: clear the libass track on flush so subtitles re-render after a backward seek
  • VideoPlayer: invalidate the libass render cache on embedded subtitle flush; don't re-arm it on an empty track
  • VideoPlayer: actually drop the re-read duplicate of a reinjected subtitle (SubRip + ASS)
  • VideoPlayer: carry 3D MVC subtitle depth into the video picture for PGS subs
  • Settings: rewrite the Whitelist help text to describe its actual behaviour

Dolby Vision — brightness / conversion / cropping

  • DV: add adjustable VS10 SDR-output target luminance (issue #59)
  • Settings: default VS10 SDR8/SDR10 output back to Bypass
  • DV: add a CMv4.0 → CMv2.9 down-convert setting for old DV TVs (+ control-type and mutual-exclusion fixes)
  • DV: add a Smart CMv4.0 append mode (per-frame, nits-aware bypass) and make it the default on Display-LED; use the L1 frame peak; react to VSVDB MaxLum changes
  • DV: add auto-letterbox L5 for cropped (non-16:9) native DV content, as a standalone setting independent of L5; surface the offsets in player process info
  • DV: expose the resolution-independent active-area aspect class to skins

Dolby Vision — multi-track

  • DVDDemuxFFmpeg: combine DT-DL .mp4 Dolby Vision instead of playing the EL alone

Dolby Vision — stability

  • DV: fix the Back→replay ABBA deadlock between the DV-core lock and the gfx context lock
  • DV: serialize all DV-core sysfs mutations behind a recursive mutex
  • DV: don't restore GUI IPT on OnStop while another playback is active; take the restore decision inside the DV-core lock
  • DV: defer VSVDB payload writes out of the settings callbacks (settings-lock ABBA)
  • DV: stop the deferred VSVDB recompute flipping the TV preset back after a reset
  • DV: add a GUI-path HDMI link-state watchdog; instrument DV-core lock convoys and video-plane blanking writes
  • AMLUtils: block VS10 conversion on software-decoded video (no VD1 layer) — fixes magenta/yellow chroma corruption

Stability / GUI

  • WinSystemAmlogic: default the GUI desktop off 2160p50/60 to 1080p at the same rate (HDMI link budget; saved screenmode and the whitelist are unaffected); reword the Resolution/Refresh/Whitelist help
  • GUI: announce skin (un)load and OnSkinLoadFailed so add-ons can react to ReloadSkin instead of freezing (upstreamed as xbmc/xbmc#28431)
🐧 Kernel (linux-amlogic, amlogic-4.9-20)
  • auge/hdmitx: optional precise HDMI channel allocation for extra PCM layouts (4.0/5.0), behind extra_pcm_layouts
  • auge: carry the 4.0/5.0 PCM layouts inside the 6-channel container (canonical slots + SND_CHMAP_NA) so they play in the right speakers (avdvplus's approach)
  • Revert "auge: enable audio DDR arbiter and HBR QoS tuning" (the experimental tuning from T4)
📦 CoreELEC (distro & packages)
  • FFmpeg: bump 8.1 → 8.1.2 (PixelSmash + security/robustness backports; all patches re-verified, 0 rejects)
  • zram: set vm.page-cluster=0 while zram swap is active (overridable via /storage/.config/zram.conf); closes #63
  • libdovi: add a source-patch for dovi_rpu_remove_cmv40_metadata and rebuild the prebuilt (for the CMv4.0 → CMv2.9 down-convert)
  • p3i: vendor-version inputstream.ffmpegdirect / inputstream.adaptive as 666.<upstream>-p3i.1
🎨 skin.p3i.estuary (by vlix, 8.8.8 → 8.8.15)
  • Codec logos: layout + position skin settings; "keep inside the DV active area" setting (default on); slide the startup-flash logos into the active area by aspect class; fix active-area handling
  • Codec logos: dark-themed variants for the startup toast
  • Player Process Info: new video-output info (Player-Led DV/HDR10); subtitle section now scrolls long names; fix audio-channel default layout; info for the "Convert CMv4.0 to CMv2.9" feature
  • Add a setting to hide the progress bar on pause and/or on seek
  • Add CoreELEC power-button and calibration logo icons
  • Fix overlapping music-video media flags
🧩 Addon repository (`repository.p3i`)
  • inputstream.ffmpegdirect 666.22.2.5-p3i.1 and inputstream.adaptive 666.21.5.18-p3i.1 (epoch-versioned to update cleanly over stock)
  • script.module.jurialmunkey 0.2.35 (TMDBHelper 6.15.6 dependency)
  • Publish skin.p3i.estuary 8.8.9 → 8.8.15.2, plus an XBT-packed repo variant + pack tool
📜 Full commit history (all repos, T4 → HEAD)

xbmc / Kodi (82 commits)

  • f3552ec703 AEStreamInfo: DTS / DTS-HD / DTS:X dialnorm defeat
  • 9ab052126c DV: default CMv4.0 append to Smart
  • 7967c1410f DV: make auto-letterbox L5 a standalone setting, independent of L5
  • 69d5135de0 WinSystemAmlogic: default the GUI desktop off 2160p50/60 to fit the HDMI link budget
  • 7b2c69831f AESinkALSA: write the extra-PCM-layouts knob for the AML PCM device, not only HDMI
  • 71e526799b AMLUtils: block VS10 conversion on software-decoded video (no VD1 layer)
  • 57e8cb877e AESinkALSA: GUI toggle to prioritise audio on the system DDR bus
  • 66b3c867d3 AESinkALSA: GUI toggle for extra HDMI PCM layouts (4.0/5.0)
  • eead872006 PackerMAT: rate-correct seamless-branch default padding at 96/192 kHz TrueHD
  • bf7d684bf1 DVDDemuxFFmpeg: combine DT-DL MP4 Dolby Vision instead of playing the EL alone
  • dd9ab3819d VideoPlayer: actually drop the re-read duplicate of a reinjected subtitle
  • e38c645060 DolbyVision: stop the deferred VSVDB recompute flipping the TV preset after a reset
  • 5b2beba576 VideoPlayer: don't pin the master clock to 0 on an all-NOPTS post-seek sync
  • c1addb6aee Audio: normalise EAC3 naming in DRC settings strings
  • bbb47cad4f VideoPlayer: temp diagnostic for doubled subtitles on seek-back
  • 01965a9087 VideoPlayer: recover the Amlogic video feed/drain wedge via reseek
  • 304aca458f Subtitles: stop pruning libass events - stale post-seek clock deletes upcoming lines
  • 9bdfe6111f Subtitles: don't re-arm the libass render cache on an empty track
  • d19255934f docs: update embedded-sub seek-back recall spec to as-built
  • 53e0b8639f VideoPlayer: log bracketing events when subtitle seek-recall fallback finds nothing
  • bd2e1f1288 Settings: update subtitle seek-recall fallback help to match its bounded-read behavior
  • 852839f74a VideoPlayer: fix subtitle seek-recall file fallback never running
  • 998d450aec AESinkALSA: drive precise HDMI channel allocation for extra PCM layouts (4.0/5.0)
  • 3837177203 VideoPlayer: clear libass track on flush so subtitles re-render after a backward seek
  • 43455e19d1 Settings: rewrite Whitelist help text to describe actual behavior
  • abc78ace2c VideoPlayer: recall embedded text subtitles after seek
  • c550d3e692 docs: Add "DV L5 Auto-Letterbox for Cropped Content" and "Embedded text-subtitle seek-back recall" specs
  • 6b674d9477 AMLCodec: gate the seek-edge settle behind a sub-setting (default off)
  • e2c318d13b AE: raise LFE downmix level cap to 300%
  • 1a80f50f9c AMLCodec: close the green seam at the seek edge with a vsync settle
  • 62c3d3f02a VideoPlayer: invalidate libass render cache on embedded subtitle flush
  • 1968445e4a AMLCodec: simplify the green-flash hold setting to a boolean
  • b4c861c090 AE: allow LFE downmix level up to 200% for extra bass
  • bcdbbffa12 AMLCodec: mask green-flash on decode restart with a video hold
  • d07d0d1269 AE: apply -3 dB (1/sqrt2) to LFE in the "Front L/R" downmix target
  • 7354e490e9 AE: re-apply AC3/E-AC3 DRC after flush (ffmpeg wipes drc_scale on seek)
  • 89386ed30b AE: clarify DRC vs downmix-normalization in setting help texts
  • 5962ede573 AE: reset the stream limiter on flush
  • ab92788a04 VideoPlayer: carry 3D MVC subtitle depth into the video picture for PGS subs
  • 9c14aae9a6 AE: add GUI setting for AC3/E-AC3 decoder dynamic range compression
  • efe82907f8 AMLCodec: fix right_left stereo mode typo in SetVideoRect
  • f94331fff5 Merge pull request #27 from SamuriHL/fix/smart-cmv4-use-l1-frame-peak
  • 1452f4b962 DV: Smart CMv4.0 — add per-frame LOGDEBUG trace; clarify LOGINFO
  • 3d59cf17c1 DV: Smart CMv4.0 — react to VSVDB_MAX_LUM setting changes
  • b93133bc7c DV: Smart CMv4.0 — use L1 frame peak (source_max_pq was mastering peak)
  • a089cec49f AE: default Passthrough audio sync to LAV Full; relabel setting
  • 68c7896c54 AE: PackerMAT — avoid nullptr pointer arithmetic in FillDataBuffer padding split
  • 574cd12fac AE: LAV TrueHD relatch — carry negative MAT padding, fix counter-unwrap off-by-one
  • c5bbdbabd8 DV: add Smart CMv4.0 append mode (per-frame nits-aware bypass)
  • 5976b8bd26 AE: use a slider for the centre boost setting, not a number spinner
  • e37c90b4fb VP: corroborate broken-file detection with source read progress
  • d376368921 AE: honor downmix levels and normalization in LFE-redirect matrix
  • 17a00af4da AE: allow 0.5 dB steps for centre channel downmix boost
  • c55110b5c7 Settings: default VS10 SDR8/SDR10 output back to Bypass
  • 8890953081 AMLCodec: return VC_EOF from drain when nothing was fed since codec_reset
  • 525be7a657 DV: defer VSVDB payload writes out of settings callbacks (settings-lock ABBA)
  • 15aa22c590 DV: fix Back->replay ABBA deadlock between DV-core lock and gfx context lock
  • 4d4d897971 GUI: announce OnSkinLoadFailed when a skin reload leaves nothing loaded
  • f7f9e7695d VideoPlayerAudio: tighten SYNC_DISCON gate under LAV Full + vsync clock sync
  • b4e5b82fc0 RenderManager: re-enable vsync clock sync at matched rates, gated on ref clock
  • ed16954824 DV: take the GUI-IPT restore decision inside the DV-core lock
  • ae4022f851 DV: instrument DV-core lock convoys and video-plane blanking writes
  • c9ed3e6a5e VideoSyncAML: re-anchor dead-reckoning ledger on primary→legacy handoff
  • 3eca5bfb19 VideoSyncAML: auto-recovering stall fallback instead of multi-second black
  • cf8a1b1448 GUI: announce skin (un)load so addons can survive ReloadSkin
  • fdcbef9ae8 VideoReferenceClock: gate thread lifetime on video-playback state
  • bcf391928d VideoReferenceClock: live-toggle coreelec.amlogic.usedisplayasclock
  • dd4f81c348 DV: expose resolution-independent active-area aspect class to skins
  • 89658d2659 docs: correct CMv4.0 strip control type to toggle in spec/plan
  • aa077595db DV: fix CMv4.0 strip setting invisible - use control type=toggle
  • c1f9abc232 docs: record CMv4.0 strip mutual-exclusion moved from enable-dep to C
  • 5f336e644c DV: fix CMv4.0 append greying/lock from strip mutual-exclusion
  • 2f2680eaa7 DV: surface auto-letterbox L5 offsets in player process info
  • 9968dbf2db DV: add auto-letterbox L5 for cropped (non-16:9) native DV content
  • 8d54c5cefa DV: fix CMv4.0 strip return-check to match libdovi 0/-1 contract
  • bbab9ad508 DV: add CMv4.0->CMv2.9 down-convert setting for old DV TVs
  • 922ed540f1 docs: implementation plan for CMv4.0->CMv2.9 down-convert setting
  • 813abd3d73 docs: design spec for dynamic CMv4.0->CMv2.9 down-convert setting
  • 736271789f DV: serialize all DV-core sysfs mutations with a recursive mutex
  • 123ad70121 DV: don't restore GUI IPT on OnStop while another playback is active
  • c6973d39bc DV: add adjustable VS10 SDR-output target luminance (issue #59)
  • 145ad8bc79 DV: add GUI-path HDMI link-state watchdog (aml_hdmi_link_probe)

Kernel (linux-amlogic, 3 commits)

  • b79b0c1a05 auge: carry extra HDMI PCM layouts (4.0/5.0) in the 6-channel container
  • f082ab883c Revert "auge: enable audio DDR arbiter and HBR QoS tuning"
  • 72a8d7d515 auge/hdmitx: optional precise HDMI channel allocation for extra PCM layouts (4.0/5.0)

CoreELEC (distro & packages, 7 commits)

  • 87782a6e66 ffmpeg: bump 8.1 -> 8.1.2 (PixelSmash + security/robustness backports)
  • b993e69431 Merge remote-tracking branch 'origin/coreelec-21_local'
  • c052731372 zram: set vm.page-cluster=0 while zram swap is active
  • 0413c97736 libdovi: rebuild arm prebuilt with dovi_rpu_remove_cmv40_metadata
  • 9890b1d2ef libdovi: rebuild arm prebuilt with dovi_rpu_remove_cmv40_metadata
  • e08be13a1e libdovi: add source-patch for dovi_rpu_remove_cmv40_metadata
  • e9fa1a0875 p3i: vendor-version inputstream.{ffmpegdirect,adaptive} as 666.-p3i.1

CoreELEC Settings Addon

  • No changes since T4.

skin.p3i.estuary (23 commits, up to the published 8.8.15)

  • ab431aa Update changelog and bump to 8.8.15
  • 4e046d0 PPI: scroll long subtitle name
  • 68694ee PPI: video output new info, Player-Led DV/HDR10
  • 8fe6434 PPI: fix audio channels default layout
  • e7dadd7 Update changelog and bump to 8.8.14
  • d51aa7a Settings to hide progress bar on pause and/or on seek
  • 9b04cd5 Fix codec logos active area handling
  • 383c71b Update changelog and bump to 8.8.13
  • afb3949 Merge pull request #6 from pannal/pr-fix-music-video-flags
  • 8088c01 Add ProRes in video codec variables
  • b315305 Fix overlapping music videos media flags
  • 8baea1e PPI: new info for 'Convert CMv4.0 to CMv2.9' feature in DV Metadata
  • aa7a5cc Add dark codec logos to startup toast
  • a83dfde Update changelog to 8.8.12
  • def16a2 Bump to 8.8.12 for active-area codec-logo setting
  • 81d50eb Codec logos: slide startup-flash logos into the DV active area by aspect class
  • 3ba74cc Codec logos: add 'keep inside active area' setting (default on)
  • 5bdd147 Bump to 8.8.11 (PPI subtitle section update)
  • 7f68898 PPI: update subtitle section
  • 961eb48 Bump to 8.8.10 (include vlix's CE icons for repo distribution)
  • 186a451 Add CE power button and calibration logo icons
  • 030ae77 Bump to 8.8.9 for repo distribution of codec-logo settings
  • 68fa2df Codec logos: add layout + position skin settings

Addon repository (p3i_repo, 12 commits)

  • 15c20b5 Publish skin.p3i.estuary 8.8.15.2 (re-cut from 8.8.15 source, excludes stray 9b6997c)
  • 3ce26f6 Track packed media XBT in tree to match the published zip
  • 687d191 Publish skin.p3i.estuary 8.8.15.1 (TexturePacker XBT + CE overlay)
  • 05132fe Publish skin.p3i.estuary 8.8.15 (PlayerProcessInfo updates)
  • bcc84c5 Publish skin.p3i.estuary 8.8.13.1 (XBT-packed repo variant) + pack tool
  • 1ca9c18 Publish skin.p3i.estuary 8.8.13
  • fdc5e02 Publish skin.p3i.estuary 8.8.12 (codec-logo active-area setting)
  • 60e08f4 Add script.module.jurialmunkey 0.2.35 (TMDBHelper 6.15.6 dependency)
  • 9a108cf inputstream.ffmpegdirect 666.22.2.5-p3i.1, inputstream.adaptive 666.21.5.18-p3i.1
  • 4e90aa8 Publish skin.p3i.estuary 8.8.11 (PPI subtitle section update)
  • 90f683a Publish skin.p3i.estuary 8.8.10 (CE power button + calibration logo icons)
  • 92eccf3 Publish skin.p3i.estuary 8.8.9 (codec-logo layout/position settings)

Installation

Note

Coming from T4, a dirty upgrade keeps your skin and settings; the bundled skin.p3i.estuary and the p3i addons update with the build. Coming from before T4, 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–T4) 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 audio settings (and to pick up the LAV Full default).
Resetting Settings/Player/Subtitles might be necessary for you to see the 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 audio settings (and to pick up the LAV Full default).
Resetting Settings/Player/Subtitles might be necessary for you to see the 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 seek-louder audio bug, the post-seek freeze and pause/resume wedge, the vanishing and doubled subtitles, the two-click TV-preset reset, and the audio-mix requests — and to the upstream projects this builds on: avdvplus (DV metadata handling), LAV, libdovi, libass and FFmpeg.

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

Contributors

Sources and contributors whose work landed in T4a (not exhaustive!):

  • vlixskin.p3i.estuary updates (codec logos, info), and the LFE / DRC audio reports and requests
  • SamuriHL — Smart CMv4.0 L1-frame-peak fix (PR #27), LAV Full validation
  • manuelh — centre-channel boost and Front L/R LFE downmix requests (#58)
  • Daffietje — decoded-AC3 seek-louder report
  • nissel — embedded-subtitle seek-recall reports
  • ADAlvarez — two-click TV-preset reset and cropped-DV reports
  • CPM / avdvplus (R9) (@cpm-code) — DV CMv4.0 / metadata lineage, and the 4.0/5.0 HDMI PCM-layout approach
  • LAV / dovi_tool / libdovi / libass / FFmpeg — upstream projects

#CoreELEC p3i internal testing team: mad props to all of you not listed here. You made this possible. Thank you.