This is a C++ library for parsing and generating EDID binaries. It's targeted against E-EDID Release A, Revision 2 with EDID structure 1.4 and CTA Extension Version 3 (as described in CTA-861-I) however the full support of them is not guaranteed.
Besides providing interfaces for working with EDID binaries in C++ applications, libedid
provides bidirectional JSON adapters in order to achieve a language-independent interface.
This code is written for educational purposes. Use it on your risk.
The project uses CMake as a build tool and nix as a package manager.
Here is an example of build procedure for Linux:
nix-shell
cmake -B build/ .
cmake --build build/
Or just invoke
nix-build
and build output will appear in result/
.
The list of supported blocks of Base EDID is here in EighteenByteDescriptor
.
The list of supported blocks of CTA Extension is here in CtaDataBlock
.
- GitHub Actions workflows could be cleaned up.
- Some cpplint checks are skipped (see TODOs in
scripts/static_analysis.sh
). src/json.cc
has too much boilerplate code.linuxhw/EDID
coverage could be indicated via GitHub Badges.- Rework Established Timings III multi-byte enums in the Colorimetry Data Block style.
- Unify using of optional values in JSON Schemas.
- Setting Aspect Ratio instead of Screen Size is not supported.
- Incorrect Video input parameters bitmap and Display type for analog input type. (TODO: std::variant to distinct)
- Display Range Limits Display Descriptor doesn't describe Secondary GTF curve and CVT data.
- Chromaticity is not deserialized.
- Gamma is printed in the floating-point format though BaseBlock stores it in the integer format.
- YCbCr color encodings are named as YCrCb (in the spec also, maybe due to the order mentioned in BT.601).
- ID Serial Number always exists even if it's all zero.
- No
UnknownDataBlock
for Base EDID.
- Format-specific parameters of Short Audio Descriptors are incorrect for any audio formats except of Linear PCM.