UltraHDR: update Version handling.
Version is now a string as spec'd, and identifier is added to Primary
image XMP to indicate presence of a gain map.
Bug: 278784125
Test: tests pass
Change-Id: Ia76879ca3d187edb78927ad5bab79fc8eef07da8
(cherry picked from commit 4ac2a268cbd211389d7f1d27853b8eeb6f956b72)
diff --git a/libs/ultrahdr/include/ultrahdr/jpegrutils.h b/libs/ultrahdr/include/ultrahdr/jpegrutils.h
index ed38e07..4ab664e 100644
--- a/libs/ultrahdr/include/ultrahdr/jpegrutils.h
+++ b/libs/ultrahdr/include/ultrahdr/jpegrutils.h
@@ -102,7 +102,9 @@
* 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:Item="http://ns.google.com/photos/1.0/container/item/"
+ * xmlns:hdrgm="http://ns.adobe.com/hdr-gain-map/1.0/"
+ * hdrgm:Version="1">
* <Container:Directory>
* <rdf:Seq>
* <rdf:li
@@ -127,7 +129,8 @@
* @param secondary_image_length length of secondary image
* @return XMP metadata in type of string
*/
-std::string generateXmpForPrimaryImage(int secondary_image_length);
+std::string generateXmpForPrimaryImage(int secondary_image_length,
+ ultrahdr_metadata_struct& metadata);
/*
* This method generates XMP metadata for the recovery map image.
diff --git a/libs/ultrahdr/include/ultrahdr/ultrahdr.h b/libs/ultrahdr/include/ultrahdr/ultrahdr.h
index 302aeee..f970936 100644
--- a/libs/ultrahdr/include/ultrahdr/ultrahdr.h
+++ b/libs/ultrahdr/include/ultrahdr/ultrahdr.h
@@ -48,7 +48,7 @@
*/
struct ultrahdr_metadata_struct {
// Ultra HDR library version
- uint32_t version;
+ const char* version;
// Max Content Boost for the map
float maxContentBoost;
// Min Content Boost for the map
@@ -58,4 +58,4 @@
} // namespace android::ultrahdr
-#endif //ANDROID_ULTRAHDR_ULTRAHDR_H
\ No newline at end of file
+#endif //ANDROID_ULTRAHDR_ULTRAHDR_H
diff --git a/libs/ultrahdr/jpegr.cpp b/libs/ultrahdr/jpegr.cpp
index 5f55d1b..0f7aa27 100644
--- a/libs/ultrahdr/jpegr.cpp
+++ b/libs/ultrahdr/jpegr.cpp
@@ -61,7 +61,7 @@
}
// The current JPEGR version that we encode to
-static const uint32_t kJpegrVersion = 1;
+static const char* const kJpegrVersion = "1.0";
// Map is quarter res / sixteenth size
static const size_t kMapDimensionScaleFactor = 4;
@@ -943,7 +943,7 @@
+ xmp_secondary_length
+ compressed_gain_map->length;
// primary image
- const string xmp_primary = generateXmpForPrimaryImage(secondary_image_size);
+ const string xmp_primary = generateXmpForPrimaryImage(secondary_image_size, *metadata);
// same as primary
const int xmp_primary_length = 2 + nameSpaceLength + xmp_primary.size();
diff --git a/libs/ultrahdr/jpegrutils.cpp b/libs/ultrahdr/jpegrutils.cpp
index 9d07a6f..6430af1 100644
--- a/libs/ultrahdr/jpegrutils.cpp
+++ b/libs/ultrahdr/jpegrutils.cpp
@@ -302,7 +302,7 @@
return true;
}
-string generateXmpForPrimaryImage(int secondary_image_length) {
+string generateXmpForPrimaryImage(int secondary_image_length, ultrahdr_metadata_struct& metadata) {
const vector<string> kConDirSeq({kConDirectory, string("rdf:Seq")});
const vector<string> kLiItem({string("rdf:li"), kConItem});
@@ -316,6 +316,8 @@
writer.StartWritingElement("rdf:Description");
writer.WriteXmlns(kContainerPrefix, kContainerUri);
writer.WriteXmlns(kItemPrefix, kItemUri);
+ writer.WriteXmlns(kGainMapPrefix, kGainMapUri);
+ writer.WriteAttributeNameAndValue(kMapVersion, metadata.version);
writer.StartWritingElements(kConDirSeq);
diff --git a/libs/ultrahdr/tests/jpegr_test.cpp b/libs/ultrahdr/tests/jpegr_test.cpp
index ba3b4d0..58cd8f4 100644
--- a/libs/ultrahdr/tests/jpegr_test.cpp
+++ b/libs/ultrahdr/tests/jpegr_test.cpp
@@ -180,6 +180,7 @@
TEST_F(JpegRTest, writeXmpThenRead) {
ultrahdr_metadata_struct metadata_expected;
+ metadata_expected.version = "1.0";
metadata_expected.maxContentBoost = 1.25;
metadata_expected.minContentBoost = 0.75;
const std::string nameSpace = "http://ns.adobe.com/xap/1.0/\0";
@@ -538,7 +539,7 @@
JpegRBenchmark benchmark;
- ultrahdr_metadata_struct metadata = { .version = 1,
+ ultrahdr_metadata_struct metadata = { .version = "1.0",
.maxContentBoost = 8.0f,
.minContentBoost = 1.0f / 8.0f };