diff options
| author | 2023-05-18 15:26:33 +0530 | |
|---|---|---|
| committer | 2023-05-23 17:06:06 +0000 | |
| commit | 033270a19f2656a6697f402535d92f2c090eb501 (patch) | |
| tree | f9bf7b81e81fb7c3cc0e3d2eb5eaca2664913e8a | |
| parent | 3a4f049f770642ca4ef5469a4002ea467841125a (diff) | |
ultrahdr: Add lower bounds to input resolution to avoid empty jpeg image
If the test image is 2x2, then gain map size is 0x0, which causes
problems during gainmap compression. Add lower bounds to supported
resolution.
Bug: 283500706
Test: ./libultrahdr_test
Change-Id: I761330bcd5cd4506c38d053a479a135eed6c38ac
| -rw-r--r-- | libs/ultrahdr/jpegr.cpp | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/libs/ultrahdr/jpegr.cpp b/libs/ultrahdr/jpegr.cpp index da257266ee..78fa2af4b8 100644 --- a/libs/ultrahdr/jpegr.cpp +++ b/libs/ultrahdr/jpegr.cpp @@ -65,6 +65,13 @@ static const char* const kJpegrVersion = "1.0"; // Map is quarter res / sixteenth size static const size_t kMapDimensionScaleFactor = 4; + +// Gain Map width is (image_width / kMapDimensionScaleFactor). If we were to +// compress 420 GainMap in jpeg, then we need at least 2 samples. For Grayscale +// 1 sample is sufficient. We are using 2 here anyways +static const int kMinWidth = 2 * kMapDimensionScaleFactor; +static const int kMinHeight = 2 * kMapDimensionScaleFactor; + // JPEG block size. // JPEG encoding / decoding will require block based DCT transform 16 x 16 for luma, // and 8 x 8 for chroma. @@ -105,10 +112,10 @@ status_t JpegR::areInputArgumentsValid(jr_uncompressed_ptr uncompressed_p010_ima return ERROR_JPEGR_INVALID_INPUT_TYPE; } - if (uncompressed_p010_image->width == 0 - || uncompressed_p010_image->height == 0) { - ALOGE("Image dimensions cannot be zero, image dimensions %dx%d", - uncompressed_p010_image->width, uncompressed_p010_image->height); + if (uncompressed_p010_image->width < kMinWidth + || uncompressed_p010_image->height < kMinHeight) { + ALOGE("Image dimensions cannot be less than %dx%d, image dimensions %dx%d", + kMinWidth, kMinHeight, uncompressed_p010_image->width, uncompressed_p010_image->height); return ERROR_JPEGR_INVALID_INPUT_TYPE; } |