aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoman Stratiienko <roman.o.stratiienko@globallogic.com>2021-09-29 12:47:21 +0300
committerRoman Stratiienko <roman.o.stratiienko@globallogic.com>2021-09-29 12:47:21 +0300
commit515da8f6265b47274c587d61561a2761d1386de6 (patch)
tree7924e28156c79197e6a22ff2e6fbc5b4d0d08228
parent0dbe6394386ec3a3a989f695be350a026a89865f (diff)
downloaddrm_hwcomposer-515da8f6265b47274c587d61561a2761d1386de6.tar.gz
drm_hwcomposer: Create intermediate enum for colorspace and samplerange
Part of "frontend" isolation activities. Also allows to additionally simplify atomic commit. Signed-off-by: Roman Stratiienko <roman.o.stratiienko@globallogic.com>
-rw-r--r--DrmHwcTwo.cpp32
-rw-r--r--DrmHwcTwo.h3
-rw-r--r--drm/DrmPlane.cpp36
-rw-r--r--include/drmhwcomposer.h16
4 files changed, 64 insertions, 23 deletions
diff --git a/DrmHwcTwo.cpp b/DrmHwcTwo.cpp
index 968d3ce..2e47083 100644
--- a/DrmHwcTwo.cpp
+++ b/DrmHwcTwo.cpp
@@ -1084,7 +1084,34 @@ HWC2::Error DrmHwcTwo::HwcLayer::SetLayerCompositionType(int32_t type) {
HWC2::Error DrmHwcTwo::HwcLayer::SetLayerDataspace(int32_t dataspace) {
supported(__func__);
- dataspace_ = static_cast<android_dataspace_t>(dataspace);
+ switch (dataspace & HAL_DATASPACE_STANDARD_MASK) {
+ case HAL_DATASPACE_STANDARD_BT709:
+ color_space_ = DrmHwcColorSpace::kItuRec709;
+ break;
+ case HAL_DATASPACE_STANDARD_BT601_625:
+ case HAL_DATASPACE_STANDARD_BT601_625_UNADJUSTED:
+ case HAL_DATASPACE_STANDARD_BT601_525:
+ case HAL_DATASPACE_STANDARD_BT601_525_UNADJUSTED:
+ color_space_ = DrmHwcColorSpace::kItuRec601;
+ break;
+ case HAL_DATASPACE_STANDARD_BT2020:
+ case HAL_DATASPACE_STANDARD_BT2020_CONSTANT_LUMINANCE:
+ color_space_ = DrmHwcColorSpace::kItuRec2020;
+ break;
+ default:
+ color_space_ = DrmHwcColorSpace::kUndefined;
+ }
+
+ switch (dataspace & HAL_DATASPACE_RANGE_MASK) {
+ case HAL_DATASPACE_RANGE_FULL:
+ sample_range_ = DrmHwcSampleRange::kFullRange;
+ break;
+ case HAL_DATASPACE_RANGE_LIMITED:
+ sample_range_ = DrmHwcSampleRange::kLimitedRange;
+ break;
+ default:
+ sample_range_ = DrmHwcSampleRange::kUndefined;
+ }
return HWC2::Error::None;
}
@@ -1164,7 +1191,8 @@ void DrmHwcTwo::HwcLayer::PopulateDrmLayer(DrmHwcLayer *layer) {
layer->alpha = lround(65535.0F * alpha_);
layer->source_crop = source_crop_;
layer->SetTransform(static_cast<int32_t>(transform_));
- layer->dataspace = dataspace_;
+ layer->color_space = color_space_;
+ layer->sample_range = sample_range_;
}
void DrmHwcTwo::HandleDisplayHotplug(hwc2_display_t displayid, int state) {
diff --git a/DrmHwcTwo.h b/DrmHwcTwo.h
index 111c664..807ad25 100644
--- a/DrmHwcTwo.h
+++ b/DrmHwcTwo.h
@@ -143,7 +143,8 @@ class DrmHwcTwo : public hwc2_device_t {
hwc_color_t layer_color_;
HWC2::Transform transform_ = HWC2::Transform::None;
uint32_t z_order_ = 0;
- android_dataspace_t dataspace_ = HAL_DATASPACE_UNKNOWN;
+ DrmHwcColorSpace color_space_ = DrmHwcColorSpace::kUndefined;
+ DrmHwcSampleRange sample_range_ = DrmHwcSampleRange::kUndefined;
};
class HwcDisplay {
diff --git a/drm/DrmPlane.cpp b/drm/DrmPlane.cpp
index fd08379..1de1fce 100644
--- a/drm/DrmPlane.cpp
+++ b/drm/DrmPlane.cpp
@@ -337,40 +337,38 @@ auto DrmPlane::AtomicSetState(drmModeAtomicReq &pset, DrmHwcLayer &layer,
}
if (color_encoding_propery_) {
- switch (layer.dataspace & HAL_DATASPACE_STANDARD_MASK) {
- case HAL_DATASPACE_STANDARD_BT709:
+ switch (layer.color_space) {
+ case DrmHwcColorSpace::kItuRec709:
std::tie(color_encoding,
ret) = color_encoding_propery_
.GetEnumValueWithName("ITU-R BT.709 YCbCr");
break;
- case HAL_DATASPACE_STANDARD_BT601_625:
- case HAL_DATASPACE_STANDARD_BT601_625_UNADJUSTED:
- case HAL_DATASPACE_STANDARD_BT601_525:
- case HAL_DATASPACE_STANDARD_BT601_525_UNADJUSTED:
+ case DrmHwcColorSpace::kItuRec601:
std::tie(color_encoding,
ret) = color_encoding_propery_
.GetEnumValueWithName("ITU-R BT.601 YCbCr");
break;
- case HAL_DATASPACE_STANDARD_BT2020:
- case HAL_DATASPACE_STANDARD_BT2020_CONSTANT_LUMINANCE:
+ case DrmHwcColorSpace::kItuRec2020:
std::tie(color_encoding,
ret) = color_encoding_propery_
.GetEnumValueWithName("ITU-R BT.2020 YCbCr");
break;
+ default:
+ break;
}
}
- if (color_range_property_) {
- switch (layer.dataspace & HAL_DATASPACE_RANGE_MASK) {
- case HAL_DATASPACE_RANGE_FULL:
- std::tie(color_range, ret) = color_range_property_.GetEnumValueWithName(
- "YCbCr full range");
- break;
- case HAL_DATASPACE_RANGE_LIMITED:
- std::tie(color_range, ret) = color_range_property_.GetEnumValueWithName(
- "YCbCr limited range");
- break;
- }
+ switch (layer.sample_range) {
+ case DrmHwcSampleRange::kFullRange:
+ std::tie(color_range, ret) = color_range_property_.GetEnumValueWithName(
+ "YCbCr full range");
+ break;
+ case DrmHwcSampleRange::kLimitedRange:
+ std::tie(color_range, ret) = color_range_property_.GetEnumValueWithName(
+ "YCbCr limited range");
+ break;
+ default:
+ break;
}
if (!crtc_property_.AtomicSet(pset, crtc_id) ||
diff --git a/include/drmhwcomposer.h b/include/drmhwcomposer.h
index 22af12b..8abf840 100644
--- a/include/drmhwcomposer.h
+++ b/include/drmhwcomposer.h
@@ -32,6 +32,19 @@ namespace android {
class DrmFbIdHandle;
+enum class DrmHwcColorSpace : int32_t {
+ kUndefined,
+ kItuRec601,
+ kItuRec709,
+ kItuRec2020,
+};
+
+enum class DrmHwcSampleRange : int32_t {
+ kUndefined,
+ kFullRange,
+ kLimitedRange,
+};
+
enum DrmHwcTransform {
kIdentity = 0,
kFlipH = 1 << 0,
@@ -58,7 +71,8 @@ struct DrmHwcLayer {
uint16_t alpha = 0xffff;
hwc_frect_t source_crop;
hwc_rect_t display_frame;
- android_dataspace_t dataspace;
+ DrmHwcColorSpace color_space;
+ DrmHwcSampleRange sample_range;
UniqueFd acquire_fence;