简介
本文档定义了一种新的文件格式的行为,该格式将对数范围增益映射图像编码到 JPEG 图像文件中。不支持新格式的旧版阅读器会读取并显示图像文件中的传统低动态范围图像。支持该格式的阅读器将主图像与增益映射相结合,并在兼容的显示器上渲染高动态范围图像。
本文档的其余部分描述了使用此格式所需的过程方法。从高层次来看,符合此格式的图像的生命周期为
编码
- 增益映射生成
- 增益映射压缩
- 增益映射容器生成
解码
动机
此文件格式的目标是在 SDR 图像文件中编码附加信息,这些信息可以与显示技术结合使用,以在单个文件中生成其最佳的 HDR 渲染效果。
为了使这在实践中可行,文件格式必须
- 向后兼容,以便在简单的查看器上显示传统的 SDR 图像。
- 不占用太多额外空间。
此外,显示技术必须
- 不需要繁重的处理过程来解码。
- 能够适应显示器的 HDR 和 SDR 白点之间的任何比率,这些比率在不同设备之间可能存在很大差异,甚至在单个设备上也可能随时间变化。
最后,该技术必须能够执行所有上述操作,而无需
- 裁剪高光。
- 压暗阴影。
- 更改或压缩局部对比度。
- 更改相对色调关系(场景中的物体之间)。
依赖关系
以下是本规范的规范性引用
- Adobe XMP 规范 第 3 部分:文件存储
- ISO 16684-1:2019 XMP 规范 第 1 部分
- ISO/IEC 14496-12 ISO 基本媒体文件格式
- T.81 (09/92) 连续色调静止图像的数字压缩和编码
- CIPA DC-x 007-2009 多图格式白皮书
定义
SDR 显示器
- 传统的显示器,并非设计用于显示 HDR 内容。这些显示器通常产生的标称峰值亮度约为 400 cd/m2 或更低。
HDR 显示器
- 专为 HDR 内容设计的显示器。这些显示器通常产生的标称峰值亮度高于 SDR 显示器,通常为 800 cd/m2 或更高,并且通常也比 SDR 显示器具有更好的对比度。
主图像
- GContainer 文件中图像的第一个实例,在其后附加了辅助媒体文件。主图像包含定义文件容器中后续辅助媒体项目文件顺序和属性的 GContainer XMP 元数据。
辅助图像
- 附加到 GContainer 文件中主图像后面的后续媒体项目文件。
范围压缩
- 在摄影中,现实世界的场景通常具有比 SDR 显示器所能表示的更大的动态范围。诸如范围压缩(也称为局部色调映射)之类的操作需要降低图像的动态范围。这种降低需要避免裁剪高光或压暗阴影,同时尽可能保留局部对比度。您尝试减小图像中较大亮度边缘的大小,这些边缘对图像的全局对比度贡献更大,同时尝试保留较小亮度边缘的大小,这些边缘是细节。尽管有许多不同的实现方式,但这种操作在当今大多数现代数码相机中都是标准配置。
SDR 白点
- 特定时间点上 SDR 内容在显示器上的最大线性亮度。
HDR 白点
- 特定时间点上 HDR 内容在显示器上的最大线性亮度。此值通常高于 SDR 白点。
提升
- HDR 白点除以 SDR 白点。
最大内容提升(方程式中的
max_content_boost
)- 此值允许内容创建者限制在 HDR 显示器上显示的图像相对于 SDR 渲染效果所能获得的更亮程度。
- 此值对于特定图像而言是一个常数。例如,如果该值为 4,则对于任何给定的像素,显示的 HDR 渲染的线性亮度最多必须是 SDR 渲染的线性亮度的 4 倍。在实践中,这意味着场景中较亮的部分可以显示出高达 4 倍的亮度。
- 在实践中,此值通常大于 1.0。
- 始终大于或等于最小内容提升。
最小内容提升(方程式中的
min_content_boost
)- 此值允许内容创建者限制在 HDR 显示器上显示的图像相对于 SDR 渲染效果所能获得的更暗程度。此值对于特定图像而言是一个常数。
- 例如,如果该值为 0.5,则对于任何给定的像素,显示的 HDR 渲染的线性亮度必须(至少)是 SDR 渲染的线性亮度的 0.5 倍。
- 在实践中,此值通常等于或略小于 1.0。
- 始终小于或等于最大内容提升。
最大显示提升(方程式中的
max_display_boost
)- 显示器在给定时间点支持的最大可用提升。此值会根据设备设置和其他因素(例如环境光条件或屏幕上亮像素的数量)随时间变化。
- 例如,如果此值为 4.0,则表示显示器能够显示亮度最多为 SDR 白点四倍的像素。此值始终 >= 1.0,因为显示器始终可以将 HDR 白点显示得至少与 SDR 白点一样亮。
显示提升
- 等于最大内容提升和最大显示提升中的较小者。此值始终 >= 1.0。
- 例如,如果最大内容提升为 4.0,最大显示提升为 3.0,则显示提升为 3.0。像素显示的亮度最多为 SDR 的 3 倍,因为显示器功能是限制因素。
- 再举一个例子,如果最大内容提升为 4.0,最大显示提升为 5.0,则显示提升为 4.0。像素显示的亮度最多为 SDR 的 4 倍,因为内容的意图是限制因素。
目标 HDR 渲染
- 根据内容创建者的理想 HDR 渲染效果。
自适应 HDR 渲染
- 在根据当前显示提升调整目标 HDR 渲染效果后,显示器上显示的最终 HDR 渲染效果。
增益映射(方程式中的
recovery(x, y)
)- 一个映射,指示在 SDR 渲染中要使每个像素亮多少才能产生目标 HDR 渲染效果。此映射可以是单通道或多通道的。多通道映射指示每个颜色通道(例如红色、绿色和蓝色)的单独增益。本文档说明了单通道映射的情况。
clamp(x, a, b)
- 将值 x 限制在 [a, b] 范围内。
exp2(x)
- 以 2 为底的指数运算;2x。
floor(x)
- 返回小于或等于 x 的最近整数。
log2(x)
- 以 2 为底的对数;log2(x)
pow(b, x)
- 指数运算;bx。
XMP
- 可扩展元数据平台。一个定义了将元数据编码到图像容器中的方法的标准;由ISO 16684-1:2011(E) XMP 规范 第 1 部分定义。
多图格式
- 多图格式是由相机和图像产品协会 (CIPA) 开发的一种技术,用于将多个 JPEG 编码图像存储在一个 JPEG 文件中。
- 有关更多信息,请参阅相关的依赖项,CIPA DC-x 007-2009 多图格式白皮书。
GContainer
- GContainer 是一种将多个图像存储在一个图像容器中的方法,其中一个图像被认为是主图像。任何其他图像都被视为替代版本或辅助版本。XMP 元数据用于传达任何其他图像的存在和含义。有关更多信息,请参阅GContainer 详细信息部分。
编码
本节介绍如何编码符合标准的 JPEG 文件。有关 JPEG 格式的更多信息,请参阅依赖项部分中的T.81 (09/92) 连续色调静止图像的数字压缩和编码。
增益映射生成
相机成像管道通常执行范围压缩操作,以将更高动态范围的亮度数据压缩到传统 SDR 显示器的较低范围内。增益映射提供了一种机制,用于存储足以恢复原始更高动态范围亮度数据的数据。
本节中的以下计算假定使用浮点算术。
以下函数描述了 SDR 图像
SDR'(x, y)
是三通道非线性(通常是伽马编码)的主图像。SDR(x, y)
是三通道主图像的线性版本,通过将其转换为主图像颜色空间的线性版本获得。例如,从具有 sRGB 传输函数的颜色空间转换为保留 sRGB 原色的线性颜色空间。
Ysdr(x, y)
函数定义在 0.0 到 1.0 的范围内,是标准动态范围主图像线性亮度
Ysdr(x, y) = primary_color_profile_to_luminance(SDR(x, y))
HDR 图像存在类似的定义。
HDR'(x, y)
是三通道非线性,即 PQ 或 HLG 编码图像。HDR(x, y)
是三通道线性 HDR 图像。
Yhdr(x, y)
是 HDR 图像中给定点的亮度
Yhdr(x, y) = primary_color_profile_to_luminance(HDR(x, y))
Yhdr(x, y)
定义在 0.0 到最大内容提升的范围内。
SDR 和 HDR 图像必须具有相同的分辨率。SDR 图像的颜色配置文件定义了 HDR 图像的颜色空间。
例如,如果 SDR 主图像具有 Display-P3 颜色配置文件,则 HDR 图像相对于该配置文件的主颜色定义。这意味着 HDR 图像也具有 Display-P3 原色。
增益映射根据包含所需 HDR 图像亮度Yhdr(x, y)
和标准范围亮度图像Ysdr(x, y)
的两个线性图像计算。
pixel_gain(x, y)
函数定义为Yhdr(x, y)
函数与Ysdr(x, y)
函数的比率
pixel_gain(x, y) = (Yhdr(x, y) + offset_hdr) / (Ysdr(x, y) + offset_sdr)
Ysdr(x, y)
和offset_sdr
均为零时,pixel_gain(x, y)
函数的行为是实现定义的。
例如,实现可以通过将pixel_gain(x, y)
定义为 1.0 来处理Ysdr(x, y)
和offset_sdr
均为零的情况。或者,实现还可以通过使用非零offset_sdr
来避免这种情况。
实现可能会选择offset_sdr
和offset_hdr
的值。
增益映射是一个标量函数,它在对数空间中编码pixel_gain(x, y)
,相对于最大内容提升和最小内容提升。
map_min_log2 = log2(min_content_boost)
map_max_log2 = log2(max_content_boost)
log_recovery(x, y) = (log2(pixel_gain(x, y)) - map_min_log2)
/ (map_max_log2 - map_min_log2)
clamped_recovery(x, y) = clamp(log_recovery(x, y), 0.0, 1.0)
recovery(x, y) = pow(clamped_recovery(x, y), map_gamma)
当pixel_gain(x, y)
为零时,recovery(x, y)
函数的行为是实现定义的,因为log2(0)
未定义。
map_gamma
是一个浮点数,必须大于0.0,由实现选择。
最大内容提升和最小内容提升的值是实现定义的,可以由内容创建者任意决定。最大内容提升必须大于或等于1.0。最小内容提升必须在范围(0.0, 1.0]内。
recovery(x, y)
中的值限制在[0.0, 1.0]范围内。
增益映射存储在辅助图像JPEG中,因此必须使用8位无符号整数值进行编码,因此在[0, 255]范围内。每个值代表一个recovery(x, y)
值,并存储在辅助图像的一个像素中。
对于8位无符号整数存储,编码值定义如下
encoded_recovery(x, y) = floor(recovery(x, y) * 255.0 + 0.5)
编码函数的计算在浮点数中完成,并在最后通过舍入转换为8位无符号整数结果,如指示所示。
此编码产生recovery(x, y)
值的8位无符号整数表示,范围从0.0到1.0。编码的增益映射必须作为JPEG存储在辅助图像项中。实现选择在JPEG编码期间使用的压缩量。
将增益映射存储在辅助图像中后,将其附加到具有MPF和GContainer XMP元数据的原始图像。原始图像GContainer目录必须包含增益映射图像的项。
存储的增益映射的分辨率是实现定义的,并且可能与原始图像的分辨率不同。如果增益映射被缩放为与存储的原始图像不同的分辨率,则采样方法必须为双线性或更好,并且是实现定义的。
增益映射的方向必须与原始图像的方向一致。如果存在,则存储的增益映射图像中的任何方向元数据(如EXIF中)都不会被使用。
如果存在,则不会使用增益映射的颜色配置文件。
增益映射容器
颜色配置文件
图像的颜色配置文件必须通过原始图像的ICC配置文件来指示。
XMP属性
原始图像包含XMP元数据,用于定义至少两张图像,并为HDR增益映射格式提供额外的语义信息。
以下小节包含此格式的具体详细信息。有关与GContainer的一般一致性的其他信息,请参阅GContainer详细信息部分。
以下表格中描述的属性值存储为指定XMP基本值类型的XMP简单值。
项目语义值
属性Item:Semantic
定义容器目录中每个媒体项目的应用程序特定含义。
值 | 描述 |
---|---|
Primary | 指示媒体项目是容器中准备显示的原始图像。目录必须包含一个“Primary”项。 |
GainMap | 指示媒体项目是增益映射。目录最多可能包含一个“GainMap”项。 |
HDR增益映射元数据
增益映射元数据编码有关如何解释和应用增益映射以生成原始图像的HDR表示的信息。
增益映射元数据XMP扩展的XMP命名空间URI为http://ns.adobe.com/hdr-gain-map/1.0/
。默认命名空间前缀为hdrgm
。
此元数据存储在增益映射图像的XMP数据包中,以下属性必须出现在增益映射图像XMP的rdf:Description
中
名称 | 类型 | 描述 |
---|---|---|
hdrgm:Version | 文本 | 正在使用的增益映射格式的版本。此版本为“1.0”。必需。 |
hdrgm:BaseRenditionIsHDR | 布尔值 | 指示原始图像的动态范围。“False”表示原始图像为SDR,并且增益映射可以与其组合以生成HDR渲染。“True”表示原始图像为HDR,并且增益映射可能与其组合以生成SDR渲染。必须为“False”。可选;默认值为“False”。 |
hdrgm:GainMapMin | 实数或实数的有序数组 | 存储map_min_log2 的值。这是目标HDR渲染的线性亮度相对于(除以)SDR图像的线性亮度的最小允许比率(在给定像素处)的log2 。可以是单个实数,也可以是实数的有序数组。当为实数的有序数组时,它可以包含一个应用于所有通道的项,或者分别包含三个用于红色、绿色和蓝色通道的项。必须小于或等于hdrgm:GainMapMax 。可选;默认值为0.0。 |
hdrgm:GainMapMax | 实数或实数的有序数组 | 存储map_max_log2 的值。这是目标HDR渲染的线性亮度相对于(除以)SDR图像的线性亮度的最大允许比率(在给定像素处)的log2 。可以是单个实数,也可以是实数的有序数组。当为实数的有序数组时,它可以包含一个应用于所有通道的项,或者分别包含三个用于红色、绿色和蓝色通道的项。必须大于或等于hdrgm:GainMapMin 。必需。 |
hdrgm:Gamma | 实数或实数的有序数组 | 存储map_gamma 的值。这是应用于存储的映射值的伽马。可以是单个实数,也可以是实数的有序数组。当为实数的有序数组时,它可以包含一个应用于所有通道的项,或者分别包含三个用于红色、绿色和蓝色通道的项。必须大于0.0。可选;默认值为1.0。 |
hdrgm:OffsetSDR | 实数或实数的有序数组 | 存储offset_sdr 的值。这是在增益映射生成和应用期间应用于SDR像素值的偏移量。可以是单个实数,也可以是实数的有序数组。当为实数的有序数组时,它可以包含一个应用于所有通道的项,或者分别包含三个用于红色、绿色和蓝色通道的项。必须为0.0或更大。可选;默认值为0.015625(1/64)。 |
hdrgm:OffsetHDR | 实数或实数的有序数组 | 存储offset_hdr 的值。这是在增益映射生成和应用期间应用于HDR像素值的偏移量。可以是单个实数,也可以是实数的有序数组。当为实数的有序数组时,它可以包含一个应用于所有通道的项,或者分别包含三个用于红色、绿色和蓝色通道的项。必须为0.0或更大。可选;默认值为0.015625(1/64)。 |
hdrgm:HDRCapacityMin | 实数 | 存储hdr_capacity_min 的值。这是映射始终应用的最小显示提升值的log2 。此值还会影响根据显示提升应用增益映射的程度。必须为0.0或更大。可选;默认值为0.0。 |
hdrgm:HDRCapacityMax | 实数 | 存储hdr_capacity_max 的值。这是完全应用映射的最大显示提升值的log2 。此值还会影响根据显示提升应用增益映射的程度。必须大于hdrgm:HDRCapacityMin 。必需。 |
增益映射XMP示例
以下有效增益映射XMP数据包示例包含从引言部分说明的示例文件中获取的元数据。
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 5.5.0"> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:hdrgm="http://ns.adobe.com/hdr-gain-map/1.0/" hdrgm:Version="1.0" hdrgm:GainMapMin="-0.57609993" hdrgm:GainMapMax="4.7090998" hdrgm:Gamma="1" hdrgm:OffsetSDR="0.015625" hdrgm:OffsetHDR="0.015625" hdrgm:HDRCapacityMin="0" hdrgm:HDRCapacityMax="4.7090998" hdrgm:BaseRenditionIsHDR="False"/> </rdf:RDF> </x:xmpmeta>
增益映射的MPF存储
增益映射图像必须作为附加图像存储,如CIPA DC-x 007-2009 多图格式中所定义,并在依赖项部分中引用。
解码
本节介绍如何从符合规范的 JPEG 文件中解码增益映射。
格式的信号
符合此格式的 JPEG 文件可以通过在主图像的 XMP 数据包中是否存在hdrgm:Version="1.0"
来识别,其中hdrgm
是命名空间 URI http://ns.adobe.com/hdr-gain-map/1.0/
。
定位增益映射图像
有关解析和解码图像的详细信息,请参阅以下GContainer 详细信息部分。“增益映射”语义项在 XMP rdf:Directory
中用于指示增益映射图像的位置。或者,使用 MPF 索引 IFD 和扫描图像的 XMP 来确定增益映射的位置。
处理无效元数据
如果缺少必需字段,或者任何字段存在无效值,则元数据被视为无效。值可能无效,因为它无法解析为指定的类型,或者因为它超出了其预期范围。
如果遇到无效元数据,则应忽略增益映射并显示 SDR 图像。
显示
以 HDR 增益映射格式编码的文件可以在传统的 SDR 显示器或能够输出更高亮度的 HDR 显示器上呈现。
使用增益映射创建自适应 HDR 渲染
本节中的以下计算假设使用浮点运算。
encoded_recovery(x, y)
是来自增益映射图像的单通道、8 位、无符号整数。
如果增益映射的分辨率与主图像不同,则encoded_recovery(x, y)
改为通过对主图像宽度和高度范围内的 x 和 y 的增益映射图像进行过滤采样来确定。过滤方法必须是双线性或更好的,并且由实现定义。
map_gamma
由hdrgm:Gamma
元数据字段确定。
log_recovery(x, y)
是对数空间中归一化的浮点像素增益。
recovery(x, y) = encoded_recovery(x, y) / 255.0
log_recovery(x, y) = pow(recovery(x, y), 1.0 / map_gamma)
最大显示增强是一个标量浮点值,定义为当前 HDR 白点与当前 SDR 白点的比率。此值由显示系统提供,并且可能会随时间变化。
hdr_capacity_max
由hdrgm:HDRCapacityMax
元数据字段确定。hdr_capacity_min
由hdrgm:HDRCapacityMin
元数据字段确定。
weight_factor
在hdrgm:BaseRenditionIsHDR
为“False”时按如下方式确定
unclamped_weight_factor = (log2(max_display_boost) - hdr_capacity_min)
/ (hdr_capacity_max - hdr_capacity_min)
weight_factor = clamp(unclamped_weight_factor, 0.0, 1.0)
当hdrgm:BaseRenditionIsHDR
为“True”时,第二个等式改为
weight_factor = 1.0 - clamp(unclamped_weight_factor, 0.0, 1.0)
gain_map_max
由hdrgm:GainMapMax
元数据字段确定。gain_map_min
由hdrgm:GainMapMin
元数据字段确定。offset_sdr
由hdrgm:OffsetSDR
元数据字段确定。offset_hdr
由hdrgm:OffsetHDR
元数据字段确定。
线性自适应 HDR 渲染可以按如下方式计算
log_boost(x, y) = gain_map_min * (1.0f - log_recovery(x, y))
+ gain_map_max * log_recovery(x, y)
HDR(x, y) = (SDR(x, y) + offset_sdr) * exp2(log_boost(x, y) * weight_factor)
- offset_hdr
如果需要,实现可能会对HDR(x, y)
应用转换,以将数据置于显示器期望的空间中。任何此类转换都必须是颜色正确的。
GContainer 详细信息
本节指定其他要求,以便此格式符合 GContainer XML 元数据。元数据按照ISO 166841:2011(E) XMP 规范 第 1 部分序列化,并嵌入到主图像文件中,如Adobe XMP 规范 第 3 部分 在文件中存储中所述。主图像文件包含以下项目,格式为 RDF/XML。
XMP 数据包要求
XMP 数据包应通过命名空间 URI http://ns.adobe.com/hdr-gain-map/1.0/
包含增益映射元数据 XMP 扩展。默认命名空间前缀为hdrgm
。
XMP 数据包应定义hdrgm:Version="1.0"
。
容器元素
GContainer XMP 扩展的 XMP 命名空间为http://ns.google.com/photos/1.0/container/
。默认命名空间前缀为Container
。
主图像在 XMP 元数据中包含一个Container:Directory
元素,定义文件容器中后续媒体文件的顺序和属性。容器中的每个文件在Container:Directory
中都有一个对应的媒体项。媒体项描述文件容器中的位置以及每个连接文件的基本属性。
容器元素编码到主图像的 XMP 元数据中,并定义容器中媒体项的目录。媒体项必须按目录中媒体项元素的相同顺序位于容器文件中,并且必须紧密排列。
目录只能包含一个“主”图像项,并且它必须是目录中的第一个项。
元素名称 | 类型 | 描述 |
---|---|---|
Container:Directory | 有序结构数组 | 每个结构的有序数组,每个结构包含一个Container:Item 结构,定义容器的布局和内容。 |
项目元素
项目元素描述应用程序如何使用每个媒体项。
GContainer 项目 XMP 扩展的 XMP 命名空间 URI 为http://ns.google.com/photos/1.0/container/item/
。默认命名空间前缀为Item
。
第一个媒体项必须为主图像。它必须指定Item:Semantic = "Primary"
和项目 MIME 类型值中列出的Item:Mime
。
主图像项的长度通过基于其 MIME 类型从文件容器开头开始解析主图像来确定。
媒体项可以包含一个Item:Padding
属性,指定媒体项末尾和下一个媒体项开头之间的额外填充。当在Container:Directory
中的最后一个媒体项上出现时,Item:Padding
指示该项末尾和文件末尾之间的填充。
每个媒体项必须包含Item:Mime
类型和Item:Semantic
属性。辅助图像媒体项必须包含Item:Length
属性。
顺序媒体项可以在文件容器内共享资源数据。第一个媒体项确定文件容器中资源的位置,后续共享媒体项的Item:Length
设置为 0。如果资源数据本身是一个容器,则可以使用Item:URI
来确定媒体项数据在资源中的位置。
容器中媒体项资源的位置是通过将主图像编码的长度、前面辅助媒体项资源的Item:Length
值以及所有前面的Item:Padding
值相加来确定的。Item:Padding
在未指定其值的媒体项资源上被视为 0。
属性名称 | 类型 | 描述 |
---|---|---|
Item:Mime | 文本 | 指示容器中媒体项的 MIME 类型的简单字符串。有关定义,请参阅项目 MIME 类型值部分。必需。 |
Item:Semantic | 文本 | 指示媒体项的应用程序特定含义的简单字符串。有关定义,请参阅项目语义值部分。必需。 |
Item:Length | 整数 | 包含项目以字节为单位的正整数长度的简单字符串。长度为 0 表示媒体项资源与前一个媒体项共享。辅助媒体项所需。主图像媒体项可选。 |
Item:Label | 文本 | 用于区分具有相同Item:Semantic 的多个项目元素的实现定义字符串。可选。 |
Item:Padding | 整数 | 包含媒体项末尾和下一个媒体项开头之间额外填充的正整数长度(以字节为单位)的字符串,或者在Container:Directory 中的最后一个媒体项上使用时,为文件末尾。如果不存在,则假定值为 0。可选。 |
Item:URI | 文本 | 符合ISO/IEC 14496-12第 8.11.9 节的 URI 字符串,包含媒体项资源内媒体数据的相对 URI。默认为主图像资源。ISO 基本媒体文件格式 ISO/IEC 14496-12 MIME 类型可选。否则不得使用。 |
项目 MIME 类型值
Item:Mime
属性定义每个媒体项数据的 MIME 类型。
值 | 描述 |
---|---|
image/jpeg | JPEG 图像。 |
GContainer XMP 示例
以下有效的 GContainer XMP 数据包示例包含从简介部分中说明的示例文件中提取的元数据。
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.1.2"> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description xmlns:Container="http://ns.google.com/photos/1.0/container/" xmlns:Item="http://ns.google.com/photos/1.0/container/item/" xmlns:hdrgm="http://ns.adobe.com/hdr-gain-map/1.0/" hdrgm:Version="1.0"> <Container:Directory> <rdf:Seq> <rdf:li rdf:parseType="Resource"> <Container:Item Item:Semantic="Primary" Item:Mime="image/jpeg"/> </rdf:li> <rdf:li rdf:parseType="Resource"> <Container:Item Item:Semantic="GainMap" Item:Mime="image/jpeg" Item:Length="66171"/> </rdf:li> </rdf:Seq> </Container:Directory> </rdf:Description> </rdf:RDF> </x:xmpmeta>