Files
RedBear-OS/local/recipes/libs/libdisplay-info/source
vasilito e4a44377fb
redbear-ci / check (push) Has been cancelled
libdisplay-info: replace the stub with upstream 0.4.0
The recipe was not building libdisplay-info. It synthesized its own
meson.build declaring `version: '0.2.3'` and compiled a hand-written
stub: one di.c and four headers, 518 lines, 20 exported functions.

0.2.3 does not exist upstream -- the tags are 0.1.0, 0.1.1, 0.2.0, 0.3.0
and 0.4.0. That fabricated version satisfied kwin's

    pkg_check_modules(libdisplayinfo REQUIRED IMPORTED_TARGET libdisplay-info>=0.2.0)

so kwin configured cleanly and then failed to compile utils/edid.cpp on
di_info_get_default_color_primaries, di_info_get_hdr_static_metadata,
di_info_get_supported_signal_colorimetry and di_edid_display_descriptor.
A version gate satisfied by a declaration rather than an implementation.

Now vendors upstream 0.4.0 (gitlab.freedesktop.org/emersion/libdisplay-info):
14 C files, 10898 lines, 10 headers, 94 exported symbols. 0.4.0 rather than
0.2.0 because the colorimetry and HDR static metadata accessors kwin needs
post-date the 0.2.x series -- and they feed the real colour-primaries and
HDR path of the display stack, so a stub returning NULL would have been
wrong at runtime even if it had compiled.

Red Bear delta is one hunk in source/meson.build: the unconditional
subdir('di-edid-decode') and subdir('test') are commented out. Both build
auxiliary executables and a shell test harness that are not part of the
runtime and do not cross-compile for Redox. Library, headers and
pkg-config are untouched.

Verified: builds clean, stages libdisplay-info.so.0.4.0 with all four
symbols kwin needs, pkg-config reports 0.4.0, and kwin's utils/edid.cpp
now compiles.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-03 22:19:38 +03:00
..

libdisplay-info

EDID and DisplayID library.

Goals:

  • Provide a set of high-level, easy-to-use, opinionated functions as well as low-level functions to access detailed information.
  • Simplicity and correctness over performance and resource usage.
  • Well-tested and fuzzed.

Documentation is available on the website.

Using

The public API headers are categorised as either high-level or low-level API as per the comments in the header files. Users of libdisplay-info should prefer high-level API over low-level API when possible.

If high-level API lacks needed features, please propose additions to the high-level API upstream before using low-level API to get what you need. If the additions are rejected, you are welcome to use the low-level API.

This policy is aimed to propagate best practises when interpreting EDID and DisplayID information which can often be cryptic or even inconsistent.

libdisplay-info uses semantic versioning. The public API is not yet stable.

Contributing

Open issues and merge requests on the GitLab project. Discuss and ask questions in the #wayland IRC channel on OFTC.

In general, the Wayland contribution guidelines should be followed. In particular, each commit must carry a Signed-off-by tag to denote that the submitter adheres to the Developer Certificate of Origin 1.1. This project follows the freedesktop.org Contributor Covenant.

Specifications

Both EDID and DisplayID are defined by VESA and the specifications are publicly available. There are multiple versions defined and they have multiple mechanisms for extending the base specification. Some of the extensions also have mechanisms for additional extensions. This sometimes makes it hard to find where a particular data structure is defined.

The raw data is usually read from the Display Data Channel (DDC) but other methods of delivery exist.

Available freely from VESA directly are the base EDID specifications, VESA specified EDID extensions, as well as the base DisplayID specifications. EDID also specifies how DisplayID can be embedded in EDID.

  • VESA Enhanced Extended Display Identification Data (E-EDID) Standard; Release A, Revision 1; February 9, 2000; Defines EDID Structure Version 1, Revision 3
  • VESA Enhanced Extended Display Identification Data (E-EDID) Standard; Release A, Revision 2; September 25, 2006; Defines EDID Structure Version 1, Revision 4
  • VESA Video Timing Block Extension Data (VTB-EXT) Standard; Release A; November 24, 2003
  • VESA Enhanced EDID Localized String Extension Standard; Release A; July 10, 2003
  • VESA Display Transfer Characteristics Data Block (DTCDB) Standard; Version 1.0; August 31, 2006
  • VESA Display Information Extension Block (DI-EXT) Standard; Release A; August 21, 2001
  • VESA Display Device Data Block (DDDB) Standard; Version 1; September 25, 2006
  • VESA Display Identification Data (DisplayID) Standard; Version 1.3; July 5, 2013
  • VESA Display Identification Data (DisplayID) Standard; Version 2.0; 11 September, 2017
  • VESA Display Identification Data (DisplayID) Standard; Version 2.1; 18 November, 2021
  • VESA Display Identification Data (DisplayID) Standard; Version 2.1a; 18 March, 2024

The most common extension to both EDID and DisplayID is CTA-861 which can be downloaded for free from CTA.

  • A DTV Profile for Uncompressed High Speed Digital Interfaces (CTA-861-E, CTA-861-F, CTA-861-G, CTA-861-H, CTA-861-I)
  • HDR Static Metadata Extensions (CTA-861.3-A)

The CTA-861 specification allows for Vendor Specific Data Blocks (VSDB). Their specifications are often proprietary and have to be reverse engineered. Some specifications are available publicly.

The libdisplay-info structures of the low-level API always point to the relevant specification and section therein.

Building

libdisplay-info has the following dependencies:

  • hwdata for the PNP ID database used at build-time only.

libdisplay-info is built using Meson:

meson setup build/
ninja -C build/

Testing

The low-level EDID library is tested against edid-decode. test/data/ contains a small collection of EDID blobs and diffs between upstream edid-decode and our di-edid-decode clone. Our CI ensures the diffs are up-to-date. A patch should never make the diffs grow larger. To re-generate the test data, build edid-decode at the Git revision mentioned in .gitlab-ci.yml, put the executable in PATH, and run ninja -C build/ gen-test-data.

The latest code coverage report is available on GitLab CI.

Fuzzing

To fuzz libdisplay-info with AFL, the library needs to be instrumented:

CC=afl-gcc meson build/
ninja -C build/
afl-fuzz -i test/data/ -o afl/ build/di-edid-decode/di-edid-decode