1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 13:57:35 +00:00

LibGfx: Move ICC on-disk structs to new BinaryFormat.h

Removes some existing code duplication and allows future files to use
these structs too.
This commit is contained in:
Nico Weber 2023-02-15 19:50:51 -05:00 committed by Andrew Kaster
parent 2a1cd84155
commit 429467f46c
3 changed files with 113 additions and 110 deletions

View file

@ -5,6 +5,7 @@
*/
#include <AK/Endian.h>
#include <LibGfx/ICC/BinaryFormat.h>
#include <LibGfx/ICC/Profile.h>
#include <LibGfx/ICC/Tags.h>
#include <math.h>
@ -17,32 +18,6 @@ namespace Gfx::ICC {
namespace {
// ICC V4, 4.2 dateTimeNumber
// "All the dateTimeNumber values in a profile shall be in Coordinated Universal Time [...]."
struct DateTimeNumber {
BigEndian<u16> year;
BigEndian<u16> month;
BigEndian<u16> day;
BigEndian<u16> hours;
BigEndian<u16> minutes;
BigEndian<u16> seconds;
};
// ICC V4, 4.6 s15Fixed16Number
using s15Fixed16Number = i32;
// ICC V4, 4.14 XYZNumber
struct XYZNumber {
BigEndian<s15Fixed16Number> x;
BigEndian<s15Fixed16Number> y;
BigEndian<s15Fixed16Number> z;
operator XYZ() const
{
return XYZ { x / (double)0x1'0000, y / (double)0x1'0000, z / (double)0x1'0000 };
}
};
ErrorOr<time_t> parse_date_time_number(DateTimeNumber const& date_time)
{
// ICC V4, 4.2 dateTimeNumber
@ -84,39 +59,6 @@ ErrorOr<time_t> parse_date_time_number(DateTimeNumber const& date_time)
return timestamp;
}
// ICC V4, 7.2 Profile header
struct ICCHeader {
BigEndian<u32> profile_size;
BigEndian<PreferredCMMType> preferred_cmm_type;
u8 profile_version_major;
u8 profile_version_minor_bugfix;
BigEndian<u16> profile_version_zero;
BigEndian<DeviceClass> profile_device_class;
BigEndian<ColorSpace> data_color_space;
BigEndian<ColorSpace> profile_connection_space; // "PCS" in the spec.
DateTimeNumber profile_creation_time;
BigEndian<u32> profile_file_signature;
BigEndian<PrimaryPlatform> primary_platform;
BigEndian<u32> profile_flags;
BigEndian<DeviceManufacturer> device_manufacturer;
BigEndian<DeviceModel> device_model;
BigEndian<u64> device_attributes;
BigEndian<u32> rendering_intent;
XYZNumber pcs_illuminant;
BigEndian<Creator> profile_creator;
u8 profile_id[16];
u8 reserved[28];
};
static_assert(AssertSize<ICCHeader, 128>());
ErrorOr<u32> parse_size(ICCHeader const& header, ReadonlyBytes icc_bytes)
{
// ICC v4, 7.2.2 Profile size field