Color management
色彩管理扩展的目的是让客户端了解输出的色彩属性,并告知 compositor 其在 surface 上内容的色彩属性。所有 surface 内容都必须是为某个显示设备准备的,但不一定是为了当前的显示设备。这样做使得 compositor 能够根据内容的预期外观,对不同输出的内容执行自动色彩管理。
有关介绍,请参阅 Wayland 文档中的 "Color management" 部分:https://wayland.freedesktop.org/docs/html/ 。
色彩属性通过图像描述对象来表示,该对象在创建后是不可变的。wl_output 始终有一个关联的图像描述,客户端可以观察到。wl_surface 始终有一个关联的首选图像描述,作为 compositor 选择的提示,客户端也可以观察到。客户端可以在 wl_surface 上设置图像描述,以表示 surface 内容的色彩特征。
图像描述本质上定义了一个显示设备及其(间接的)观看环境。图像描述包括 SDR 和 HDR 色度学和编码、HDR 元数据以及与观看环境相关的一些参数。图像描述不包含通过 color-representation 扩展设置的属性。预计 color-representation 扩展将在必要时与 color-management 扩展结合使用,特别是对于 YUV 系列像素格式。
此协议的规范性附录位于此 XML 文件旁边的 appendix.md 文件中。
color-and-hdr 仓库 (https://gitlab.freedesktop.org/pq/color-and-hdr) 包含有关协议设计和传统色彩管理的背景信息。它还包含术语表、数字色彩学习资源、工具、示例等。
此协议中使用的术语基于常见的色彩科学文献。但是,某些术语对不同的人可能有不同的含义。有关术语的权威解释,请参阅 color-and-hdr 仓库中的术语表。
除非另有明确说明,此协议定义的所有值都在 "显示参考" 域中。即它们是关于色彩信号及其与显示色彩的关系,而不是关于物理世界中的光或人类视觉系统感知的色彩。
用于获取 wl_surface 和 wl_output 对象的色彩管理扩展以及创建客户端自定义图像描述对象的单例全局接口。扩展接口允许获取输出的图像描述和设置 surface 的图像描述。
合成器不应移除此全局对象。
destroy()
销毁 wp_color_manager_v1 对象。这不会以任何方式影响任何其他对象。
get_output(id: new_id<wp_color_management_output_v1>, output: object<wl_output>)
参数 | 类型 | 描述 |
|---|---|---|
| id | new_id<wp_color_management_output_v1> | |
| output | object<wl_output> |
为给定的 wl_output 创建一个新的 wp_color_management_output_v1 对象。
详见 wp_color_management_output_v1 接口。
get_surface(id: new_id<wp_color_management_surface_v1>, surface: object<wl_surface>)
参数 | 类型 | 描述 |
|---|---|---|
| id | new_id<wp_color_management_surface_v1> | |
| surface | object<wl_surface> |
如果给定的 wl_surface 已存在 wp_color_management_surface_v1 对象,则引发协议错误 surface_exists。
为给定的 wl_surface 创建一个新的 wp_color_management_surface_v1 对象。
详见 wp_color_management_surface_v1 接口。
get_surface_feedback(id: new_id<wp_color_management_surface_feedback_v1>, surface: object<wl_surface>)
参数 | 类型 | 描述 |
|---|---|---|
| id | new_id<wp_color_management_surface_feedback_v1> | |
| surface | object<wl_surface> |
为给定的 wl_surface 创建一个新的 wp_color_management_surface_feedback_v1 对象。
详见 wp_color_management_surface_feedback_v1 接口。
create_icc_creator(obj: new_id<wp_image_description_creator_icc_v1>)
参数 | 类型 | 描述 |
|---|---|---|
| obj | new_id<wp_image_description_creator_icc_v1> | the new creator object |
创建一个基于 ICC 的图像描述创建器对象,所有属性初始未设置。客户端可以使用该对象的接口定义图像描述所需的所有属性,最终创建 wp_image_description_v1 对象。
当合成器通告 wp_color_manager_v1.feature.icc_v2_v4 时可以使用此请求。否则此请求将引发协议错误 unsupported_feature。
create_parametric_creator(obj: new_id<wp_image_description_creator_params_v1>)
参数 | 类型 | 描述 |
|---|---|---|
| obj | new_id<wp_image_description_creator_params_v1> | the new creator object |
创建一个参数化图像描述创建器对象,所有属性初始未设置。客户端可以使用该对象的接口定义图像描述所需的所有属性,最终创建 wp_image_description_v1 对象。
当合成器通告 wp_color_manager_v1.feature.parametric 时可以使用此请求。否则此请求将引发协议错误 unsupported_feature。
create_windows_scrgb(image_description: new_id<wp_image_description_v1>)
参数 | 类型 | 描述 |
|---|---|---|
| image_description | new_id<wp_image_description_v1> |
此请求为所谓的 Windows-scRGB 刺激编码创建一个预定义的图像描述。这源自 Windows 10 对其自身 scRGB 色彩空间定义的处理,用于以 BT.2100/PQ 信令模式驱动的 HDR 屏幕。
Windows-scRGB 使用 sRGB (BT.709) 色彩原色和白点。传递特性为扩展线性。
标称色彩通道值范围是扩展的,意味着它包含负值和大于 1.0 的值。负值用于突破 sRGB 色域边界。要使用扩展范围,客户端需要使用能够表示这些值的像素格式,例如每通道 16 位浮点数。
标称色彩值 R=G=B=0.0 对应 BT.2100/PQ 系统 0 cd/m²,R=G=B=1.0 对应 BT.2100/PQ 系统 80 cd/m²。最大值为 R=G=B=125.0 对应 10k cd/m²。
Windows 10 通过将 Windows-scRGB 转换为 BT.2100/PQ 进行显示,保持 CIE 1931 色度并按上述方式映射亮度。信号不进行任何针对观看条件的调整。
Windows-scRGB 的参考白电平未知。如果 compositor 处理必须假定参考白电平,应使用 R=G=B=2.5375 对应 ITU-R BT.2408-7 报告中的 203 cd/m²。
Windows-scRGB 的目标色彩体积未知。色域可能是 sRGB 和 BT.2100 之间的任何范围。
注意:EGL_EXT_gl_colorspace_scrgb_linear 定义与 Windows-scRGB 不同,它使用 R=G=B=1.0 作为参考白电平,而 Windows-scRGB 的参考白电平未知或可变。然而,Windows 可能同时将 EGL_EXT_gl_colorspace_scrgb_linear 和 Vulkan VK_COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT 实现为 Windows-scRGB。
当 compositor 通告 wp_color_manager_v1.feature.windows_scrgb 时可以使用此请求。否则此请求将引发协议错误 unsupported_feature。
生成的图像描述对象不允许 get_information 请求。应发送 wp_image_description_v1.ready 事件。
get_image_description(image_description: new_id<wp_image_description_v1>, reference: object<wp_image_description_reference_v1>)
参数 | 类型 | 描述 |
|---|---|---|
| image_description | new_id<wp_image_description_v1> | |
| reference | object<wp_image_description_reference_v1> |
此请求检索引用背后的图像描述。
get_information 请求仅在创建引用的请求允许时才能使用。
supported_intent(render_intent: uint<wp_color_manager_v1.render_intent>)
参数 | 类型 | 描述 |
|---|---|---|
| render_intent | uint<wp_color_manager_v1.render_intent> | rendering intent |
当此对象创建时,应立即为合成器支持的每个渲染意图发送一次此事件。
合成器不得通告在绑定接口版本中已弃用的意图。
supported_feature(feature: uint<wp_color_manager_v1.feature>)
参数 | 类型 | 描述 |
|---|---|---|
| feature | uint<wp_color_manager_v1.feature> | supported feature |
当此对象创建时,应立即为枚举中列出的每个合成器支持的功能发送一次此事件。
合成器不得通告在绑定接口版本中已弃用的功能。
supported_tf_named(tf: uint<wp_color_manager_v1.transfer_function>)
参数 | 类型 | 描述 |
|---|---|---|
| tf | uint<wp_color_manager_v1.transfer_function> | Named transfer function |
当此对象创建时,应立即为合成器在参数化图像描述创建器中支持的每个命名传递函数发送一次此事件。
合成器不得通告在绑定接口版本中已弃用的传递函数。
supported_primaries_named(primaries: uint<wp_color_manager_v1.primaries>)
参数 | 类型 | 描述 |
|---|---|---|
| primaries | uint<wp_color_manager_v1.primaries> | Named color primaries |
当此对象创建时,应立即为合成器在参数化图像描述创建器中支持的每组命名原色发送一次此事件。
合成器不得通告在绑定接口版本中已弃用的名称。
error { unsupported_feature, surface_exists }
参数 | 值 | 描述 |
|---|---|---|
| unsupported_feature | 0 | 请求不支持 |
| surface_exists | 1 | 色彩管理 surface 已存在 |
render_intent { perceptual, relative, saturation, absolute, relative_bpc, absolute_no_adaptation }
参数 | 值 | 描述 |
|---|---|---|
| perceptual | 0 | 感知 |
| relative | 1 | 媒体相对色度 |
| saturation | 2 | 饱和度 |
| absolute | 3 | ICC 绝对色度 |
| relative_bpc | 4 | 媒体相对色度 + 黑点补偿 |
| absolute_no_adaptation起始版本 2 | 5 | ICC 绝对色度(无适应) 此渲染意图是修改后的绝对渲染意图,假设观察者未适应显示白点,因此不进行 surface 与显示之间的色度适应。这对于色彩校样应用程序很有用。 |
有关渲染意图的更多详情,请参阅 International Color Consortium 的 ICC.1:2022 规范。
ICC 定义的渲染意图原则适用于所有类型的图像描述,不仅限于带有 ICC 文件配置文件的图像描述。
合成器必须支持感知渲染意图。其他渲染意图是可选的。
feature { icc_v2_v4, parametric, set_primaries, set_tf_power, set_luminances, set_mastering_display_primaries, extended_target_volume, windows_scrgb }
参数 | 值 | 描述 |
|---|---|---|
| icc_v2_v4 | 0 | create_icc_creator 请求 |
| parametric | 1 | create_parametric_creator 请求 |
| set_primaries | 2 | 参数化 set_primaries 请求 |
| set_tf_power | 3 | 参数化 set_tf_power 请求 |
| set_luminances | 4 | 参数化 set_luminances 请求 |
| set_mastering_display_primaries | 5 | 参数化 set_mastering_display_primaries 请求 合成器支持 set_mastering_display_primaries 请求,目标色域完全包含在主色域内。 |
| extended_target_volume | 6 | 参数化目标超出主色域 合成器还支持扩展到主色域之外的目标色域。 仅在同时支持 set_mastering_display_primaries 功能时才能通告此功能。 |
| windows_scrgb | 7 | create_windows_scrgb 请求 |
primaries { srgb, pal_m, pal, ntsc, generic_film, bt2020, cie1931_xyz, dci_p3, display_p3, adobe_rgb }
参数 | 值 | 描述 |
|---|---|---|
| srgb | 1 | BT.709 标准定义的 sRGB 色彩空间原色 由以下标准定义的原色: |
| pal_m | 2 | BT.470 标准定义的 PAL-M 原色 由以下标准定义的原色: |
| pal | 3 | BT.601 标准定义的 PAL 原色 由以下标准定义的原色: |
| ntsc | 4 | BT.601 标准定义的 NTSC 原色 由以下标准定义的原色: |
| generic_film | 5 | 使用 C 光源的通用胶片色彩滤镜 由 ITU-T H.273 建议书 "Coding-independent code points for video signal type identification" 为 "generic film" 定义的原色。 |
| bt2020 | 6 | BT.2020 和 BT.2100 标准定义的原色 由以下标准定义的原色: |
| cie1931_xyz | 7 | 完整 CIE 1931 XYZ 色彩空间的原色 由以下标准定义为 CIE 1931 XYZ 色彩空间最大范围的原色: |
| dci_p3 | 8 | SMPTE RP 431 标准定义的 DCI P3 色彩空间原色 由数字电影系统定义并发布于 SMPTE RP 431-2 (2011) 的原色。 |
| display_p3 | 9 | SMPTE EG 432 标准定义的 DCI-P3 色彩空间 Display P3 变体原色 由数字电影系统定义并发布于 SMPTE EG 432-1 (2010) 的原色。 |
| adobe_rgb | 10 | ISO 12640 标准定义的 Adobe RGB 色彩空间原色 由 Adobe 定义为 "Adobe RGB" 并于 ISO 12640-4 (2011) 发布的原色。 |
用于编码已知原色集的命名原色。
值 0 无效,永远不会出现在枚举列表中。
transfer_function { bt1886, gamma22, gamma28, st240, ext_linear, log_100, log_316, xvycc, srgb, ext_srgb, st2084_pq, st428, hlg, compound_power_2_4 }
参数 | 值 | 描述 |
|---|---|---|
| bt1886 | 1 | BT.1886 显示传递特性 Rec. ITU-R BT.1886 是以下标准假定的显示传递特性:
此传递函数包含来自 Rec. ITU-R BT.2035 的以下默认亮度: |
| gamma22 | 2 | 假设显示 gamma 2.2 传递函数 由以下标准定义的传递特性: |
| gamma28 | 3 | 假设显示 gamma 2.8 传递函数 由以下标准定义的传递特性: |
| st240 | 4 | SMPTE ST 240 传递函数 由以下标准定义的传递特性: |
| ext_linear | 5 | 扩展线性传递函数 定义在所有实数上的线性传递函数。归一化电信号值等于归一化光信号值。 |
| log_100 | 6 | 对数 100:1 传递函数 对数传递特性(100:1 范围)。 |
| log_316 | 7 | 对数 (100*Sqrt(10) : 1) 传递函数 对数传递特性(100 * Sqrt(10) : 1 范围)。 |
| xvycc | 8 | IEC 61966-2-4 传递函数 由以下标准定义的传递特性: |
| srgb弃用版本 2 | 9 | 已弃用(模糊的 sRGB 传递函数) 由以下标准定义的传递特性:
根据经验,视频、电影和计算机图形使用 gamma22,ICC 校准的打印工作流使用 compound_power_2_4。 |
| ext_srgb弃用版本 2 | 10 | 已弃用(扩展 sRGB 分段传递函数) 由以下标准定义的传递特性: |
| st2084_pq | 11 | 感知量化器传递函数 由以下标准定义的传递特性:
此传递函数包含以下默认亮度:
主色域最小值和最大值之间的差值必须约为 10000 cd/m²,因为这是 ST 2084 和 BT.2100 定义的 EOTF 的摆幅。参考白的默认值是协议补充:由 ITU-R BT.2408-7 报告建议,不是 ST 2084 或 BT.2100 的一部分。 |
| st428 | 12 | SMPTE ST 428 传递函数 由以下标准定义的传递特性: |
| hlg | 13 | 混合对数伽马传递函数 由以下标准定义的传递特性:
此传递函数包含以下默认亮度:
HLG 是一种相对的显示参考信号,具有指定的到显示峰值亮度的非线性映射(HLG OOTF)。此处使用的所有 HLG 绝对亮度值均假设峰值显示为 1000 cd/m²。 参考白的默认值是协议补充:由 ITU-R BT.2408-7 报告建议,不是 ARIB STD-B67 或 BT.2100 的一部分。 |
| compound_power_2_4起始版本 2 | 14 | IEC 61966-2-1 编码函数 由 IEC 61966-2-1 定义的编码特性,适用于反转编码函数的显示设备。 |
用于表示已知显示设备传递特性的命名传递函数。
值 0 无效,永远不会出现在枚举列表中。
公式见 appendix.md。
wp_color_management_output_v1 描述输出的色彩属性。
wp_color_management_output_v1 与 wl_output 对象底层的 wl_output 全局对象关联。因此客户端销毁 wl_output 对象没有影响,但合成器移除输出全局对象会使 wp_color_management_output_v1 对象变为惰性。
destroy()
销毁 wp_color_management_output_v1 对象。这不会影响任何剩余的协议对象。
get_image_description(image_description: new_id<wp_image_description_v1>)
参数 | 类型 | 描述 |
|---|---|---|
| image_description | new_id<wp_image_description_v1> |
为输出的当前图像描述创建一个新的 wp_image_description_v1 对象。输出始终恰好有一个活动的图像描述,因此客户端应销毁此请求先前调用创建的图像描述。此请求通常作为对 image_description_changed 事件的响应或在创建 wp_color_management_output_v1 对象时发送。
输出的图像描述表示输出期望的色彩编码。如果内容更新与其显示输出的图像描述匹配,可能会有性能和功耗优势,以及更好的色彩再现。如果内容更新在与其图像描述不匹配的其他输出上显示,则这些输出上的色彩再现可能会明显更差。
创建的 wp_image_description_v1 对象保存对象创建时输出的图像描述。
生成的图像描述对象允许 get_information 请求。
如果此协议对象是惰性的,生成的图像描述对象应立即发送 wp_image_description_v1.failed 事件,原因为 no_output。
如果接口版本不足以支持输出的图像描述,即客户端不支持传递关键信息所需的所有事件,生成的图像描述对象应立即发送 wp_image_description_v1.failed 事件,原因为 low_version。
否则对象应立即发送 ready 事件。
image_description_changed()
每当输出的图像描述更改时发送此事件,随后是所有扩展中共用的 wl_output.done 事件。
如果客户端想使用更新后的图像描述,需要再次调用 get_image_description,因为图像描述对象是不可变的。
wp_color_management_surface_v1 允许客户端设置 surface 的色彩空间和 HDR 属性。
如果与 wp_color_management_surface_v1 关联的 wl_surface 被销毁,wp_color_management_surface_v1 对象将变为惰性。
destroy()
销毁 wp_color_management_surface_v1 对象,执行与 unset_image_description 相同的操作。
set_image_description(image_description: object<wp_image_description_v1>, render_intent: uint<wp_color_manager_v1.render_intent>)
参数 | 类型 | 描述 |
|---|---|---|
| image_description | object<wp_image_description_v1> | |
| render_intent | uint<wp_color_manager_v1.render_intent> | rendering intent |
如果此协议对象是惰性的,则引发协议错误 inert。
设置底层 surface 的图像描述。图像描述和渲染意图是双缓冲状态,参见 wl_surface.commit。
客户端有责任理解其在 surface 上设置的图像描述,并提供与该图像描述匹配的内容。合成器可能会转换图像以匹配其自身或其他图像描述。
未就绪的图像描述(参见 wp_image_description_v1)在此请求中是禁止的,在这种情况下将引发协议错误 image_description。
所有已就绪的图像描述(参见 wp_image_description_v1)都是允许的,合成器必须始终接受。
当在 surface 上设置图像描述时,它建立了 surface 像素值与 surface 色度之间的明确链接。对于某些像素值,此链接可能是未定义的,详见图像描述创建器接口。非有限浮点值(NaN、Inf)的色度始终是未定义的。
渲染意图提供了客户端对 surface 色度应如何映射到每个输出的偏好。render_intent 值必须是合成器通过 wp_color_manager_v1.render_intent 事件通告的值之一,否则将引发协议错误 render_intent。
默认情况下,surface 没有关联的图像描述或渲染意图。此类 surface 上的色彩处理由合成器实现定义。合成器应将此类 surface 视为 sRGB 处理,但如果有特定要求也可以不同处理。
设置图像描述具有复制语义;此请求之后,可以立即销毁图像描述而不影响 surface 的待处理状态。
unset_image_description()
如果此协议对象是惰性的,则引发协议错误 inert。
此请求从 surface 移除任何图像描述。有关合成器如何处理没有图像描述的 surface,参见 set_image_description。这是双缓冲状态,参见 wl_surface.commit。
error { render_intent, image_description, inert }
参数 | 值 | 描述 |
|---|---|---|
| render_intent | 0 | 不支持的渲染意图 |
| image_description | 1 | 无效的图像描述 |
| inert | 2 | 对惰性对象的禁止请求 |
wp_color_management_surface_feedback_v1 允许客户端获取 surface 的首选图像描述。
如果与此对象关联的 wl_surface 被销毁,wp_color_management_surface_feedback_v1 对象将变为惰性。
destroy()
销毁 wp_color_management_surface_feedback_v1 对象。
get_preferred(image_description: new_id<wp_image_description_v1>)
参数 | 类型 | 描述 |
|---|---|---|
| image_description | new_id<wp_image_description_v1> |
如果此协议对象是惰性的,则引发协议错误 inert。
首选图像描述表示合成器当前对此 wl_surface 的首选色彩编码。如果内容更新的图像描述与首选图像描述匹配,可能会有性能和功耗优势,以及更好的色彩再现。
为 wl_surface 的当前首选图像描述创建一个新的 wp_image_description_v1 对象。客户端应停止使用并销毁此请求先前为关联 wl_surface 创建的图像描述。此请求通常作为对 preferred_changed 事件的响应或在创建 wp_color_management_surface_feedback_v1 对象时发送(如果客户端能够适应图像描述)。
创建的 wp_image_description_v1 对象保存对象创建时 wl_surface 的首选图像描述。
生成的图像描述对象允许 get_information 请求。
如果图像是参数化的,客户端应仅在图像描述与客户端内容完全匹配时才将其设置到 wl_surface 上。特别是如果其他一切都匹配,但目标色域大于客户端所需,客户端应使用其精确参数创建自己的参数化图像描述。
如果接口版本不足以支持首选图像描述,即客户端不支持传递关键信息所需的所有事件,生成的图像描述对象应立即发送 wp_image_description_v1.failed 事件,原因为 low_version,否则对象应立即发送 ready 事件。
get_preferred_parametric(image_description: new_id<wp_image_description_v1>)
参数 | 类型 | 描述 |
|---|---|---|
| image_description | new_id<wp_image_description_v1> |
与 get_preferred 的描述相同,但返回的图像描述保证是参数化的。这适用于只能处理参数化图像描述的客户端。
如果合成器不支持参数化图像描述,将发出 unsupported_feature 错误。
preferred_changed(identity: uint)
参数 | 类型 | 描述 |
|---|---|---|
| identity | uint | the 32-bit image description id number |
从接口版本 2 开始,发送 'preferred_changed2' 而非此事件。定义参见 'preferred_changed2' 事件。
preferred_changed2(identity_hi: uint, identity_lo: uint)
参数 | 类型 | 描述 |
|---|---|---|
| identity_hi | uint | high 32 bits of the 64-bit image description id number |
| identity_lo | uint | low 32 bits of the 64-bit image description id number |
首选图像描述是客户端用于其 wl_surface 内容时可能为合成器带来最大性能和/或质量优势的图像描述。每当合成器更改 wl_surface 的首选图像描述时发送此事件。
此事件发送新首选状态的标识作为参数,因此已知图像描述的客户端可以重用它。否则,如果客户端想知道首选图像描述是什么,应使用 get_preferred 请求。
首选图像描述不会自动用于任何用途。它只是一个提示,客户端可以通过 set_image_description 设置任何有效的图像描述,但使用首选图像描述提供 wl_surface 内容可能会提高性能和色彩准确性。因此,有能力的客户端应按照首选图像描述进行渲染。
此类型的对象用于收集从 ICC 文件创建 wp_image_description_v1 对象所需的所有信息。完整的必需参数集由以下属性组成:
- ICC 文件
如果客户端要创建图像描述,每个必需属性必须恰好设置一次。设置请求会验证属性是否已设置。创建请求会验证所有必需属性是否已设置。可能有多个替代请求用于设置每个属性,在这种情况下客户端必须选择其中一个。
一旦所有属性都已设置,必须使用创建请求来创建图像描述对象,同时销毁创建器。
像素值(ICC 中的设备值)与其各自色度之间的链接由特定 ICC 配置文件的详细信息定义。这些详细信息还决定了色度何时变为未定义。
create(image_description: new_id<wp_image_description_v1>)
参数 | 类型 | 描述 |
|---|---|---|
| image_description | new_id<wp_image_description_v1> |
基于先前在此对象上设置的 ICC 信息创建图像描述对象。合成器必须在某个未定义但有限的时间内解析 ICC 数据。
验证参数集的完整性。如果集不完整,将引发协议错误 incomplete_set。完整集的定义参见此接口的描述。
如果合成器不支持该信息的特定组合,生成的图像描述对象应立即发送 wp_image_description_v1.failed 事件,原因为 'unsupported'。如果从该信息创建了有效的图像描述,最终将改为发送 wp_image_description_v1.ready 事件。
此请求销毁 wp_image_description_creator_icc_v1 对象。
生成的图像描述对象不允许 get_information 请求。
set_icc_file(icc_profile: fd, offset: uint, length: uint)
参数 | 类型 | 描述 |
|---|---|---|
| icc_profile | fd | ICC profile |
| offset | uint | byte offset in fd to start of ICC data |
| length | uint | length of ICC data in bytes |
设置用作图像描述基础的 ICC 配置文件。
数据应在给定偏移量处通过给定的 fd 找到,具有给定的长度。fd 必须可寻址和可读。违反这些要求将引发协议错误 bad_fd。
如果由于与客户端无关的错误导致读取数据失败,合成器应在创建的 wp_image_description_v1 上发送 wp_image_description_v1.failed 事件,原因为 'operating_system'。
ICC 配置文件的最大大小为 32 MB。如果长度大于该值或为零,将引发协议错误 bad_size。如果 offset + length 超过文件大小,将引发协议错误 out_of_file。
合成器可以在此请求之后的任何时间读取文件,直到以下先发生的情况:
- 如果发出了 create 请求,wp_image_description_v1 对象发送 failed 或 ready 事件;或
- 如果未发出 create 请求,此 wp_image_description_creator_icc_v1 对象被销毁。
合成器不得修改文件内容,fd 可以被密封以防止写入和大小更改。客户端必须尽最大努力确保数据在合成器读取期间不会更改。
数据必须表示有效的 ICC 配置文件。ICC 配置文件版本必须为 2 或 4,必须是 3 通道配置文件,类别必须为 Display 或 ColorSpace。违反这些要求不会导致协议错误,但最终会在创建的 wp_image_description_v1 上发送 wp_image_description_v1.failed 事件,原因为 'unsupported'。
有关 ICC 配置文件的更多详情,请参阅 International Color Consortium 规范 ICC.1:2022。
如果此对象已设置 ICC 文件,将引发协议错误 already_set。
error { incomplete_set, already_set, bad_fd, bad_size, out_of_file }
参数 | 值 | 描述 |
|---|---|---|
| incomplete_set | 0 | 不完整的参数集 |
| already_set | 1 | 属性已设置 |
| bad_fd | 2 | fd 不可寻址和可读 |
| bad_size | 3 | 无数据或数据过多 |
| out_of_file | 4 | offset + length 超过文件大小 |
此类型的对象用于收集创建 wp_image_description_v1 对象所需的所有参数。完整的必需参数集由以下属性组成:
- 传递特性函数 (tf)
- 原色和白点的色度(主色域)
以下属性是可选的,如果未明确设置则有明确定义的默认值:
- 主色域亮度范围
- 参考白亮度电平
- 母版显示原色和白点(目标色域)
- 母版亮度范围
以下属性是可选的,如果未明确设置将被忽略:
- 最大内容亮度电平
- 最大帧平均亮度电平
如果客户端要创建图像描述,每个必需属性必须恰好设置一次。设置请求会验证属性是否已设置。创建请求会验证所有必需属性是否已设置。可能有多个替代请求用于设置每个属性,在这种情况下客户端必须选择其中一个。
一旦所有属性都已设置,必须使用创建请求来创建图像描述对象,同时销毁创建器。
查看由生成的图像描述定义的显示设备(包括观看环境)的观察者,被假定为完全适应主色域的白点。
以下任一条件将导致像素的色度变为未定义:
- 超出传递特性定义范围的值。
- 超出目标色域的三刺激值。
- 如果不支持 extended_target_volume:超出主色域的三刺激值。
与此接口创建的图像描述最接近的对应物是 ICC 中的 Display 类配置文件。
create(image_description: new_id<wp_image_description_v1>)
参数 | 类型 | 描述 |
|---|---|---|
| image_description | new_id<wp_image_description_v1> |
基于先前在此对象上设置的参数创建图像描述对象。
验证参数集的完整性。如果集不完整,将引发协议错误 incomplete_set。完整集的定义参见此接口的描述。
当 max_cll 和 max_fall 都设置时,max_fall 必须小于或等于 max_cll,否则将引发协议错误 invalid_luminance。
在版本 1 中,以下条件也会导致协议错误 invalid_luminance。版本 2 及更高版本没有此要求。
- 当设置 max_cll 时,它必须大于母版亮度范围的 min L 且小于或等于 max L。
- 当设置 max_fall 时,它必须大于母版亮度范围的 min L 且小于或等于 max L。
如果合成器不支持参数集的特定组合,生成的图像描述对象应立即发送 wp_image_description_v1.failed 事件,原因为 'unsupported'。如果从参数集创建了有效的图像描述,最终将改为发送 wp_image_description_v1.ready 事件。
此请求销毁 wp_image_description_creator_params_v1 对象。
生成的图像描述对象不允许 get_information 请求。
set_tf_named(tf: uint<wp_color_manager_v1.transfer_function>)
参数 | 类型 | 描述 |
|---|---|---|
| tf | uint<wp_color_manager_v1.transfer_function> | named transfer function |
使用显式枚举的命名函数设置传递特性。
当生成的图像描述附加到图像时,内容应根据传递特性的行业标准实践进行解码。
仅允许使用通过 wp_color_manager_v1 事件 supported_tf_named 通告的名称。其他值将引发协议错误 invalid_tf。
如果此对象已设置传递特性,将引发协议错误 already_set。
set_tf_power(eexp: uint)
参数 | 类型 | 描述 |
|---|---|---|
| eexp | uint | the exponent * 10000 |
将色彩分量传递特性设置为具有给定指数的幂曲线。负值通过将曲线的正半部分关于原点镜像处理。曲线的有效域和范围是所有有限实数。此曲线表示从电信号到光信号的色彩通道值转换。
曲线指数应乘以 10000 以获得参数 eexp 值,精度为 4 位小数。
曲线指数必须至少为 1.0 且最多为 10.0。否则将引发协议错误 invalid_tf。
如果此对象已设置传递特性,将引发协议错误 already_set。
当合成器通告 wp_color_manager_v1.feature.set_tf_power 时可以使用此请求。否则此请求将引发协议错误 unsupported_feature。
set_primaries_named(primaries: uint<wp_color_manager_v1.primaries>)
参数 | 类型 | 描述 |
|---|---|---|
| primaries | uint<wp_color_manager_v1.primaries> | named primaries |
使用显式命名集设置原色和白点。这描述了作为色彩值编码基础的主色域。
仅允许使用通过 wp_color_manager_v1 事件 supported_primaries_named 通告的名称。其他值将引发协议错误 invalid_primaries_named。
如果此对象已设置原色,将引发协议错误 already_set。
参数 | 类型 | 描述 |
|---|---|---|
| r_x | int | Red x * 1M |
| r_y | int | Red y * 1M |
| g_x | int | Green x * 1M |
| g_y | int | Green y * 1M |
| b_x | int | Blue x * 1M |
| b_y | int | Blue y * 1M |
| w_x | int | White x * 1M |
| w_y | int | White y * 1M |
使用 CIE 1931 xy 色度坐标设置原色和白点。这描述了作为色彩值编码基础的主色域。
每个坐标值乘以 100 万以获得参数值,精度为 6 位小数。
如果此对象已设置原色,将引发协议错误 already_set。
当合成器通告 wp_color_manager_v1.feature.set_primaries 时可以使用此请求。否则此请求将引发协议错误 unsupported_feature。
set_luminances(min_lum: uint, max_lum: uint, reference_lum: uint)
参数 | 类型 | 描述 |
|---|---|---|
| min_lum | uint | minimum luminance (cd/m²) * 10000 |
| max_lum | uint | maximum luminance (cd/m²) |
| reference_lum | uint | reference white luminance (cd/m²) |
设置主色域亮度范围和参考白亮度电平。这些值包括最小显示发射,但不包括外部眩光。最小显示发射被假定具有主色域白点的色度。
来自 https://www.color.org/chardata/rgb/srgb.xalter 的默认亮度为:
- 主色域最小值:0.2 cd/m²
- 主色域最大值:80 cd/m²
- 参考白:80 cd/m²
设置命名传递特性可能隐含其他默认亮度。
使用此请求时,默认亮度将被覆盖。使用 transfer_function.st2084_pq 时,给定的 'max_lum' 值被忽略,'max_lum' 取为 'min_lum' + 10000 cd/m²。
'min_lum' 和 'max_lum' 指定目标显示器再现的主色域最小和最大亮度。
'reference_lum' 指定目标显示器再现的参考白亮度,并反映目标观看环境。
Compositor 应确保所有内容都是锚定的,即一个图像描述上的 'reference_lum' 输入信号电平和另一个图像描述上的 'reference_lum' 输入信号电平应产生相同的输出电平,即使两个图像表示上的 'reference_lum' 可以不同。
'reference_lum' 可以高于 'max_lum'。在这种情况下,要在图像内容中达到参考白输出电平需要 'extended_target_volume' 功能支持。
如果 'max_lum' 或 'reference_lum' 小于或等于 'min_lum',将引发协议错误 invalid_luminance。
最小亮度乘以 10000 以获得参数 'min_lum' 值,精度为 4 位小数。最大亮度和参考白亮度值不进行缩放。
如果主色域亮度范围和参考白亮度电平已在此对象上设置,将引发协议错误 already_set。
当 compositor 通告 wp_color_manager_v1.feature.set_luminances 时可以使用此请求。否则此请求将引发协议错误 unsupported_feature。
set_mastering_display_primaries(r_x: int, r_y: int, g_x: int, g_y: int, b_x: int, b_y: int, w_x: int, w_y: int)
参数 | 类型 | 描述 |
|---|---|---|
| r_x | int | Red x * 1M |
| r_y | int | Red y * 1M |
| g_x | int | Green x * 1M |
| g_y | int | Green y * 1M |
| b_x | int | Blue x * 1M |
| b_y | int | Blue y * 1M |
| w_x | int | White x * 1M |
| w_y | int | White y * 1M |
使用 CIE 1931 xy 色度坐标提供母版显示的原色和白点。这与 SMPTE ST 2086 的 HDR 静态元数据定义兼容。
母版显示原色和母版显示亮度定义了目标色域。
如果未明确设置母版显示原色,目标色域被假定具有与主色域相同的原色。
目标色域由给定母版显示原色和白点定义的色彩空间中 0.0 到 1.0(含)之间的所有三刺激值定义。容器色彩空间和母版显示色彩空间之间的色度是相同的,即使白点不同也不应用色度适应。
目标色域可以超出主色域,以允许使用现有色彩空间定义(例如 scRGB)获得更大的色域。它也可以小于主色域,以最小化大色彩空间(HDR 元数据)的色域和色调映射距离。
要使用整个目标色域,需要选择合适的像素格式(例如浮点数以超出主色域,或像 xvYCC 那样滥用有限量化范围)。
每个坐标值乘以 100 万以获得参数值,精度为 6 位小数。
如果此对象已设置母版显示原色,将引发协议错误 already_set。
当合成器通告 wp_color_manager_v1.feature.set_mastering_display_primaries 时可以使用此请求。否则此请求将引发协议错误 unsupported_feature。该通告仅暗示支持完全包含在主色域内的目标色域。
如果合成器还支持超出主色域的目标色域,必须通告 wp_color_manager_v1.feature.extended_target_volume。如果客户端使用超出主色域的目标色域而合成器不支持,结果是实现定义的。建议合成器检测此情况并优雅地使图像描述失败,但也可能导致色彩伪影。
设置内容母版处理期间使用的亮度范围,作为最小和最大绝对亮度 L。这些值包括最小显示发射和环境眩光亮度,假定为光学相加并具有主色域白点的色度。这应与 SMPTE ST 2086 的 HDR 静态元数据定义兼容。
母版显示原色和母版显示亮度定义了目标色域。
如果未明确设置母版亮度,目标色域被假定具有与主色域相同的最小和最大亮度。
如果 max L 小于或等于 min L,将引发协议错误 invalid_luminance。
Min L 值乘以 10000 以获得参数 min_lum 值,精度为 4 位小数。Max L 值不缩放用于 max_lum。
当合成器通告 wp_color_manager_v1.feature.set_mastering_display_primaries 时可以使用此请求。否则此请求将引发协议错误 unsupported_feature。该通告仅暗示支持完全包含在主色域内的目标色域。
如果合成器还支持超出主色域的目标色域,必须通告 wp_color_manager_v1.feature.extended_target_volume。如果客户端使用超出主色域的目标色域而合成器不支持,结果是实现定义的。建议合成器检测此情况并优雅地使图像描述失败,但也可能导致色彩伪影。
set_max_cll(max_cll: uint)
参数 | 类型 | 描述 |
|---|---|---|
| max_cll | uint | Maximum content light level (cd/m²) |
设置 CTA-861-H 定义的最大内容亮度电平 (max_cll)。
max_cll 默认未定义。
set_max_fall(max_fall: uint)
参数 | 类型 | 描述 |
|---|---|---|
| max_fall | uint | Maximum frame-average light level (cd/m²) |
设置 CTA-861-H 定义的最大帧平均亮度电平 (max_fall)。
max_fall 默认未定义。
error { incomplete_set, already_set, unsupported_feature, invalid_tf, invalid_primaries_named, invalid_luminance }
参数 | 值 | 描述 |
|---|---|---|
| incomplete_set | 0 | 不完整的参数集 |
| already_set | 1 | 属性已设置 |
| unsupported_feature | 2 | 请求不支持 |
| invalid_tf | 3 | 无效的传递特性 |
| invalid_primaries_named | 4 | 无效的命名原色 |
| invalid_luminance | 5 | 无效的亮度值或范围 |
图像描述携带有关像素色彩编码及其预期显示和观看环境的信息。图像描述通过 wp_color_management_surface_v1.set_image_description 附加到 wl_surface。合成器可以使用此信息将像素值解码为色度上有意义的量,使合成器能够转换 surface 内容以适应各种显示和观看环境。
注意,wp_image_description_v1 对象在创建后不能立即使用。对象最终会发送 'ready' 或 'failed' 事件,这在所有创建它的请求中都有指定。对象在收到 'ready' 事件后被视为 "就绪"。
未就绪的对象使用是非法的,只能被销毁。此接口中的任何其他请求将导致 'not_ready' 协议错误。尝试通过其他接口使用未就绪的对象将引发那里定义的协议错误。
一旦创建且无论如何创建,wp_image_description_v1 对象始终引用一个固定的图像描述。创建后不能更改。
destroy()
销毁此对象。销毁未就绪的对象是安全的。
销毁 wp_image_description_v1 对象没有副作用,即使 wp_color_management_surface_v1.set_image_description 尚未跟随 wl_surface.commit。
get_information(information: new_id<wp_image_description_info_v1>)
参数 | 类型 | 描述 |
|---|---|---|
| information | new_id<wp_image_description_info_v1> |
创建一个 wp_image_description_info_v1 对象,该对象传递构成图像描述的信息。
并非所有图像描述协议对象都允许 get_information 请求。是否允许由创建对象的请求定义。如果不允许 get_information,将引发协议错误 no_information。
failed(cause: uint<wp_image_description_v1.cause>, msg: string)
参数 | 类型 | 描述 |
|---|---|---|
| cause | uint<wp_image_description_v1.cause> | generic reason |
| msg | string | ad hoc human-readable explanation |
如果创建 wp_image_description_v1 对象因未定义为协议错误的原因而失败,则发送此事件。
创建图像描述对象的请求定义了是否以及何时可能发生这种情况。只有此类创建请求可以触发此事件。图像描述成功形成后不能触发此事件。
一旦发送此事件,wp_image_description_v1 对象将永远不会就绪,只能被销毁。
ready(identity: uint)
参数 | 类型 | 描述 |
|---|---|---|
| identity | uint | the 32-bit image description id number |
从接口版本 2 开始,发送 'ready2' 事件而非此事件。
此事件的定义参见 'ready2' 事件。与此事件的区别如下。
id 号仅在协议对象存在期间有效。如果引用同一图像描述记录的所有协议对象被销毁,id 号可能被回收用于不同的图像描述记录。
ready2(identity_hi: uint, identity_lo: uint)
参数 | 类型 | 描述 |
|---|---|---|
| identity_hi | uint | high 32 bits of the 64-bit image description id number |
| identity_lo | uint | low 32 bits of the 64-bit image description id number |
一旦发送此事件,wp_image_description_v1 对象被视为 "就绪"。就绪的对象可用于发送请求,也可通过其他接口使用。
每个就绪的 wp_image_description_v1 协议对象引用合成器中的底层图像描述记录。多个协议对象可能最终引用同一记录。客户端可以通过比较 id 号来识别这些 "副本":如果两个协议对象的数字相同,则协议对象引用同一图像描述记录。两个不同的图像描述记录不能同时具有相同的 id 号。id 号在图像描述记录的生命周期内不会更改。
图像描述 id 号不是协议对象 id。零保留为无效 id 号。客户端不应在协议中通过 id 号引用图像描述。id 号可能无法在 Wayland 连接之间移植。合成器不得发送无效的 id 号。
合成器不得回收图像描述 id 号。
此标识允许客户端对图像描述记录进行去重,如果已有图像描述信息则避免 get_information 请求。
cause { low_version, unsupported, operating_system, no_output }
参数 | 值 | 描述 |
|---|---|---|
| low_version | 0 | 接口版本过低 |
| unsupported | 1 | 不支持的图像描述数据 |
| operating_system | 2 | 与客户端无关的错误 |
| no_output | 3 | 相关输出不再存在 |
精确地发送一次描述图像描述对象的所有匹配事件,最后发送 'done' 事件。
这意味着:
- 如果图像是参数化的,必须发送: - primaries - named_primaries(如适用) - tf_power 和 tf_named 中至少一个(如适用) - luminances - target_primaries - target_luminance
- 如果图像是参数化的,可以发送(如适用): - target_max_cll - target_max_fall
- 如果图像包含 ICC 配置文件,必须发送 icc_file 事件
一旦 wp_image_description_info_v1 对象发送了 'done' 事件,它将自动销毁。
从同一 wp_image_description_v1 创建的每个 wp_image_description_info_v1 应始终返回完全相同的数据。
icc 参数向客户端提供一个文件描述符,可以通过内存映射来提供与图像描述匹配的 ICC 配置文件。fd 是只读的,如果映射则客户端必须使用 MAP_PRIVATE 映射。
ICC 配置文件版本和其他详细信息由合成器决定。没有规定客户端可以请求特定类型的配置文件。
参数 | 类型 | 描述 |
|---|---|---|
| r_x | int | Red x * 1M |
| r_y | int | Red y * 1M |
| g_x | int | Green x * 1M |
| g_y | int | Green y * 1M |
| b_x | int | Blue x * 1M |
| b_y | int | Blue y * 1M |
| w_x | int | White x * 1M |
| w_y | int | White y * 1M |
使用 CIE 1931 xy 色度坐标传递主色域原色和白点。
每个坐标值乘以 100 万以获得参数值,精度为 6 位小数。
primaries_named(primaries: uint<wp_color_manager_v1.primaries>)
参数 | 类型 | 描述 |
|---|---|---|
| primaries | uint<wp_color_manager_v1.primaries> | named primaries |
使用显式枚举的命名集传递主色域原色和白点。
tf_power(eexp: uint)
参数 | 类型 | 描述 |
|---|---|---|
| eexp | uint | the exponent * 10000 |
此图像描述的色彩分量传递特性是纯幂曲线。此事件提供幂函数的指数。此曲线表示从电信号到光信号的像素或色彩值转换。
曲线指数已乘以 10000 以获得参数 eexp 值,精度为 4 位小数。
tf_named(tf: uint<wp_color_manager_v1.transfer_function>)
参数 | 类型 | 描述 |
|---|---|---|
| tf | uint<wp_color_manager_v1.transfer_function> | named transfer function |
使用显式枚举的命名函数传递传递特性。
luminances(min_lum: uint, max_lum: uint, reference_lum: uint)
参数 | 类型 | 描述 |
|---|---|---|
| min_lum | uint | minimum luminance (cd/m²) * 10000 |
| max_lum | uint | maximum luminance (cd/m²) |
| reference_lum | uint | reference white luminance (cd/m²) |
传递主色域亮度范围和参考白亮度电平。这些值包括最小显示发射和环境眩光亮度,假定为光学相加并具有主色域白点的色度。
最小亮度乘以 10000 以获得参数 'min_lum' 值,精度为 4 位小数。最大亮度和参考白亮度值不缩放。
参数 | 类型 | 描述 |
|---|---|---|
| r_x | int | Red x * 1M |
| r_y | int | Red y * 1M |
| g_x | int | Green x * 1M |
| g_y | int | Green y * 1M |
| b_x | int | Blue x * 1M |
| b_y | int | Blue y * 1M |
| w_x | int | White x * 1M |
| w_y | int | White y * 1M |
使用 CIE 1931 xy 色度坐标提供目标色域的原色和白点。这与 SMPTE ST 2086 用于母版显示的 HDR 静态元数据定义兼容。
主色域是关于色彩如何编码的,而目标色域是实际可显示的色域。
每个坐标值乘以 100 万以获得参数值,精度为 6 位小数。
提供图像描述所针对的亮度范围,作为最小和最大绝对亮度 L。这些值包括最小显示发射和环境眩光亮度,假定为光学相加并具有主色域白点的色度。这应与 SMPTE ST 2086 的 HDR 静态元数据定义兼容。
此亮度范围仅为理论值,可能与实际显示发出的光亮度不对应。
Min L 值乘以 10000 以获得参数 min_lum 值,精度为 4 位小数。Max L 值不缩放用于 max_lum。
target_max_cll(max_cll: uint)
参数 | 类型 | 描述 |
|---|---|---|
| max_cll | uint | Maximum content light-level (cd/m²) |
提供图像描述的目标 max_cll。max_cll 由 CTA-861-H 定义。
此亮度仅为理论值,可能与实际显示发出的光亮度不对应。
此对象是对图像描述的引用。此接口冻结在版本 1,以允许其他协议创建 wp_image_description_v1 对象。
可以使用 wp_color_manager_v1.get_image_description 请求检索底层图像描述。
合成器支持
Cage | COSMIC | GameScope | Hyprland | Jay | KWin | Labwc | Louvre | Mir | Muffin | Mutter | niri | phoc | river | Sway | Treeland | Wayfire | Weston | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| wp_color_manager_v1 | x | x | x | 1 | 2 | 1 | x | x | x | x | 1 | x | x | x | x | x | x | x |
Copyright
Copyright 2019 Sebastian Wick Copyright 2019 Erwin Burema Copyright 2020 AMD Copyright 2020-2024 Collabora, Ltd. Copyright 2024 Xaver Hugl Copyright 2022-2025 Red Hat, Inc.
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.