summaryrefslogtreecommitdiff
path: root/native/android
diff options
context:
space:
mode:
authorJohn Reck <jreck@google.com>2021-07-12 21:51:09 -0400
committerJohn Reck <jreck@google.com>2021-07-12 21:53:35 -0400
commit2b2ba935f84fbac43d76be3c4a78c86c0cc985ab (patch)
tree115a7287794cc4d53f8084dc798ebdd228b9f2f0 /native/android
parent315a26781c9557fa0dbdae9c5d273102de3d8e6c (diff)
Remove isDataspaceValid
isDataspaceValid is problematic in that it prevents applications from being able to pass-through dataspaces they receive from other APIs, and it also assumes that the display's capabilities are the only things that are supported. Although it's recommended that applications stick to dataspaces that the display can handle, it's not strictly required. RenderEngine can handle more dataspaces than the display can, applying appropriate color conversion. Similarly this could be going to a virtual display instead, in which case the physical display's capabilities are not necessarily relevant. Bug: 149931223 Test: make Change-Id: I475f4e4dcbcdb4765670f6a8eb4cc047a9babb43
Diffstat (limited to 'native/android')
-rw-r--r--native/android/surface_control.cpp80
1 files changed, 8 insertions, 72 deletions
diff --git a/native/android/surface_control.cpp b/native/android/surface_control.cpp
index 93a54445a033..693a027bd0e2 100644
--- a/native/android/surface_control.cpp
+++ b/native/android/surface_control.cpp
@@ -44,70 +44,14 @@ using Transaction = SurfaceComposerClient::Transaction;
LOG_ALWAYS_FATAL_IF(!static_cast<const Rect&>(name).isValid(), \
"invalid arg passed as " #name " argument");
-static bool getWideColorSupport(const sp<SurfaceControl>& surfaceControl) {
- sp<SurfaceComposerClient> client = surfaceControl->getClient();
-
- const sp<IBinder> display = client->getInternalDisplayToken();
- if (display == nullptr) {
- ALOGE("unable to get wide color support for disconnected internal display");
- return false;
- }
-
- bool isWideColorDisplay = false;
- status_t err = client->isWideColorDisplay(display, &isWideColorDisplay);
- if (err) {
- ALOGE("unable to get wide color support");
- return false;
- }
- return isWideColorDisplay;
-}
-
-static bool getHdrSupport(const sp<SurfaceControl>& surfaceControl) {
- sp<SurfaceComposerClient> client = surfaceControl->getClient();
-
- const sp<IBinder> display = client->getInternalDisplayToken();
- if (display == nullptr) {
- ALOGE("unable to get hdr capabilities for disconnected internal display");
- return false;
- }
-
- ui::DynamicDisplayInfo info;
- if (status_t err = client->getDynamicDisplayInfo(display, &info); err != NO_ERROR) {
- ALOGE("unable to get hdr capabilities");
- return err;
- }
-
- return !info.hdrCapabilities.getSupportedHdrTypes().empty();
-}
-
-static bool isDataSpaceValid(const sp<SurfaceControl>& surfaceControl, ADataSpace dataSpace) {
- static_assert(static_cast<int>(ADATASPACE_UNKNOWN) == static_cast<int>(HAL_DATASPACE_UNKNOWN));
- static_assert(static_cast<int>(ADATASPACE_SCRGB_LINEAR) == static_cast<int>(HAL_DATASPACE_V0_SCRGB_LINEAR));
- static_assert(static_cast<int>(ADATASPACE_SRGB) == static_cast<int>(HAL_DATASPACE_V0_SRGB));
- 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));
-
- switch (static_cast<android_dataspace_t>(dataSpace)) {
- case HAL_DATASPACE_UNKNOWN:
- case HAL_DATASPACE_V0_SRGB:
- return true;
- // These data space need wide gamut support.
- case HAL_DATASPACE_V0_SCRGB_LINEAR:
- case HAL_DATASPACE_V0_SCRGB:
- case HAL_DATASPACE_DISPLAY_P3:
- return getWideColorSupport(surfaceControl);
- // These data space need HDR support.
- case HAL_DATASPACE_BT2020_PQ:
- if (!getHdrSupport(surfaceControl)) {
- ALOGE("Invalid dataspace - device does not support hdr");
- return false;
- }
- return true;
- default:
- return false;
- }
-}
+static_assert(static_cast<int>(ADATASPACE_UNKNOWN) == static_cast<int>(HAL_DATASPACE_UNKNOWN));
+static_assert(static_cast<int>(ADATASPACE_SCRGB_LINEAR) ==
+ static_cast<int>(HAL_DATASPACE_V0_SCRGB_LINEAR));
+static_assert(static_cast<int>(ADATASPACE_SRGB) == static_cast<int>(HAL_DATASPACE_V0_SRGB));
+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));
Transaction* ASurfaceTransaction_to_Transaction(ASurfaceTransaction* aSurfaceTransaction) {
return reinterpret_cast<Transaction*>(aSurfaceTransaction);
@@ -580,10 +524,6 @@ void ASurfaceTransaction_setBufferDataSpace(ASurfaceTransaction* aSurfaceTransac
CHECK_NOT_NULL(aSurfaceControl);
sp<SurfaceControl> surfaceControl = ASurfaceControl_to_SurfaceControl(aSurfaceControl);
- if (!isDataSpaceValid(surfaceControl, aDataSpace)) {
- ALOGE("Failed to set buffer dataspace - invalid dataspace");
- return;
- }
Transaction* transaction = ASurfaceTransaction_to_Transaction(aSurfaceTransaction);
transaction->setDataspace(surfaceControl, static_cast<ui::Dataspace>(aDataSpace));
}
@@ -650,10 +590,6 @@ void ASurfaceTransaction_setColor(ASurfaceTransaction* aSurfaceTransaction,
CHECK_NOT_NULL(aSurfaceControl);
sp<SurfaceControl> surfaceControl = ASurfaceControl_to_SurfaceControl(aSurfaceControl);
- if (!isDataSpaceValid(surfaceControl, dataspace)) {
- ALOGE("Failed to set buffer dataspace - invalid dataspace");
- return;
- }
Transaction* transaction = ASurfaceTransaction_to_Transaction(aSurfaceTransaction);
half3 color;