summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Nick Deakin <deakin@google.com> 2023-04-19 15:27:13 -0400
committer Nick Deakin <deakin@google.com> 2023-04-19 21:02:16 +0000
commit05ceebfbaec627732ba0467e6b95d77dac865c51 (patch)
tree4b922417ad4284aa3f1b1dd5534af04c1b54b752
parent50355837d27fdb899bd2e141cb3cd196a5f6fe05 (diff)
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)
-rw-r--r--libs/ultrahdr/include/ultrahdr/jpegrutils.h7
-rw-r--r--libs/ultrahdr/include/ultrahdr/ultrahdr.h4
-rw-r--r--libs/ultrahdr/jpegr.cpp4
-rw-r--r--libs/ultrahdr/jpegrutils.cpp4
-rw-r--r--libs/ultrahdr/tests/jpegr_test.cpp3
5 files changed, 14 insertions, 8 deletions
diff --git a/libs/ultrahdr/include/ultrahdr/jpegrutils.h b/libs/ultrahdr/include/ultrahdr/jpegrutils.h
index ed38e07c2d..4ab664e798 100644
--- a/libs/ultrahdr/include/ultrahdr/jpegrutils.h
+++ b/libs/ultrahdr/include/ultrahdr/jpegrutils.h
@@ -102,7 +102,9 @@ bool getMetadataFromXMP(uint8_t* xmp_data, size_t xmp_size, ultrahdr_metadata_st
* 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 @@ bool getMetadataFromXMP(uint8_t* xmp_data, size_t xmp_size, ultrahdr_metadata_st
* @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 302aeee528..f9709369ee 100644
--- a/libs/ultrahdr/include/ultrahdr/ultrahdr.h
+++ b/libs/ultrahdr/include/ultrahdr/ultrahdr.h
@@ -48,7 +48,7 @@ typedef enum {
*/
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 @@ typedef struct ultrahdr_metadata_struct* ultrahdr_metadata_ptr;
} // 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 5f55d1ba29..0f7aa27354 100644
--- a/libs/ultrahdr/jpegr.cpp
+++ b/libs/ultrahdr/jpegr.cpp
@@ -61,7 +61,7 @@ namespace android::ultrahdr {
}
// 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 @@ status_t JpegR::appendGainMap(jr_compressed_ptr compressed_jpeg_image,
+ 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 9d07a6f889..6430af12c7 100644
--- a/libs/ultrahdr/jpegrutils.cpp
+++ b/libs/ultrahdr/jpegrutils.cpp
@@ -302,7 +302,7 @@ bool getMetadataFromXMP(uint8_t* xmp_data, size_t xmp_size, ultrahdr_metadata_st
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 @@ string generateXmpForPrimaryImage(int secondary_image_length) {
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 ba3b4d0418..58cd8f4711 100644
--- a/libs/ultrahdr/tests/jpegr_test.cpp
+++ b/libs/ultrahdr/tests/jpegr_test.cpp
@@ -180,6 +180,7 @@ TEST_F(JpegRTest, build) {
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 @@ TEST_F(JpegRTest, ProfileGainMapFuncs) {
JpegRBenchmark benchmark;
- ultrahdr_metadata_struct metadata = { .version = 1,
+ ultrahdr_metadata_struct metadata = { .version = "1.0",
.maxContentBoost = 8.0f,
.minContentBoost = 1.0f / 8.0f };