diff options
author | 2023-08-12 04:37:39 +0530 | |
---|---|---|
committer | 2023-08-15 02:27:00 +0000 | |
commit | 2c3d7fbcbb3d296b42a9646fd563a0993eb0cfd6 (patch) | |
tree | 99f0e7ea657b5e8e06de973ecd2502f79885ecd0 | |
parent | b08549f732063c9af9b84fc9ff3fd997f4f7d1ba (diff) |
ultrahdr: revert gain map image dimension calculation
Gain map resolution is 1 / kMapDimensionScaleFactor of primary image.
Before computing the gain map image res, the primary image res is
aligned to kMapDimensionScaleFactor and divided. This would require
p010 and 420 to have additional bytes at each row end during access or
clamp the reads to width. Currently neither is present. Until this is
handled, adjust gain map res computations to avoid oob reads.
Bug: 294709120
Bug: 294320724
Test: ./ultrahdr_enc_fuzzer
Change-Id: I65daa5ac49255a8976cf929a5bd0ffe3e47afb6d
-rw-r--r-- | libs/ultrahdr/fuzzer/ultrahdr_enc_fuzzer.cpp | 6 | ||||
-rw-r--r-- | libs/ultrahdr/jpegr.cpp | 12 |
2 files changed, 6 insertions, 12 deletions
diff --git a/libs/ultrahdr/fuzzer/ultrahdr_enc_fuzzer.cpp b/libs/ultrahdr/fuzzer/ultrahdr_enc_fuzzer.cpp index c536c391b5..2d59e8bb88 100644 --- a/libs/ultrahdr/fuzzer/ultrahdr_enc_fuzzer.cpp +++ b/libs/ultrahdr/fuzzer/ultrahdr_enc_fuzzer.cpp @@ -161,10 +161,8 @@ void UltraHdrEncFuzzer::process() { fillP010Buffer(bufferUVHdr.get(), width, height / 2, uvStride); } } else { - size_t map_width = static_cast<size_t>( - floor((width + kMapDimensionScaleFactor - 1) / kMapDimensionScaleFactor)); - size_t map_height = static_cast<size_t>( - floor((height + kMapDimensionScaleFactor - 1) / kMapDimensionScaleFactor)); + size_t map_width = width / kMapDimensionScaleFactor; + size_t map_height = height / kMapDimensionScaleFactor; // init 400 image grayImg.width = map_width; grayImg.height = map_height; diff --git a/libs/ultrahdr/jpegr.cpp b/libs/ultrahdr/jpegr.cpp index dc439d785a..ae8184547a 100644 --- a/libs/ultrahdr/jpegr.cpp +++ b/libs/ultrahdr/jpegr.cpp @@ -801,10 +801,8 @@ status_t JpegR::generateGainMap(jr_uncompressed_ptr yuv420_image_ptr, size_t image_width = yuv420_image_ptr->width; size_t image_height = yuv420_image_ptr->height; - size_t map_width = static_cast<size_t>( - floor((image_width + kMapDimensionScaleFactor - 1) / kMapDimensionScaleFactor)); - size_t map_height = static_cast<size_t>( - floor((image_height + kMapDimensionScaleFactor - 1) / kMapDimensionScaleFactor)); + size_t map_width = image_width / kMapDimensionScaleFactor; + size_t map_height = image_height / kMapDimensionScaleFactor; dest->data = new uint8_t[map_width * map_height]; dest->width = map_width; @@ -984,10 +982,8 @@ status_t JpegR::applyGainMap(jr_uncompressed_ptr yuv420_image_ptr, // TODO: remove once map scaling factor is computed based on actual map dims size_t image_width = yuv420_image_ptr->width; size_t image_height = yuv420_image_ptr->height; - size_t map_width = static_cast<size_t>( - floor((image_width + kMapDimensionScaleFactor - 1) / kMapDimensionScaleFactor)); - size_t map_height = static_cast<size_t>( - floor((image_height + kMapDimensionScaleFactor - 1) / kMapDimensionScaleFactor)); + size_t map_width = image_width / kMapDimensionScaleFactor; + size_t map_height = image_height / kMapDimensionScaleFactor; if (map_width != gainmap_image_ptr->width || map_height != gainmap_image_ptr->height) { ALOGE("gain map dimensions and primary image dimensions are not to scale, computed gain map " "resolution is %dx%d, received gain map resolution is %dx%d", |