diff options
| author | 2024-10-18 17:43:12 +0000 | |
|---|---|---|
| committer | 2024-10-18 17:43:12 +0000 | |
| commit | c03fa528b1bbfbfbd11273e5a664cd82acc7cbda (patch) | |
| tree | d5d7bbc3d69a6ceb803888277425f5d1b9034749 | |
| parent | 4d684ced0c9cee6b05d48c775b9a7c3b1e94eaca (diff) | |
| parent | 0b0ed6d149646bfc56d4bcbe4370e98bff6edc9b (diff) | |
Merge "Add DISPLAY_BT2020 ColorSpace and DataSpace" into main
| -rw-r--r-- | core/api/current.txt | 2 | ||||
| -rw-r--r-- | core/java/android/hardware/DataSpace.java | 18 | ||||
| -rw-r--r-- | graphics/java/android/framework_graphics.aconfig | 9 | ||||
| -rw-r--r-- | graphics/java/android/graphics/ColorSpace.java | 52 | ||||
| -rw-r--r-- | libs/hwui/utils/Color.cpp | 13 |
5 files changed, 89 insertions, 5 deletions
diff --git a/core/api/current.txt b/core/api/current.txt index 012a2e62755c..fd6180068fd6 100644 --- a/core/api/current.txt +++ b/core/api/current.txt @@ -16103,6 +16103,7 @@ package android.graphics { enum_constant public static final android.graphics.ColorSpace.Named CIE_LAB; enum_constant public static final android.graphics.ColorSpace.Named CIE_XYZ; enum_constant public static final android.graphics.ColorSpace.Named DCI_P3; + enum_constant @FlaggedApi("com.android.graphics.flags.display_bt2020_colorspace") public static final android.graphics.ColorSpace.Named DISPLAY_BT2020; enum_constant public static final android.graphics.ColorSpace.Named DISPLAY_P3; enum_constant public static final android.graphics.ColorSpace.Named EXTENDED_SRGB; enum_constant public static final android.graphics.ColorSpace.Named LINEAR_EXTENDED_SRGB; @@ -18619,6 +18620,7 @@ package android.hardware { field public static final int DATASPACE_BT709 = 281083904; // 0x10c10000 field public static final int DATASPACE_DCI_P3 = 155844608; // 0x94a0000 field public static final int DATASPACE_DEPTH = 4096; // 0x1000 + field @FlaggedApi("com.android.graphics.flags.display_bt2020_colorspace") public static final int DATASPACE_DISPLAY_BT2020 = 142999552; // 0x8860000 field public static final int DATASPACE_DISPLAY_P3 = 143261696; // 0x88a0000 field public static final int DATASPACE_DYNAMIC_DEPTH = 4098; // 0x1002 field public static final int DATASPACE_HEIF = 4100; // 0x1004 diff --git a/core/java/android/hardware/DataSpace.java b/core/java/android/hardware/DataSpace.java index 312bfdf777d6..611738435f7e 100644 --- a/core/java/android/hardware/DataSpace.java +++ b/core/java/android/hardware/DataSpace.java @@ -15,9 +15,12 @@ */ package android.hardware; +import android.annotation.FlaggedApi; import android.annotation.IntDef; import android.view.SurfaceControl; +import com.android.graphics.flags.Flags; + import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -639,6 +642,18 @@ public final class DataSpace { */ public static final int DATASPACE_SRGB_LINEAR = 138477568; + /** + * Display BT. 2020 encoding. + * + * <p>Composed of the following -</p> + * <pre> + * Primaries: STANDARD_BT2020 + * Transfer: TRANSFER_SRGB + * Range: RANGE_FULL</pre> + */ + @FlaggedApi(Flags.FLAG_DISPLAY_BT2020_COLORSPACE) + public static final int DATASPACE_DISPLAY_BT2020 = 142999552; + /** @hide */ @Retention(RetentionPolicy.SOURCE) @IntDef(flag = true, value = { @@ -660,7 +675,8 @@ public final class DataSpace { DATASPACE_BT2020, DATASPACE_BT709, DATASPACE_DCI_P3, - DATASPACE_SRGB_LINEAR + DATASPACE_SRGB_LINEAR, + DATASPACE_DISPLAY_BT2020 }) public @interface NamedDataSpace {}; diff --git a/graphics/java/android/framework_graphics.aconfig b/graphics/java/android/framework_graphics.aconfig index 5ad97e6d8992..a63cbee4d707 100644 --- a/graphics/java/android/framework_graphics.aconfig +++ b/graphics/java/android/framework_graphics.aconfig @@ -33,3 +33,12 @@ flag { description: "Add OkLab ColorSpace support" bug: "344038816" } + +flag { + name: "display_bt2020_colorspace" + is_exported: true + is_fixed_read_only: true + namespace: "core_graphics" + description: "Add DISPLAY_BT2020 ColorSpace support" + bug: "344038816" +} diff --git a/graphics/java/android/graphics/ColorSpace.java b/graphics/java/android/graphics/ColorSpace.java index 3752257da2bc..4c47de0ca754 100644 --- a/graphics/java/android/graphics/ColorSpace.java +++ b/graphics/java/android/graphics/ColorSpace.java @@ -768,7 +768,44 @@ public abstract class ColorSpace { * </table> */ @FlaggedApi(Flags.FLAG_OK_LAB_COLORSPACE) - OK_LAB + OK_LAB, + + /** + * <p>{@link ColorSpace.Rgb RGB} color space BT.2020 based on Rec. ITU-R BT.2020-1 and IEC 61966-2.1:1999.</p></p> + * <table summary="Color space definition"> + * <tr> + * <th>Chromaticity</th><th>Red</th><th>Green</th><th>Blue</th><th>White point</th> + * </tr> + * <tr><td>x</td><td>0.708</td><td>0.170</td><td>0.131</td><td>0.3127</td></tr> + * <tr><td>y</td><td>0.292</td><td>0.797</td><td>0.046</td><td>0.3290</td></tr> + * <tr><th>Property</th><th colspan="4">Value</th></tr> + * <tr><td>Name</td><td colspan="4">Rec. ITU-R BT.2020-1</td></tr> + * <tr><td>CIE standard illuminant</td><td colspan="4">D65</td></tr> + * <tr> + * <td>Opto-electronic transfer function (OETF)</td> + * <td colspan="4">\(\begin{equation} + * C_{DisplayBT2020} = \begin{cases} 12.92 \times C_{linear} & C_{linear} \lt 0.0030186 \\\ + * 1.055 \times C_{linear}^{\frac{1}{2.4}} - 0.055 & C_{linear} \ge 0.0030186 \end{cases} + * \end{equation}\) + * </td> + * </tr> + * <tr> + * <td>Electro-optical transfer function (EOTF)</td> + * <td colspan="4">\(\begin{equation} + * C_{linear} = \begin{cases}\frac{C_{DisplayBT2020}}{12.92} & C_{sRGB} \lt 0.04045 \\\ + * \left( \frac{C_{DisplayBT2020} + 0.055}{1.055} \right) ^{2.4} & C_{sRGB} \ge 0.04045 \end{cases} + * \end{equation}\) + * </td> + * </tr> + * <tr><td>Range</td><td colspan="4">\([0..1]\)</td></tr> + * </table> + * <p> + * <img style="display: block; margin: 0 auto;" src="{@docRoot}reference/android/images/graphics/colorspace_bt2020.png" /> + * <figcaption style="text-align: center;">BT.2020 (orange) vs sRGB (white)</figcaption> + * </p> + */ + @FlaggedApi(Flags.FLAG_DISPLAY_BT2020_COLORSPACE) + DISPLAY_BT2020 // Update the initialization block next to #get(Named) when adding new values } @@ -1721,6 +1758,19 @@ public abstract class ColorSpace { Named.OK_LAB.ordinal() )); } + + if (Flags.displayBt2020Colorspace()) { + sNamedColorSpaceMap.put(Named.DISPLAY_BT2020.ordinal(), new ColorSpace.Rgb( + "BT 2020", + BT2020_PRIMARIES, + ILLUMINANT_D65, + null, + SRGB_TRANSFER_PARAMETERS, + Named.DISPLAY_BT2020.ordinal() + )); + sDataToColorSpaces.put(DataSpace.DATASPACE_DISPLAY_BT2020, + Named.DISPLAY_BT2020.ordinal()); + } } private static double transferHLGOETF(Rgb.TransferParameters params, double x) { diff --git a/libs/hwui/utils/Color.cpp b/libs/hwui/utils/Color.cpp index 9673c5f03642..23097f634464 100644 --- a/libs/hwui/utils/Color.cpp +++ b/libs/hwui/utils/Color.cpp @@ -17,6 +17,7 @@ #include "Color.h" #include <Properties.h> +#include <aidl/android/hardware/graphics/common/Dataspace.h> #include <android/hardware_buffer.h> #include <android/native_window.h> #include <ui/ColorSpace.h> @@ -25,6 +26,8 @@ #include <algorithm> #include <cmath> +#include "SkColorSpace.h" + namespace android { namespace uirenderer { @@ -215,9 +218,13 @@ android_dataspace ColorSpaceToADataSpace(SkColorSpace* colorSpace, SkColorType c return HAL_DATASPACE_ADOBE_RGB; } - if (nearlyEqual(fn, SkNamedTransferFn::kRec2020) && - nearlyEqual(gamut, SkNamedGamut::kRec2020)) { - return HAL_DATASPACE_BT2020; + if (nearlyEqual(gamut, SkNamedGamut::kRec2020)) { + if (nearlyEqual(fn, SkNamedTransferFn::kRec2020)) { + return HAL_DATASPACE_BT2020; + } else if (nearlyEqual(fn, SkNamedTransferFn::kSRGB)) { + return static_cast<android_dataspace>( + ::aidl::android::hardware::graphics::common::Dataspace::DISPLAY_BT2020); + } } if (nearlyEqual(fn, k2Dot6) && nearlyEqual(gamut, kDCIP3)) { |