summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRam Mohan <ram.mohan@ittiam.com>2023-06-02 15:16:15 +0530
committerDichen Zhang <dichenzhang@google.com>2023-06-02 20:10:14 +0000
commitcd3f63736194d676c30e2903f87c5d10b30e4b3a (patch)
tree6351ebdd8edfdb58f9524201098b030cffc175d0
parent7fbf5f1aa5da99c7dd912562207c8df68e9e08d5 (diff)
downloadnative-cd3f63736194d676c30e2903f87c5d10b30e4b3a.tar.gz
ultrahdr: Fix nan occurence during xmp generation
The default value of hdr white nits is zero, making log content boost to nan in certain scenarios. This can cause decode to fail on select architectures Bug: 285545078 Test: ./ultrahdr_enc_fuzzer Change-Id: I72064d4f04c25d6f3c951f5c20b0b674e675d541
-rw-r--r--libs/ultrahdr/fuzzer/ultrahdr_enc_fuzzer.cpp2
-rw-r--r--libs/ultrahdr/jpegr.cpp8
2 files changed, 8 insertions, 2 deletions
diff --git a/libs/ultrahdr/fuzzer/ultrahdr_enc_fuzzer.cpp b/libs/ultrahdr/fuzzer/ultrahdr_enc_fuzzer.cpp
index 7faa1570f0..290576d56f 100644
--- a/libs/ultrahdr/fuzzer/ultrahdr_enc_fuzzer.cpp
+++ b/libs/ultrahdr/fuzzer/ultrahdr_enc_fuzzer.cpp
@@ -256,7 +256,7 @@ void JpegHDRFuzzer::process() {
} else if (tf == ULTRAHDR_TF_PQ) {
metadata.maxContentBoost = kPqMaxNits / kSdrWhiteNits;
} else {
- metadata.maxContentBoost = 0;
+ metadata.maxContentBoost = 1.0f;
}
metadata.minContentBoost = 1.0f;
status = jpegHdr.encodeJPEGR(&jpegImg, &jpegGainMap, &metadata, &jpegImgR);
diff --git a/libs/ultrahdr/jpegr.cpp b/libs/ultrahdr/jpegr.cpp
index b2bde6c485..ed151f3ad2 100644
--- a/libs/ultrahdr/jpegr.cpp
+++ b/libs/ultrahdr/jpegr.cpp
@@ -726,7 +726,7 @@ status_t JpegR::generateGainMap(jr_uncompressed_ptr uncompressed_yuv_420_image,
map_data.reset(reinterpret_cast<uint8_t*>(dest->data));
ColorTransformFn hdrInvOetf = nullptr;
- float hdr_white_nits = 0.0f;
+ float hdr_white_nits = kSdrWhiteNits;
switch (hdr_tf) {
case ULTRAHDR_TF_LINEAR:
hdrInvOetf = identityConversion;
@@ -1067,6 +1067,12 @@ status_t JpegR::appendGainMap(jr_compressed_ptr compressed_jpeg_image,
return ERROR_JPEGR_INVALID_NULL_PTR;
}
+ if (metadata->minContentBoost < 1.0f || metadata->maxContentBoost < metadata->minContentBoost) {
+ ALOGE("received bad value for content boost min %f, max %f", metadata->minContentBoost,
+ metadata->maxContentBoost);
+ return ERROR_JPEGR_INVALID_INPUT_TYPE;
+ }
+
const string nameSpace = "http://ns.adobe.com/xap/1.0/";
const int nameSpaceLength = nameSpace.size() + 1; // need to count the null terminator