Changelog
libCEC 8.1.3 supersedes 8.1.2, which was tagged but never published — everything below the build sections shipped in that tag and reaches users here for the first time.
The vendor work is the substance of the release: a Sony command handler, reworked active-source and power-state tracking for the LG, Philips, Samsung and Panasonic handlers, and the connected display's model year now deciding which quirks apply. On top of that, 8.1.3 fixes what the build itself produced.
Highlights
- A Sony command handler — asks a set that woke up without announcing it for its power status, reports standby for a source the set treats as switched off, and re-announces the sources when it wakes
- The display's model year now selects the vendor quirks — read from its EDID where one can be read; an unreadable EDID counts as a recent set
- LG sets no longer report every listed source as powered on, and keep the source you were watching when the TV routes to itself while powering on
- The Linux tarball now carries the same backends as the Debian packages — the Linux kernel CEC framework, Exynos and AOCEC, not just the Pulse-Eight USB adapter
- The Node.js binding is x64-only on Windows, by construction and in writing — Node has had no 32-bit Windows build since v23, so the x86 installers cannot offer the component and no longer pretend otherwise
- Windows binaries are code-signed (Azure Artifact Signing)
Sony
- added: a sony command handler: ask a set that woke up without announcing it for its power status, report standby for a source that the set treats as switched off, and announce the sources again when it wakes
LG
- fixed: report standby for the devices that are not the active source, instead of telling the TV that every source it can list is powered on
- fixed: keep the source that was being watched when the TV announces a routing change to itself while powering on, rather than landing on input 1
- fixed: stop blocking the processor thread for two seconds when the TV powers a source on, which left the bus unserved and never claimed the source afterwards
- fixed: only let the active source report LG's own deck status code, and report 'stop' for the others
- changed: report CEC version 1.4 rather than 1.3a, matching the version libCEC claims everywhere else
- changed: say in the log that a TV repeatedly asking for the power status is most likely not getting a signal, and log the physical address to check, instead of reporting that the TV bugged out
Philips
- fixed: keep the active source when the TV settles on a different address under the same HDMI port while powering up, which left the source looking dead
- changed: announce the philips vendor id on the bus, as the LG and panasonic handlers announce theirs
Samsung
- fixed: follow the TV's power state on the active source, so the source list agrees with what the set is showing (model year 2016 and newer)
- fixed: don't answer the broadcast powered-up vendor command from logical address 0xf, and take the sender's power status from it
Panasonic
- fixed: send the capabilities blob on
<give physical address>and on<give device vendor id>while the TV is still settling after it powered up
General
- added: read the connected display's model year from its EDID where one can be read, and use it to decide which vendor quirks apply; an unreadable EDID counts as a recent set
- changed: removed the deck status update on activate source, which has been switched off for every vendor since 2012
Linux
- fixed: the tarball shipped fewer backends than the Debian packages built beside it from the same run; it is now configured with the same flags
debian/rulespasses, so both carryP8_USB, DRM, P8_detect, randr, Exynos, Linux_kernel_API, AOCEC(#732)
Windows
- fixed: the x86 installers ship no Node.js binding and nothing said so. The addon is now x64-only in the builder and the NSIS component is compiled in only when the addon was staged and the target is not x86, so an x86 installer cannot offer a component it has no payload for. Documented in
docs/README.windows.md, the Node.js binding README andCLAUDE.md(#733)
Node.js binding
- fixed:
memset()overcec_commandandICECCallbacks, neither of which is trivially copyable (-Wclass-memaccess). Both types clear themselves in their constructors, and thememsetintransmit()was undoingcec_command::Clear()'s defaults (#730)
API
- fixed:
cec_commandnow declares its copy constructor explicitly. A user-declared copy assignment operator deprecates the implicitly generated one, so every consumer copying a command warned under-Wdeprecated-copy(#730)
Build
- fixed: build the Python wrapper against SWIG 4.5, which removed the Python 2 compatibility macros its typemaps relied on (#726)
- fixed: cmake deprecation warning for
SWIG_LINK_LIBRARIESwhen configuring the Python wrapper (#729) - fixed:
dpkg-gencontrolwarning about the undefined${shlibs:Depends}in thelibcecmeta package, which ships no binaries (#731) - fixed: don't let an unrelated stale local tag stop a release
Full Changelog: libcec-8.1.1...libcec-8.1.3