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.ffmpegdirectandinputstream.adaptivere-versioned under a666.<upstream>-p3i.1epoch so they cleanly update over the stock add-ons.script.module.jurialmunkey0.2.35, the dependency for ourplugin.video.themoviedb.helperbuild.- A texture-packed variant of
skin.p3i.estuaryfor 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_metadataprimitive (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_scaleon 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_EOFfrom drain when nothing was fed sincecodec_reset(green OSD on FEL replay) - AMLCodec: fix the
right_leftstereo-mode typo inSetVideoRect
Video sync & reference clock
- RenderManager: re-enable vsync clock sync at matched rates, gated on the ref clock
- VideoPlayerAudio: tighten the
SYNC_DISCONgate 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
OnStopwhile 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
OnSkinLoadFailedso add-ons can react toReloadSkininstead 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), behindextra_pcm_layoutsauge: 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=0while zram swap is active (overridable via/storage/.config/zram.conf); closes #63 - libdovi: add a source-patch for
dovi_rpu_remove_cmv40_metadataand rebuild the prebuilt (for the CMv4.0 → CMv2.9 down-convert) - p3i: vendor-version
inputstream.ffmpegdirect/inputstream.adaptiveas666.<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.ffmpegdirect666.22.2.5-p3i.1 andinputstream.adaptive666.21.5.18-p3i.1 (epoch-versioned to update cleanly over stock)script.module.jurialmunkey0.2.35 (TMDBHelper 6.15.6 dependency)- Publish
skin.p3i.estuary8.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)
f3552ec703AEStreamInfo: DTS / DTS-HD / DTS:X dialnorm defeat9ab052126cDV: default CMv4.0 append to Smart7967c1410fDV: make auto-letterbox L5 a standalone setting, independent of L569d5135de0WinSystemAmlogic: default the GUI desktop off 2160p50/60 to fit the HDMI link budget7b2c69831fAESinkALSA: write the extra-PCM-layouts knob for the AML PCM device, not only HDMI71e526799bAMLUtils: block VS10 conversion on software-decoded video (no VD1 layer)57e8cb877eAESinkALSA: GUI toggle to prioritise audio on the system DDR bus66b3c867d3AESinkALSA: GUI toggle for extra HDMI PCM layouts (4.0/5.0)eead872006PackerMAT: rate-correct seamless-branch default padding at 96/192 kHz TrueHDbf7d684bf1DVDDemuxFFmpeg: combine DT-DL MP4 Dolby Vision instead of playing the EL alonedd9ab3819dVideoPlayer: actually drop the re-read duplicate of a reinjected subtitlee38c645060DolbyVision: stop the deferred VSVDB recompute flipping the TV preset after a reset5b2beba576VideoPlayer: don't pin the master clock to 0 on an all-NOPTS post-seek syncc1addb6aeeAudio: normalise EAC3 naming in DRC settings stringsbbb47cad4fVideoPlayer: temp diagnostic for doubled subtitles on seek-back01965a9087VideoPlayer: recover the Amlogic video feed/drain wedge via reseek304aca458fSubtitles: stop pruning libass events - stale post-seek clock deletes upcoming lines9bdfe6111fSubtitles: don't re-arm the libass render cache on an empty trackd19255934fdocs: update embedded-sub seek-back recall spec to as-built53e0b8639fVideoPlayer: log bracketing events when subtitle seek-recall fallback finds nothingbd2e1f1288Settings: update subtitle seek-recall fallback help to match its bounded-read behavior852839f74aVideoPlayer: fix subtitle seek-recall file fallback never running998d450aecAESinkALSA: drive precise HDMI channel allocation for extra PCM layouts (4.0/5.0)3837177203VideoPlayer: clear libass track on flush so subtitles re-render after a backward seek43455e19d1Settings: rewrite Whitelist help text to describe actual behaviorabc78ace2cVideoPlayer: recall embedded text subtitles after seekc550d3e692docs: Add "DV L5 Auto-Letterbox for Cropped Content" and "Embedded text-subtitle seek-back recall" specs6b674d9477AMLCodec: gate the seek-edge settle behind a sub-setting (default off)e2c318d13bAE: raise LFE downmix level cap to 300%1a80f50f9cAMLCodec: close the green seam at the seek edge with a vsync settle62c3d3f02aVideoPlayer: invalidate libass render cache on embedded subtitle flush1968445e4aAMLCodec: simplify the green-flash hold setting to a booleanb4c861c090AE: allow LFE downmix level up to 200% for extra bassbcdbbffa12AMLCodec: mask green-flash on decode restart with a video holdd07d0d1269AE: apply -3 dB (1/sqrt2) to LFE in the "Front L/R" downmix target7354e490e9AE: re-apply AC3/E-AC3 DRC after flush (ffmpeg wipes drc_scale on seek)89386ed30bAE: clarify DRC vs downmix-normalization in setting help texts5962ede573AE: reset the stream limiter on flushab92788a04VideoPlayer: carry 3D MVC subtitle depth into the video picture for PGS subs9c14aae9a6AE: add GUI setting for AC3/E-AC3 decoder dynamic range compressionefe82907f8AMLCodec: fix right_left stereo mode typo in SetVideoRectf94331fff5Merge pull request #27 from SamuriHL/fix/smart-cmv4-use-l1-frame-peak1452f4b962DV: Smart CMv4.0 — add per-frame LOGDEBUG trace; clarify LOGINFO3d59cf17c1DV: Smart CMv4.0 — react to VSVDB_MAX_LUM setting changesb93133bc7cDV: Smart CMv4.0 — use L1 frame peak (source_max_pq was mastering peak)a089cec49fAE: default Passthrough audio sync to LAV Full; relabel setting68c7896c54AE: PackerMAT — avoid nullptr pointer arithmetic in FillDataBuffer padding split574cd12facAE: LAV TrueHD relatch — carry negative MAT padding, fix counter-unwrap off-by-onec5bbdbabd8DV: add Smart CMv4.0 append mode (per-frame nits-aware bypass)5976b8bd26AE: use a slider for the centre boost setting, not a number spinnere37c90b4fbVP: corroborate broken-file detection with source read progressd376368921AE: honor downmix levels and normalization in LFE-redirect matrix17a00af4daAE: allow 0.5 dB steps for centre channel downmix boostc55110b5c7Settings: default VS10 SDR8/SDR10 output back to Bypass8890953081AMLCodec: return VC_EOF from drain when nothing was fed since codec_reset525be7a657DV: defer VSVDB payload writes out of settings callbacks (settings-lock ABBA)15aa22c590DV: fix Back->replay ABBA deadlock between DV-core lock and gfx context lock4d4d897971GUI: announce OnSkinLoadFailed when a skin reload leaves nothing loadedf7f9e7695dVideoPlayerAudio: tighten SYNC_DISCON gate under LAV Full + vsync clock syncb4e5b82fc0RenderManager: re-enable vsync clock sync at matched rates, gated on ref clocked16954824DV: take the GUI-IPT restore decision inside the DV-core lockae4022f851DV: instrument DV-core lock convoys and video-plane blanking writesc9ed3e6a5eVideoSyncAML: re-anchor dead-reckoning ledger on primary→legacy handoff3eca5bfb19VideoSyncAML: auto-recovering stall fallback instead of multi-second blackcf8a1b1448GUI: announce skin (un)load so addons can survive ReloadSkinfdcbef9ae8VideoReferenceClock: gate thread lifetime on video-playback statebcf391928dVideoReferenceClock: live-toggle coreelec.amlogic.usedisplayasclockdd4f81c348DV: expose resolution-independent active-area aspect class to skins89658d2659docs: correct CMv4.0 strip control type to toggle in spec/planaa077595dbDV: fix CMv4.0 strip setting invisible - use control type=togglec1f9abc232docs: record CMv4.0 strip mutual-exclusion moved from enable-dep to C5f336e644cDV: fix CMv4.0 append greying/lock from strip mutual-exclusion2f2680eaa7DV: surface auto-letterbox L5 offsets in player process info9968dbf2dbDV: add auto-letterbox L5 for cropped (non-16:9) native DV content8d54c5cefaDV: fix CMv4.0 strip return-check to match libdovi 0/-1 contractbbab9ad508DV: add CMv4.0->CMv2.9 down-convert setting for old DV TVs922ed540f1docs: implementation plan for CMv4.0->CMv2.9 down-convert setting813abd3d73docs: design spec for dynamic CMv4.0->CMv2.9 down-convert setting736271789fDV: serialize all DV-core sysfs mutations with a recursive mutex123ad70121DV: don't restore GUI IPT on OnStop while another playback is activec6973d39bcDV: add adjustable VS10 SDR-output target luminance (issue #59)145ad8bc79DV: add GUI-path HDMI link-state watchdog (aml_hdmi_link_probe)
Kernel (linux-amlogic, 3 commits)
b79b0c1a05auge: carry extra HDMI PCM layouts (4.0/5.0) in the 6-channel containerf082ab883cRevert "auge: enable audio DDR arbiter and HBR QoS tuning"72a8d7d515auge/hdmitx: optional precise HDMI channel allocation for extra PCM layouts (4.0/5.0)
CoreELEC (distro & packages, 7 commits)
87782a6e66ffmpeg: bump 8.1 -> 8.1.2 (PixelSmash + security/robustness backports)b993e69431Merge remote-tracking branch 'origin/coreelec-21_local'c052731372zram: set vm.page-cluster=0 while zram swap is active0413c97736libdovi: rebuild arm prebuilt with dovi_rpu_remove_cmv40_metadata9890b1d2eflibdovi: rebuild arm prebuilt with dovi_rpu_remove_cmv40_metadatae08be13a1elibdovi: add source-patch for dovi_rpu_remove_cmv40_metadatae9fa1a0875p3i: 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)
ab431aaUpdate changelog and bump to 8.8.154e046d0PPI: scroll long subtitle name68694eePPI: video output new info, Player-Led DV/HDR108fe6434PPI: fix audio channels default layoute7dadd7Update changelog and bump to 8.8.14d51aa7aSettings to hide progress bar on pause and/or on seek9b04cd5Fix codec logos active area handling383c71bUpdate changelog and bump to 8.8.13afb3949Merge pull request #6 from pannal/pr-fix-music-video-flags8088c01Add ProRes in video codec variablesb315305Fix overlapping music videos media flags8baea1ePPI: new info for 'Convert CMv4.0 to CMv2.9' feature in DV Metadataaa7a5ccAdd dark codec logos to startup toasta83dfdeUpdate changelog to 8.8.12def16a2Bump to 8.8.12 for active-area codec-logo setting81d50ebCodec logos: slide startup-flash logos into the DV active area by aspect class3ba74ccCodec logos: add 'keep inside active area' setting (default on)5bdd147Bump to 8.8.11 (PPI subtitle section update)7f68898PPI: update subtitle section961eb48Bump to 8.8.10 (include vlix's CE icons for repo distribution)186a451Add CE power button and calibration logo icons030ae77Bump to 8.8.9 for repo distribution of codec-logo settings68fa2dfCodec logos: add layout + position skin settings
Addon repository (p3i_repo, 12 commits)
15c20b5Publish skin.p3i.estuary 8.8.15.2 (re-cut from 8.8.15 source, excludes stray 9b6997c)3ce26f6Track packed media XBT in tree to match the published zip687d191Publish skin.p3i.estuary 8.8.15.1 (TexturePacker XBT + CE overlay)05132fePublish skin.p3i.estuary 8.8.15 (PlayerProcessInfo updates)bcc84c5Publish skin.p3i.estuary 8.8.13.1 (XBT-packed repo variant) + pack tool1ca9c18Publish skin.p3i.estuary 8.8.13fdc5e02Publish skin.p3i.estuary 8.8.12 (codec-logo active-area setting)60e08f4Add script.module.jurialmunkey 0.2.35 (TMDBHelper 6.15.6 dependency)9a108cfinputstream.ffmpegdirect 666.22.2.5-p3i.1, inputstream.adaptive 666.21.5.18-p3i.14e90aa8Publish skin.p3i.estuary 8.8.11 (PPI subtitle section update)90f683aPublish skin.p3i.estuary 8.8.10 (CE power button + calibration logo icons)92eccf3Publish 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!):
- vlix —
skin.p3i.estuaryupdates (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.