diff options
author | Roman Stratiienko <roman.o.stratiienko@globallogic.com> | 2021-09-29 12:47:21 +0300 |
---|---|---|
committer | Roman Stratiienko <roman.o.stratiienko@globallogic.com> | 2021-09-29 12:47:21 +0300 |
commit | 515da8f6265b47274c587d61561a2761d1386de6 (patch) | |
tree | 7924e28156c79197e6a22ff2e6fbc5b4d0d08228 | |
parent | 0dbe6394386ec3a3a989f695be350a026a89865f (diff) | |
download | drm_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.cpp | 32 | ||||
-rw-r--r-- | DrmHwcTwo.h | 3 | ||||
-rw-r--r-- | drm/DrmPlane.cpp | 36 | ||||
-rw-r--r-- | include/drmhwcomposer.h | 16 |
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; |