Mirror upstream edid-decode.
samsung-s27a950d-dp and hp-5dq99aa-hdmi are missing some failures
about features we haven't implemented yet. panasonic-mei96a2-dp
has a bogus "Missing Display Product Name" failure, see [1].
[1]: https://lore.kernel.org/linux-media/20220802093219.30599-1-contact@emersion.fr/T/#u
Signed-off-by: Simon Ser <contact@emersion.fr>
This is a bit messy because the values depend on various misc flags
defined earlier in the spec, and the meaning changes between EDID 1.3
and 1.4. On top of that edid-decode prints something confusing in the
EDID 1.3 case.
Signed-off-by: Simon Ser <contact@emersion.fr>
The only caller skips any descriptor with errors, it doesn't surface
back the errno to the library user.
Signed-off-by: Simon Ser <contact@emersion.fr>
This will allow us to use the helpers from cta.c.
The functions are marked "static inline" to avoid warnings about
unused functions.
Signed-off-by: Simon Ser <contact@emersion.fr>
The Display Monitor Timing specification is a PDF with data tables.
A small Python script can be used to extract its contents in a
machine-readable form.
For now only extract a few fields. This can be extended later.
Signed-off-by: Simon Ser <contact@emersion.fr>
The analog/digital flags are left for a future patch.
A join_str() function is introduced in di-edid-decode: upstream
edid-decode uses a comma-separated list with a handful of other
flags.
Signed-off-by: Simon Ser <contact@emersion.fr>
This makes it clearer what the range of the value can be: we no
longer need to deal with 16-bit integers.
Signed-off-by: Simon Ser <contact@emersion.fr>
The spec allows manufacturers to store the aspect ratio in these
fields. Instead of exposing bogus values to the user, mark the
size in mm as undefined.
Signed-off-by: Simon Ser <contact@emersion.fr>
According to table 3.21 note 17, these fields should be set to zero
for some sinks, e.g. front projectors.
edid-decode hides the size from its output if both fields are zero.
Signed-off-by: Simon Ser <contact@emersion.fr>
These two compilers may have different warnings. Make sure we
don't miss any.
The Clang build also supports ASan + UBSan.
Signed-off-by: Simon Ser <contact@emersion.fr>
The motivation is two-fold:
- These were added back when we exposed values outside of the enum
entries. We no longer do that, so these can't be hit.
- The compiler now warns when we are missing an entry from the switch.
Signed-off-by: Simon Ser <contact@emersion.fr>
This should remove the risk to merge a patch with the
FDO_FORCE_REBUILD line uncommented. Mentionning the command in the
manifest makes it easier to remember.
Signed-off-by: Simon Ser <contact@emersion.fr>
A simple version script is used because it allows us to consistently
expose all symbols starting with "di_", removing the risk to forget
to mark a symbol as public.
Signed-off-by: Simon Ser <contact@emersion.fr>
The extra underscore indicates that it's not a function which is
part of our public API. This will allow the next commit to setup the
linker to export functions based on their name.
Signed-off-by: Simon Ser <contact@emersion.fr>
These appear after the basic display parameters and features in
the EDID structure, so it makes sense to put them below in the
header.
I got confused while during a rebase.
While at it, move the declaration for struct di_edid_display_descriptor
before the one for di_edid_get_display_descriptors(), because the
latter uses the former.
Signed-off-by: Simon Ser <contact@emersion.fr>
The first fread call fills our 32 KiB buffer, and then we enter a busy
loop calling fread with zero.
Found via fuzzing with AFL.
Signed-off-by: Simon Ser <contact@emersion.fr>
This adds coverage for two untested code-paths:
- Unset "Serial Number"
- "Model year" instead of "Made in"
This EDID blob comes from Digital/Panasonic/MEI96A2/7CA47BE65E1E [1]
in the linuxhw EDID repository.
[1]: https://github.com/linuxhw/EDID/blob/master/Digital/Panasonic/MEI96A2/7CA47BE65E1E
Signed-off-by: Simon Ser <contact@emersion.fr>
Upstream edid-decode hides the serial number in this case.
The spec says that it's optional, and set to zero when unused.
Signed-off-by: Simon Ser <contact@emersion.fr>
These warnings are easy to miss during development:
../edid.c: In function ‘_di_edid_parse’:
../edid.c:254:25: warning: implicit declaration of function ‘di_edid_destroy’? [-Wimplicit-function-declaration]
254 | di_edid_destroy(edid);
| ^~~~~~~~~~~~~~~
And when missed, the code still compiles. Which means one needs to clean-build
to show them again.
Signed-off-by: Simon Ser <contact@emersion.fr>