diff options
author | 2023-04-06 18:23:47 -0700 | |
---|---|---|
committer | 2023-04-07 01:26:36 +0000 | |
commit | f7a9e1726962018b51bfe9bc66590c3697bafcb7 (patch) | |
tree | eecaef981f319511a0f15263ed5b56520f76e745 | |
parent | ecd41c772b9c76d6cb6f79c5b54cadc9093003d3 (diff) |
JPEG/R Optimization: remove repeating log2() calculation
Bug: 264715926
Test: jpegr_test.cpp recoverymapmath_test.cpp
Change-Id: If135b1003b7835c9c59418f61842c26724eb6e80
-rw-r--r-- | libs/jpegrecoverymap/include/jpegrecoverymap/recoverymapmath.h | 2 | ||||
-rw-r--r-- | libs/jpegrecoverymap/jpegr.cpp | 7 | ||||
-rw-r--r-- | libs/jpegrecoverymap/recoverymapmath.cpp | 10 |
3 files changed, 15 insertions, 4 deletions
diff --git a/libs/jpegrecoverymap/include/jpegrecoverymap/recoverymapmath.h b/libs/jpegrecoverymap/include/jpegrecoverymap/recoverymapmath.h index 67d2a6a0be..bd5ca8b9f0 100644 --- a/libs/jpegrecoverymap/include/jpegrecoverymap/recoverymapmath.h +++ b/libs/jpegrecoverymap/include/jpegrecoverymap/recoverymapmath.h @@ -361,6 +361,8 @@ ColorTransformFn getHdrConversionFn(jpegr_color_gamut sdr_gamut, jpegr_color_gam * luminances in linear space, and the hdr ratio to encode against. */ uint8_t encodeRecovery(float y_sdr, float y_hdr, jr_metadata_ptr metadata); +uint8_t encodeRecovery(float y_sdr, float y_hdr, jr_metadata_ptr metadata, + float log2MinContentBoost, float log2MaxContentBoost); /* * Calculates the linear luminance in nits after applying the given recovery diff --git a/libs/jpegrecoverymap/jpegr.cpp b/libs/jpegrecoverymap/jpegr.cpp index e395d51a26..559ca3564a 100644 --- a/libs/jpegrecoverymap/jpegr.cpp +++ b/libs/jpegrecoverymap/jpegr.cpp @@ -586,6 +586,8 @@ status_t JpegR::generateRecoveryMap(jr_uncompressed_ptr uncompressed_yuv_420_ima metadata->maxContentBoost = hdr_white_nits / kSdrWhiteNits; metadata->minContentBoost = 1.0f; + float log2MinBoost = log2(metadata->minContentBoost); + float log2MaxBoost = log2(metadata->maxContentBoost); ColorTransformFn hdrGamutConversionFn = getHdrConversionFn( uncompressed_yuv_420_image->colorGamut, uncompressed_p010_image->colorGamut); @@ -613,7 +615,8 @@ status_t JpegR::generateRecoveryMap(jr_uncompressed_ptr uncompressed_yuv_420_ima std::function<void()> generateMap = [uncompressed_yuv_420_image, uncompressed_p010_image, metadata, dest, hdrInvOetf, hdrGamutConversionFn, - luminanceFn, hdr_white_nits, &jobQueue]() -> void { + luminanceFn, hdr_white_nits, log2MinBoost, log2MaxBoost, + &jobQueue]() -> void { size_t rowStart, rowEnd; size_t dest_map_width = uncompressed_yuv_420_image->width / kMapDimensionScaleFactor; size_t dest_map_stride = dest->width; @@ -638,7 +641,7 @@ status_t JpegR::generateRecoveryMap(jr_uncompressed_ptr uncompressed_yuv_420_ima size_t pixel_idx = x + y * dest_map_stride; reinterpret_cast<uint8_t*>(dest->data)[pixel_idx] = - encodeRecovery(sdr_y_nits, hdr_y_nits, metadata); + encodeRecovery(sdr_y_nits, hdr_y_nits, metadata, log2MinBoost, log2MaxBoost); } } } diff --git a/libs/jpegrecoverymap/recoverymapmath.cpp b/libs/jpegrecoverymap/recoverymapmath.cpp index 2cffde3c54..8808b55b0c 100644 --- a/libs/jpegrecoverymap/recoverymapmath.cpp +++ b/libs/jpegrecoverymap/recoverymapmath.cpp @@ -443,6 +443,12 @@ ColorTransformFn getHdrConversionFn(jpegr_color_gamut sdr_gamut, jpegr_color_gam //////////////////////////////////////////////////////////////////////////////// // Recovery map calculations uint8_t encodeRecovery(float y_sdr, float y_hdr, jr_metadata_ptr metadata) { + return encodeRecovery(y_sdr, y_hdr, metadata, + log2(metadata->minContentBoost), log2(metadata->maxContentBoost)); +} + +uint8_t encodeRecovery(float y_sdr, float y_hdr, jr_metadata_ptr metadata, + float log2MinContentBoost, float log2MaxContentBoost) { float gain = 1.0f; if (y_sdr > 0.0f) { gain = y_hdr / y_sdr; @@ -451,8 +457,8 @@ uint8_t encodeRecovery(float y_sdr, float y_hdr, jr_metadata_ptr metadata) { if (gain < metadata->minContentBoost) gain = metadata->minContentBoost; if (gain > metadata->maxContentBoost) gain = metadata->maxContentBoost; - return static_cast<uint8_t>((log2(gain) - log2(metadata->minContentBoost)) - / (log2(metadata->maxContentBoost) - log2(metadata->minContentBoost)) + return static_cast<uint8_t>((log2(gain) - log2MinContentBoost) + / (log2MaxContentBoost - log2MinContentBoost) * 255.0f); } |