diff options
author | Ram Mohan <ram.mohan@ittiam.com> | 2023-06-02 15:16:15 +0530 |
---|---|---|
committer | Dichen Zhang <dichenzhang@google.com> | 2023-06-02 20:10:14 +0000 |
commit | cd3f63736194d676c30e2903f87c5d10b30e4b3a (patch) | |
tree | 6351ebdd8edfdb58f9524201098b030cffc175d0 | |
parent | 7fbf5f1aa5da99c7dd912562207c8df68e9e08d5 (diff) | |
download | native-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.cpp | 2 | ||||
-rw-r--r-- | libs/ultrahdr/jpegr.cpp | 8 |
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 |