mirror of
https://github.com/Evolution-X/hardware_interfaces
synced 2026-02-01 16:50:18 +00:00
ComposerHAL APIs for HDR output control
Bug: 251168514 Test: atest VtsHalGraphicsComposer3_TargetTest Change-Id: Icf5437c6dab2c8ce9247617f6e6006051fc206fb
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
/**
|
||||
* Copyright (c) 2022, The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. //
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// This file is a snapshot of an AIDL file. Do not edit it manually. There are
|
||||
// two cases:
|
||||
// 1). this is a frozen version file - do not edit this in any case.
|
||||
// 2). this is a 'current' file. If you make a backwards compatible change to
|
||||
// the interface (from the latest frozen version), the build system will
|
||||
// prompt you to update this file with `m <name>-update-api`.
|
||||
//
|
||||
// You must not make a backward incompatible change to any AIDL file built
|
||||
// with the aidl_interface module type with versions property set. The module
|
||||
// type is used to build AIDL files in a way that they can be used across
|
||||
// independently updatable components of the system. If a device is shipped
|
||||
// with such a backward incompatible change, it has a high risk of breaking
|
||||
// later when a module using the interface is updated, e.g., Mainline modules.
|
||||
|
||||
package android.hardware.graphics.common;
|
||||
@VintfStability
|
||||
parcelable HdrConversionCapability {
|
||||
android.hardware.graphics.common.ParcelableHdr sourceType;
|
||||
@nullable android.hardware.graphics.common.ParcelableHdr outputType;
|
||||
boolean addsLatency;
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
/**
|
||||
* Copyright (c) 2022, The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. //
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// This file is a snapshot of an AIDL file. Do not edit it manually. There are
|
||||
// two cases:
|
||||
// 1). this is a frozen version file - do not edit this in any case.
|
||||
// 2). this is a 'current' file. If you make a backwards compatible change to
|
||||
// the interface (from the latest frozen version), the build system will
|
||||
// prompt you to update this file with `m <name>-update-api`.
|
||||
//
|
||||
// You must not make a backward incompatible change to any AIDL file built
|
||||
// with the aidl_interface module type with versions property set. The module
|
||||
// type is used to build AIDL files in a way that they can be used across
|
||||
// independently updatable components of the system. If a device is shipped
|
||||
// with such a backward incompatible change, it has a high risk of breaking
|
||||
// later when a module using the interface is updated, e.g., Mainline modules.
|
||||
|
||||
package android.hardware.graphics.common;
|
||||
@VintfStability
|
||||
union HdrConversionStrategy {
|
||||
boolean passthrough = true;
|
||||
android.hardware.graphics.common.Hdr[] autoAllowedHdrTypes;
|
||||
android.hardware.graphics.common.Hdr forceHdrConversion;
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
/**
|
||||
* Copyright (c) 2023, The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. //
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// This file is a snapshot of an AIDL file. Do not edit it manually. There are
|
||||
// two cases:
|
||||
// 1). this is a frozen version file - do not edit this in any case.
|
||||
// 2). this is a 'current' file. If you make a backwards compatible change to
|
||||
// the interface (from the latest frozen version), the build system will
|
||||
// prompt you to update this file with `m <name>-update-api`.
|
||||
//
|
||||
// You must not make a backward incompatible change to any AIDL file built
|
||||
// with the aidl_interface module type with versions property set. The module
|
||||
// type is used to build AIDL files in a way that they can be used across
|
||||
// independently updatable components of the system. If a device is shipped
|
||||
// with such a backward incompatible change, it has a high risk of breaking
|
||||
// later when a module using the interface is updated, e.g., Mainline modules.
|
||||
|
||||
package android.hardware.graphics.common;
|
||||
@VintfStability
|
||||
parcelable ParcelableHdr {
|
||||
android.hardware.graphics.common.Hdr hdr;
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
/**
|
||||
* Copyright (c) 2022, The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package android.hardware.graphics.common;
|
||||
|
||||
import android.hardware.graphics.common.ParcelableHdr;
|
||||
|
||||
/**
|
||||
* Output parameter for IComposerClient.getHdrConversionCapabilities
|
||||
*
|
||||
* @param sourceType is the HDR type that can be converted to outputType.
|
||||
*
|
||||
* @param outputType is the HDR type/ SDR that the source type can be converted to. The value null
|
||||
* is used to depict SDR outputType.
|
||||
*
|
||||
* @param addsLatency is false if no latency added due to HDR conversion from sourceType to
|
||||
* outputType, otherwise true.
|
||||
*/
|
||||
@VintfStability
|
||||
parcelable HdrConversionCapability {
|
||||
ParcelableHdr sourceType;
|
||||
@nullable ParcelableHdr outputType;
|
||||
boolean addsLatency;
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
/**
|
||||
* Copyright (c) 2022, The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package android.hardware.graphics.common;
|
||||
/**
|
||||
* Input parameter for IComposerClient.setHdrConversionStrategy
|
||||
*
|
||||
* @param passthrough - When this parameter is set to true, HDR conversion is disabled by the
|
||||
* implementation. The output HDR type will change dynamically to match the content. This value is
|
||||
* never set to false, as other union values will be present in the false case.
|
||||
*
|
||||
* @param autoAllowedHdrTypes - When this parameter is set, the output HDR type is selected by the
|
||||
* implementation. The implementation is only allowed to set the output HDR type to the HDR types
|
||||
* present in this list. If conversion to any of the autoHdrTypes types is not possible, the
|
||||
* implementation should do no conversion.
|
||||
*
|
||||
* @param forceHdrConversion - When this parameter is set, the implementation should convert all
|
||||
* content to this HDR type, when possible. If not possible, the functionality should be similar to
|
||||
* passthrough=true.
|
||||
*/
|
||||
@VintfStability
|
||||
union HdrConversionStrategy {
|
||||
boolean passthrough = true;
|
||||
android.hardware.graphics.common.Hdr[] autoAllowedHdrTypes;
|
||||
android.hardware.graphics.common.Hdr forceHdrConversion;
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
/**
|
||||
* Copyright (c) 2023, The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package android.hardware.graphics.common;
|
||||
|
||||
import android.hardware.graphics.common.Hdr;
|
||||
|
||||
@VintfStability
|
||||
parcelable ParcelableHdr {
|
||||
Hdr hdr;
|
||||
}
|
||||
@@ -40,4 +40,5 @@ enum Capability {
|
||||
PRESENT_FENCE_IS_NOT_RELIABLE = 3,
|
||||
SKIP_VALIDATE = 4,
|
||||
BOOT_DISPLAY_CONFIG = 5,
|
||||
HDR_OUTPUT_CONVERSION_CONFIG = 6,
|
||||
}
|
||||
|
||||
@@ -76,6 +76,8 @@ interface IComposerClient {
|
||||
void setVsyncEnabled(long display, boolean enabled);
|
||||
void setIdleTimerEnabled(long display, int timeoutMs);
|
||||
android.hardware.graphics.composer3.OverlayProperties getOverlaySupport();
|
||||
android.hardware.graphics.common.HdrConversionCapability[] getHdrConversionCapabilities();
|
||||
void setHdrConversionStrategy(in android.hardware.graphics.common.HdrConversionStrategy conversionStrategy);
|
||||
const int EX_BAD_CONFIG = 1;
|
||||
const int EX_BAD_DISPLAY = 2;
|
||||
const int EX_BAD_LAYER = 3;
|
||||
|
||||
@@ -66,4 +66,12 @@ enum Capability {
|
||||
* @see IComposerClient.getPreferredBootDisplayConfig
|
||||
*/
|
||||
BOOT_DISPLAY_CONFIG = 5,
|
||||
|
||||
/**
|
||||
* Specifies that the device supports HDR output conversion.
|
||||
*
|
||||
* @see IComposerClient.getHdrConversionCapabilities
|
||||
* @see IComposerClient.setHdrConversionStrategy
|
||||
*/
|
||||
HDR_OUTPUT_CONVERSION_CONFIG = 6,
|
||||
}
|
||||
|
||||
@@ -17,6 +17,8 @@
|
||||
package android.hardware.graphics.composer3;
|
||||
|
||||
import android.hardware.graphics.common.DisplayDecorationSupport;
|
||||
import android.hardware.graphics.common.HdrConversionCapability;
|
||||
import android.hardware.graphics.common.HdrConversionStrategy;
|
||||
import android.hardware.graphics.common.Transform;
|
||||
import android.hardware.graphics.composer3.ClientTargetProperty;
|
||||
import android.hardware.graphics.composer3.ColorMode;
|
||||
@@ -825,4 +827,25 @@ interface IComposerClient {
|
||||
* @return the overlay properties of the device.
|
||||
*/
|
||||
OverlayProperties getOverlaySupport();
|
||||
|
||||
/**
|
||||
* Returns the array of HDR conversion capability. Each HdrConversionCapability depicts that
|
||||
* HDR conversion is possible from sourceType to outputType. This doesn't change after
|
||||
* initialization.
|
||||
*
|
||||
* @exception EX_UNSUPPORTED when not supported by the underlying HAL
|
||||
*
|
||||
* @see setHdrConversionStrategy
|
||||
*/
|
||||
HdrConversionCapability[] getHdrConversionCapabilities();
|
||||
|
||||
/**
|
||||
* Sets the of HDR conversion strategy.
|
||||
*
|
||||
*
|
||||
* @exception EX_UNSUPPORTED when not supported by the underlying HAL
|
||||
*
|
||||
* @see getHdrConversionCapabilities
|
||||
*/
|
||||
void setHdrConversionStrategy(in HdrConversionStrategy conversionStrategy);
|
||||
}
|
||||
|
||||
@@ -337,6 +337,18 @@ std::pair<ScopedAStatus, int32_t> VtsComposerClient::getPreferredBootDisplayConf
|
||||
return {mComposerClient->getPreferredBootDisplayConfig(display, &outConfig), outConfig};
|
||||
}
|
||||
|
||||
std::pair<ScopedAStatus, std::vector<common::HdrConversionCapability>>
|
||||
VtsComposerClient::getHdrConversionCapabilities() {
|
||||
std::vector<common::HdrConversionCapability> hdrConversionCapability;
|
||||
return {mComposerClient->getHdrConversionCapabilities(&hdrConversionCapability),
|
||||
hdrConversionCapability};
|
||||
}
|
||||
|
||||
ScopedAStatus VtsComposerClient::setHdrConversionStrategy(
|
||||
const common::HdrConversionStrategy& conversionStrategy) {
|
||||
return mComposerClient->setHdrConversionStrategy(conversionStrategy);
|
||||
}
|
||||
|
||||
std::pair<ScopedAStatus, common::Transform> VtsComposerClient::getDisplayPhysicalOrientation(
|
||||
int64_t display) {
|
||||
common::Transform outDisplayOrientation;
|
||||
|
||||
@@ -163,6 +163,11 @@ class VtsComposerClient {
|
||||
|
||||
std::pair<ScopedAStatus, int32_t> getPreferredBootDisplayConfig(int64_t display);
|
||||
|
||||
std::pair<ScopedAStatus, std::vector<common::HdrConversionCapability>>
|
||||
getHdrConversionCapabilities();
|
||||
|
||||
ScopedAStatus setHdrConversionStrategy(const common::HdrConversionStrategy& conversionStrategy);
|
||||
|
||||
std::pair<ScopedAStatus, common::Transform> getDisplayPhysicalOrientation(int64_t display);
|
||||
|
||||
ScopedAStatus setIdleTimerEnabled(int64_t display, int32_t timeoutMs);
|
||||
|
||||
@@ -621,6 +621,63 @@ TEST_P(GraphicsComposerAidlTest, BootDisplayConfig_Unsupported) {
|
||||
}
|
||||
}
|
||||
|
||||
TEST_P(GraphicsComposerAidlTest, GetHdrConversionCapabilities) {
|
||||
if (!hasCapability(Capability::HDR_OUTPUT_CONVERSION_CONFIG)) {
|
||||
GTEST_SUCCEED() << "HDR output conversion not supported";
|
||||
return;
|
||||
}
|
||||
const auto& [status, conversionCapabilities] = mComposerClient->getHdrConversionCapabilities();
|
||||
EXPECT_TRUE(status.isOk());
|
||||
}
|
||||
|
||||
TEST_P(GraphicsComposerAidlTest, SetHdrConversionStrategy_Passthrough) {
|
||||
if (!hasCapability(Capability::HDR_OUTPUT_CONVERSION_CONFIG)) {
|
||||
GTEST_SUCCEED() << "HDR output conversion not supported";
|
||||
return;
|
||||
}
|
||||
common::HdrConversionStrategy hdrConversionStrategy;
|
||||
hdrConversionStrategy.set<common::HdrConversionStrategy::Tag::passthrough>(true);
|
||||
const auto& status = mComposerClient->setHdrConversionStrategy(hdrConversionStrategy);
|
||||
EXPECT_TRUE(status.isOk());
|
||||
}
|
||||
|
||||
TEST_P(GraphicsComposerAidlTest, SetHdrConversionStrategy_Force) {
|
||||
if (!hasCapability(Capability::HDR_OUTPUT_CONVERSION_CONFIG)) {
|
||||
GTEST_SUCCEED() << "HDR output conversion not supported";
|
||||
return;
|
||||
}
|
||||
const auto& [status, conversionCapabilities] = mComposerClient->getHdrConversionCapabilities();
|
||||
for (auto conversionCapability : conversionCapabilities) {
|
||||
if (conversionCapability.outputType) {
|
||||
common::HdrConversionStrategy hdrConversionStrategy;
|
||||
hdrConversionStrategy.set<common::HdrConversionStrategy::Tag::forceHdrConversion>(
|
||||
conversionCapability.outputType->hdr);
|
||||
const auto& statusSet =
|
||||
mComposerClient->setHdrConversionStrategy(hdrConversionStrategy);
|
||||
EXPECT_TRUE(status.isOk());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
TEST_P(GraphicsComposerAidlTest, SetHdrConversionStrategy_Auto) {
|
||||
if (!hasCapability(Capability::HDR_OUTPUT_CONVERSION_CONFIG)) {
|
||||
GTEST_SUCCEED() << "HDR output conversion not supported";
|
||||
return;
|
||||
}
|
||||
const auto& [status, conversionCapabilities] = mComposerClient->getHdrConversionCapabilities();
|
||||
std::vector<aidl::android::hardware::graphics::common::Hdr> autoHdrTypes;
|
||||
for (auto conversionCapability : conversionCapabilities) {
|
||||
if (conversionCapability.outputType) {
|
||||
autoHdrTypes.push_back(conversionCapability.outputType->hdr);
|
||||
}
|
||||
}
|
||||
common::HdrConversionStrategy hdrConversionStrategy;
|
||||
hdrConversionStrategy.set<common::HdrConversionStrategy::Tag::autoAllowedHdrTypes>(
|
||||
autoHdrTypes);
|
||||
const auto& statusSet = mComposerClient->setHdrConversionStrategy(hdrConversionStrategy);
|
||||
EXPECT_TRUE(status.isOk());
|
||||
}
|
||||
|
||||
TEST_P(GraphicsComposerAidlTest, SetAutoLowLatencyMode_BadDisplay) {
|
||||
auto status = mComposerClient->setAutoLowLatencyMode(getInvalidDisplayId(), /*isEnabled*/ true);
|
||||
EXPECT_FALSE(status.isOk());
|
||||
|
||||
Reference in New Issue
Block a user