blob: e4b63fa61f39f64b6d79fad01aafd1431a507750 [file] [log] [blame] [edit]
#include "EdidInfo.h"
#include "Common.h"
namespace aidl::android::hardware::graphics::composer3::impl {
std::optional<EdidInfo> EdidInfo::parse(std::span<const uint8_t> blob) {
constexpr size_t kEdidDescriptorOffset = 54;
constexpr size_t kEdidDescriptorLength = 18;
blob = blob.subspan(kEdidDescriptorOffset);
using byte_view = std::span<const uint8_t>;
byte_view descriptor(blob.data(), kEdidDescriptorLength);
if (descriptor[0] == 0 && descriptor[1] == 0) {
ALOGE("%s: missing preferred detailed timing descriptor", __FUNCTION__);
return std::nullopt;
}
const uint8_t w_mm_lsb = descriptor[12];
const uint8_t h_mm_lsb = descriptor[13];
const uint8_t w_and_h_mm_msb = descriptor[14];
return EdidInfo{
.mWidthMillimeters =
static_cast<uint32_t>(w_mm_lsb) | ((static_cast<uint32_t>(w_and_h_mm_msb) & 0xf0) << 4),
.mHeightMillimeters =
static_cast<uint32_t>(h_mm_lsb) | ((static_cast<uint32_t>(w_and_h_mm_msb) & 0xf) << 8),
};
}
} // namespace aidl::android::hardware::graphics::composer3::impl