Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 68bd556a authored by Android Build Coastguard Worker's avatar Android Build Coastguard Worker
Browse files

Snap for 9914775 from 3704cb3b to udc-release

Change-Id: I44b9b66d3ac06ece1f7751bb9e8ef4e81988b45e
parents 1dda6dbd 3704cb3b
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -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
+5 −2
Original line number Diff line number Diff line
@@ -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);
        }
      }
    }
+8 −2
Original line number Diff line number Diff line
@@ -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);
}

+4 −1
Original line number Diff line number Diff line
@@ -1149,7 +1149,10 @@ status_t SurfaceFlinger::getDisplayStats(const sp<IBinder>& displayToken,
        displayIdOpt = getPhysicalDisplayIdLocked(displayToken);
    }

    if (!displayIdOpt) {
    // TODO (b/277364366): Clients should be updated to pass in the display they
    // want, rather than us picking an arbitrary one (the pacesetter, in this
    // case).
    if (displayToken && !displayIdOpt) {
        ALOGE("%s: Invalid physical display token %p", __func__, displayToken.get());
        return NAME_NOT_FOUND;
    }