mirror of
https://gitlab.freedesktop.org/emersion/libdisplay-info.git
synced 2024-12-24 21:58:59 +01:00
wip: edid: encode basic params and features
Signed-off-by: Simon Ser <contact@emersion.fr>
This commit is contained in:
parent
c9f7dc203f
commit
cc14df1c08
1 changed files with 30 additions and 0 deletions
30
edid.c
30
edid.c
|
@ -1764,6 +1764,33 @@ encode_vendor_product(const struct di_edid_vendor_product *vendor_product,
|
|||
return true;
|
||||
}
|
||||
|
||||
static bool
|
||||
encode_basic_params_features(const struct di_edid *edid,
|
||||
uint8_t data[static EDID_BLOCK_SIZE])
|
||||
{
|
||||
const struct di_edid_video_input_digital *digital = &edid->video_input_digital;
|
||||
const struct di_edid_screen_size *screen_size = &edid->screen_size;
|
||||
|
||||
set_bit(&data[0x14], 7, edid->is_digital);
|
||||
|
||||
if (edid->is_digital) {
|
||||
if (digital->color_bit_depth != 0) {
|
||||
if (digital->color_bit_depth % 2 != 0 ||
|
||||
digital->color_bit_depth < 6 ||
|
||||
digital->color_bit_depth > 16) {
|
||||
return false;
|
||||
}
|
||||
set_bit_range(&data[0x14], 6, 4, (uint8_t)((digital->color_bit_depth - 4) / 2));
|
||||
}
|
||||
|
||||
set_bit_range(&data[0x14], 3, 0, digital->interface);
|
||||
} else {
|
||||
return false; /* TODO */
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
ssize_t
|
||||
di_edid_format(const struct di_edid *edid, void *buf, size_t buf_size)
|
||||
{
|
||||
|
@ -1787,6 +1814,9 @@ di_edid_format(const struct di_edid *edid, void *buf, size_t buf_size)
|
|||
if (!encode_vendor_product(&edid->vendor_product, data)) {
|
||||
return -1;
|
||||
}
|
||||
if (!encode_basic_params_features(edid, data)) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* TODO */
|
||||
|
||||
|
|
Loading…
Reference in a new issue