summaryrefslogtreecommitdiff
path: root/libs/hwui/SkiaCanvas.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libs/hwui/SkiaCanvas.cpp')
-rw-r--r--libs/hwui/SkiaCanvas.cpp22
1 files changed, 10 insertions, 12 deletions
diff --git a/libs/hwui/SkiaCanvas.cpp b/libs/hwui/SkiaCanvas.cpp
index 9e825fb350d6..7f5ca44f7ceb 100644
--- a/libs/hwui/SkiaCanvas.cpp
+++ b/libs/hwui/SkiaCanvas.cpp
@@ -619,18 +619,16 @@ bool SkiaCanvas::useGainmapShader(Bitmap& bitmap) {
// If it's an unknown colortype then it's not a bitmap-backed canvas
if (info.colorType() == SkColorType::kUnknown_SkColorType) return true;
- skcms_TransferFunction tfn;
- info.colorSpace()->transferFn(&tfn);
-
- auto transferType = skcms_TransferFunction_getType(&tfn);
- switch (transferType) {
- case skcms_TFType_HLGish:
- case skcms_TFType_HLGinvish:
- case skcms_TFType_PQish:
- return true;
- case skcms_TFType_Invalid:
- case skcms_TFType_sRGBish:
- return false;
+ auto colorSpace = info.colorSpace();
+ // If we don't have a colorspace, we can't apply a gainmap
+ if (!colorSpace) return false;
+
+ const float targetRatio = uirenderer::getTargetHdrSdrRatio(colorSpace);
+
+ if (bitmap.gainmap()->info.fBaseImageType == SkGainmapInfo::BaseImageType::kHDR) {
+ return targetRatio < bitmap.gainmap()->info.fDisplayRatioHdr;
+ } else {
+ return targetRatio > bitmap.gainmap()->info.fDisplayRatioSdr;
}
}