Skip to content

libCEC 8.1.7

Latest

Choose a tag to compare

@opdenkamp opdenkamp released this 02 Sep 14:06
· 1 commit to master since this release

Changelog

libCEC 8.1.7 fixes three Raspberry Pi threading bugs, stops a Sony's input switch from suspending the box behind it, and makes every distribution ship a licence text that actually matches what is inside it.

Highlights

  • Raspberry Pi: VideoCore callbacks no longer run on VideoCore's own 4KiB stack. vcos asks for that size and does not check that it was granted; glibc refuses and hands out the 8MiB default, musl grants it, and the first log message a callback formatted then ran off the end of the stack. Callbacks now copy their arguments onto a queue and every handler runs on a thread libCEC sized itself (#746).
  • Raspberry Pi: bus changes are reported off the callback dispatch thread. A lost logical address and a physical address change both transmit, and a transmit waits for the VC_CEC_TX confirmation that arrives on the very thread they were blocking. Every such transmit stalled for its full timeout: the address was renegotiated blind, and a hotplug reported its new physical address to nothing.
  • A power toggle no longer switches the device off as the TV selects it (#744). A Sony sends <user control pressed> power (0x40) to wake the source it is switching to, then power on (0x6d) a moment later. Resolved against this device's own power status, a running box reads as on, so libCEC announced <inactive source> and handed the client a power key — suspending the box before the power on arrived. A toggle now only means off while the TV is showing this device.
  • Per-distribution licence texts, generated from one manifest. licenses/components.json records what each component is, whose copyright it is and which distributions carry it. The Windows installer's text now covers the libusb-win32, DPInst and node-addon-api it ships and the source tree does not; the npm and crates.io packages carry a licence text at all; and debian/copyright no longer misstates the AMD ADL headers.

Added

  • cecc-client implements --help and --list-devices; both parsed their option and printed nothing (thanks Barak A. Pearlmutter)
  • man pages for cecc-client and pyCecClient, written by Barak A. Pearlmutter for the Debian package
  • per-distribution licence texts assembled from licenses/, with support/generate-licenses.py writing LICENSE.md, debian/copyright, the npm and crates.io licence files and the installer's own text per build
  • the licence texts name the contributors who hold copyright in the Exynos, AOCEC and Linux backends, record the EventGhost plugin's GPL-2+ terms, and declare the MIT-licensed AMD ADL headers
  • debian/upstream/metadata, pointing the archive's tooling at the issue tracker and the repository

Changed

  • the AMD ADL headers are AMD's recent GPUOpen release under the MIT licence, replacing headers whose terms granted no permission to use, copy, modify or redistribute (thanks Barak A. Pearlmutter)
  • the i.MX6 backend is recorded as GPL-2+ only; its files never carried the commercial paragraph, so the blanket dual licence claimed an option that cannot be offered on them
  • the Pulse-Eight copyright years read 2011-2026 everywhere, the .NET assembly and the cec.dll version resource included
  • Debian: libcec8-dev is Multi-Arch: same, and the libudev-dev build dependency is Linux-only
  • every binding's documentation leads with its registry install (npm, NuGet, crates.io) rather than with building from this tree, and says the package binds the native library rather than carrying it

Fixed

  • RPi: VideoCore callbacks are handled on a thread libCEC sizes itself (#746)
  • RPi: logical address loss and physical address changes are reported off the callback dispatch thread
  • RPi: the VideoCore host was only torn down when it had never been set up, and passive mode was left after the host connection that call needs had been closed
  • a power toggle switched the device off as the TV selected it (#744)
  • the Python module was packaged outside Debian's module search path, so import cec failed on an installed python-libcec
  • Debian: a clean left cmake's generated files in the source tree, so a second build in the same tree started dirty
  • TegraCECDev.h carried no licence header or include guard
  • release.py did not actually serialise the Jenkins builds (#743)
  • spelling: occured to occurred (thanks Barak A. Pearlmutter)

Note on the x86 installer

libcec-x86-8.1.7.exe carries no Node.js component. Node dropped its 32-bit Windows builds in v23, so node-gyp cannot fetch an ia32 node.lib and there is nothing to link a 32-bit addon against. Use libcec-x64-8.1.7.exe if you need the Node.js binding; the difference is otherwise invisible on the release page.

Full Changelog: libcec-8.1.6...libcec-8.1.7