summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Ram Mohan <ram.mohan@ittiam.com> 2023-08-12 04:37:39 +0530
committer Dichen Zhang <dichenzhang@google.com> 2023-08-15 02:27:00 +0000
commit2c3d7fbcbb3d296b42a9646fd563a0993eb0cfd6 (patch)
tree99f0e7ea657b5e8e06de973ecd2502f79885ecd0
parentb08549f732063c9af9b84fc9ff3fd997f4f7d1ba (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.cpp6
-rw-r--r--libs/ultrahdr/jpegr.cpp12
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",