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

Commit 91a2b3d8 authored by Peiyong Lin's avatar Peiyong Lin
Browse files

Extend ADataspace.

In order to allow NDK image decoding to access more color spaces, extend
ADataspace to match Named.ColorSpace as many as possible.

BUG: b/140635413
Test: build
Change-Id: I8e06071060ab19b103900ff04d60f1c3d3fccda9
parent e950a4e1
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -138,6 +138,11 @@ int32_t ANativeWindow_setBuffersDataSpace(ANativeWindow* window, int32_t dataSpa
    static_assert(static_cast<int>(ADATASPACE_SCRGB) == static_cast<int>(HAL_DATASPACE_V0_SCRGB));
    static_assert(static_cast<int>(ADATASPACE_DISPLAY_P3) == static_cast<int>(HAL_DATASPACE_DISPLAY_P3));
    static_assert(static_cast<int>(ADATASPACE_BT2020_PQ) == static_cast<int>(HAL_DATASPACE_BT2020_PQ));
    static_assert(static_cast<int>(ADATASPACE_ADOBE_RGB) == static_cast<int>(HAL_DATASPACE_ADOBE_RGB));
    static_assert(static_cast<int>(ADATASPACE_BT2020) == static_cast<int>(HAL_DATASPACE_BT2020));
    static_assert(static_cast<int>(ADATASPACE_BT709) == static_cast<int>(HAL_DATASPACE_V0_BT709));
    static_assert(static_cast<int>(ADATASPACE_DCI_P3) == static_cast<int>(HAL_DATASPACE_DCI_P3));
    static_assert(static_cast<int>(ADATASPACE_SRGB_LINEAR) == static_cast<int>(HAL_DATASPACE_V0_SRGB_LINEAR));

    if (!window || !query(window, NATIVE_WINDOW_IS_VALID) ||
            !isDataSpaceValid(window, dataSpace)) {
+50 −0
Original line number Diff line number Diff line
@@ -101,6 +101,56 @@ enum ADataSpace {
     * Use full range, SMPTE 2084 (PQ) transfer and BT2020 standard
     */
    ADATASPACE_BT2020_PQ = 163971072, // STANDARD_BT2020 | TRANSFER_ST2084 | RANGE_FULL

    /**
     * Adobe RGB
     *
     * Use full range, gamma 2.2 transfer and Adobe RGB primaries
     * Note: Application is responsible for gamma encoding the data as
     * a 2.2 gamma encoding is not supported in HW.
     */
    ADATASPACE_ADOBE_RGB = 151715840, // STANDARD_ADOBE_RGB | TRANSFER_GAMMA2_2 | RANGE_FULL

    /**
     * ITU-R Recommendation 2020 (BT.2020)
     *
     * Ultra High-definition television
     *
     * Use full range, BT.709 transfer and BT2020 standard
     */
    ADATASPACE_BT2020 = 147193856, // STANDARD_BT2020 | TRANSFER_SMPTE_170M | RANGE_FULL

    /**
     * ITU-R Recommendation 709 (BT.709)
     *
     * High-definition television
     *
     * Use limited range, BT.709 transfer and BT.709 standard.
     */
    ADATASPACE_BT709 = 281083904, // STANDARD_BT709 | TRANSFER_SMPTE_170M | RANGE_LIMITED

    /**
     * SMPTE EG 432-1 and SMPTE RP 431-2.
     *
     * Digital Cinema DCI-P3
     *
     * Use full range, gamma 2.6 transfer and D65 DCI-P3 standard
     * Note: Application is responsible for gamma encoding the data as
     * a 2.6 gamma encoding is not supported in HW.
     */
    ADATASPACE_DCI_P3 = 155844608, // STANDARD_DCI_P3 | TRANSFER_GAMMA2_6 | RANGE_FULL

    /**
     * sRGB linear encoding:
     *
     * The red, green, and blue components are stored in sRGB space, but
     * are linear, not gamma-encoded.
     * The RGB primaries and the white point are the same as BT.709.
     *
     * The values are encoded using the full range ([0,255] for 8-bit) for all
     * components.
     */
    ADATASPACE_SRGB_LINEAR = 138477568, // STANDARD_BT709 | TRANSFER_LINEAR | RANGE_FULL
};

__END_DECLS
+5 −1
Original line number Diff line number Diff line
@@ -53,11 +53,15 @@ cc_test {
        "libgui",
        "liblayers_proto",
        "liblog",
        "libnativewindow",
        "libprotobuf-cpp-full",
        "libtimestats_proto",
        "libui",
        "libutils",
    ]
    ],
    header_libs: [
        "libnativewindow_headers",
    ],
}

cc_defaults {
+46 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@
#include <aidl/android/hardware/graphics/common/BlendMode.h>
#include <aidl/android/hardware/graphics/common/Dataspace.h>

#include <android/data_space.h>
#include <android/hardware/graphics/common/1.2/types.h>
#include <android/hardware/graphics/composer/2.1/IComposerClient.h>

@@ -34,6 +35,51 @@ static_assert(static_cast<uint32_t>(AidlBlendMode::PREMULTIPLIED) ==
static_assert(static_cast<uint32_t>(AidlBlendMode::COVERAGE) ==
              static_cast<uint32_t>(HidlBlendMode::COVERAGE));

static_assert(static_cast<uint32_t>(ADATASPACE_UNKNOWN) ==
              static_cast<uint32_t>(AidlDataspace::UNKNOWN));
static_assert(static_cast<uint32_t>(ADATASPACE_SCRGB_LINEAR) ==
              static_cast<uint32_t>(AidlDataspace::SCRGB_LINEAR));
static_assert(static_cast<uint32_t>(ADATASPACE_SRGB) == static_cast<uint32_t>(AidlDataspace::SRGB));
static_assert(static_cast<uint32_t>(ADATASPACE_SCRGB) ==
              static_cast<uint32_t>(AidlDataspace::SCRGB));
static_assert(static_cast<uint32_t>(ADATASPACE_DISPLAY_P3) ==
              static_cast<uint32_t>(AidlDataspace::DISPLAY_P3));
static_assert(static_cast<uint32_t>(ADATASPACE_BT2020_PQ) ==
              static_cast<uint32_t>(AidlDataspace::BT2020_PQ));
static_assert(static_cast<uint32_t>(ADATASPACE_ADOBE_RGB) ==
              static_cast<uint32_t>(AidlDataspace::ADOBE_RGB));
static_assert(static_cast<uint32_t>(ADATASPACE_BT2020) ==
              static_cast<uint32_t>(AidlDataspace::BT2020));
static_assert(static_cast<uint32_t>(ADATASPACE_BT709) ==
              static_cast<uint32_t>(AidlDataspace::BT709));
static_assert(static_cast<uint32_t>(ADATASPACE_DCI_P3) ==
              static_cast<uint32_t>(AidlDataspace::DCI_P3));
static_assert(static_cast<uint32_t>(ADATASPACE_SRGB_LINEAR) ==
              static_cast<uint32_t>(AidlDataspace::SRGB_LINEAR));

static_assert(static_cast<uint32_t>(ADATASPACE_UNKNOWN) ==
              static_cast<uint32_t>(HidlDataspace::UNKNOWN));
static_assert(static_cast<uint32_t>(ADATASPACE_SCRGB_LINEAR) ==
              static_cast<uint32_t>(HidlDataspace::V0_SCRGB_LINEAR));
static_assert(static_cast<uint32_t>(ADATASPACE_SRGB) ==
              static_cast<uint32_t>(HidlDataspace::V0_SRGB));
static_assert(static_cast<uint32_t>(ADATASPACE_SCRGB) ==
              static_cast<uint32_t>(HidlDataspace::V0_SCRGB));
static_assert(static_cast<uint32_t>(ADATASPACE_DISPLAY_P3) ==
              static_cast<uint32_t>(HidlDataspace::DISPLAY_P3));
static_assert(static_cast<uint32_t>(ADATASPACE_BT2020_PQ) ==
              static_cast<uint32_t>(HidlDataspace::BT2020_PQ));
static_assert(static_cast<uint32_t>(ADATASPACE_ADOBE_RGB) ==
              static_cast<uint32_t>(HidlDataspace::ADOBE_RGB));
static_assert(static_cast<uint32_t>(ADATASPACE_BT2020) ==
              static_cast<uint32_t>(HidlDataspace::BT2020));
static_assert(static_cast<uint32_t>(ADATASPACE_BT709) ==
              static_cast<uint32_t>(HidlDataspace::V0_BT709));
static_assert(static_cast<uint32_t>(ADATASPACE_DCI_P3) ==
              static_cast<uint32_t>(HidlDataspace::DCI_P3));
static_assert(static_cast<uint32_t>(ADATASPACE_SRGB_LINEAR) ==
              static_cast<uint32_t>(HidlDataspace::V0_SRGB_LINEAR));

static_assert(static_cast<uint32_t>(AidlDataspace::UNKNOWN) ==
              static_cast<uint32_t>(HidlDataspace::UNKNOWN));
static_assert(static_cast<uint32_t>(AidlDataspace::ARBITRARY) ==