Merge "Remove isDataspaceValid" into sc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
00b9b1190b
@@ -44,70 +44,14 @@ using Transaction = SurfaceComposerClient::Transaction;
|
|||||||
LOG_ALWAYS_FATAL_IF(!static_cast<const Rect&>(name).isValid(), \
|
LOG_ALWAYS_FATAL_IF(!static_cast<const Rect&>(name).isValid(), \
|
||||||
"invalid arg passed as " #name " argument");
|
"invalid arg passed as " #name " argument");
|
||||||
|
|
||||||
static bool getWideColorSupport(const sp<SurfaceControl>& surfaceControl) {
|
static_assert(static_cast<int>(ADATASPACE_UNKNOWN) == static_cast<int>(HAL_DATASPACE_UNKNOWN));
|
||||||
sp<SurfaceComposerClient> client = surfaceControl->getClient();
|
static_assert(static_cast<int>(ADATASPACE_SCRGB_LINEAR) ==
|
||||||
|
static_cast<int>(HAL_DATASPACE_V0_SCRGB_LINEAR));
|
||||||
const sp<IBinder> display = client->getInternalDisplayToken();
|
static_assert(static_cast<int>(ADATASPACE_SRGB) == static_cast<int>(HAL_DATASPACE_V0_SRGB));
|
||||||
if (display == nullptr) {
|
static_assert(static_cast<int>(ADATASPACE_SCRGB) == static_cast<int>(HAL_DATASPACE_V0_SCRGB));
|
||||||
ALOGE("unable to get wide color support for disconnected internal display");
|
static_assert(static_cast<int>(ADATASPACE_DISPLAY_P3) ==
|
||||||
return false;
|
static_cast<int>(HAL_DATASPACE_DISPLAY_P3));
|
||||||
}
|
static_assert(static_cast<int>(ADATASPACE_BT2020_PQ) == static_cast<int>(HAL_DATASPACE_BT2020_PQ));
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Transaction* ASurfaceTransaction_to_Transaction(ASurfaceTransaction* aSurfaceTransaction) {
|
Transaction* ASurfaceTransaction_to_Transaction(ASurfaceTransaction* aSurfaceTransaction) {
|
||||||
return reinterpret_cast<Transaction*>(aSurfaceTransaction);
|
return reinterpret_cast<Transaction*>(aSurfaceTransaction);
|
||||||
@@ -580,10 +524,6 @@ void ASurfaceTransaction_setBufferDataSpace(ASurfaceTransaction* aSurfaceTransac
|
|||||||
CHECK_NOT_NULL(aSurfaceControl);
|
CHECK_NOT_NULL(aSurfaceControl);
|
||||||
|
|
||||||
sp<SurfaceControl> surfaceControl = ASurfaceControl_to_SurfaceControl(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* transaction = ASurfaceTransaction_to_Transaction(aSurfaceTransaction);
|
||||||
transaction->setDataspace(surfaceControl, static_cast<ui::Dataspace>(aDataSpace));
|
transaction->setDataspace(surfaceControl, static_cast<ui::Dataspace>(aDataSpace));
|
||||||
}
|
}
|
||||||
@@ -650,10 +590,6 @@ void ASurfaceTransaction_setColor(ASurfaceTransaction* aSurfaceTransaction,
|
|||||||
CHECK_NOT_NULL(aSurfaceControl);
|
CHECK_NOT_NULL(aSurfaceControl);
|
||||||
|
|
||||||
sp<SurfaceControl> surfaceControl = ASurfaceControl_to_SurfaceControl(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);
|
Transaction* transaction = ASurfaceTransaction_to_Transaction(aSurfaceTransaction);
|
||||||
|
|
||||||
half3 color;
|
half3 color;
|
||||||
|
|||||||
Reference in New Issue
Block a user