diff options
author | Matvii Zorin <matvii.zorin@globallogic.com> | 2021-01-31 14:45:05 +0200 |
---|---|---|
committer | Matvii Zorin <matvii.zorin@globallogic.com> | 2021-04-06 12:46:22 +0300 |
commit | 67a89d33b82caf45997bcdd3ca7690b5bd3ebef5 (patch) | |
tree | a1e4be71aa72b954dd082de36c8026e6e9ae6c18 | |
parent | b865227a2528d8a9d5ada90d1409dda47094b602 (diff) | |
download | drm_hwcomposer-67a89d33b82caf45997bcdd3ca7690b5bd3ebef5.tar.gz |
drm_hwcomposer: Move ValidatePlane method into DrmPlane
It is more common to validate the layer for the proper object.
Signed-off-by: Matvii Zorin <matvii.zorin@globallogic.com>
-rw-r--r-- | compositor/Planner.cpp | 51 | ||||
-rw-r--r-- | compositor/Planner.h | 4 | ||||
-rw-r--r-- | drm/DrmPlane.cpp | 51 | ||||
-rw-r--r-- | drm/DrmPlane.h | 2 |
4 files changed, 54 insertions, 54 deletions
diff --git a/compositor/Planner.cpp b/compositor/Planner.cpp index d87e79f..42259d1 100644 --- a/compositor/Planner.cpp +++ b/compositor/Planner.cpp @@ -44,57 +44,6 @@ std::vector<DrmPlane *> Planner::GetUsablePlanes( return usable_planes; } -int Planner::PlanStage::ValidatePlane(DrmPlane *plane, DrmHwcLayer *layer) { - int ret = 0; - uint64_t blend = UINT64_MAX; - - if ((plane->rotation_property().id() == 0) && - layer->transform != DrmHwcTransform::kIdentity) { - ALOGE("Rotation is not supported on plane %d", plane->id()); - return -EINVAL; - } - - if (plane->alpha_property().id() == 0 && layer->alpha != 0xffff) { - ALOGE("Alpha is not supported on plane %d", plane->id()); - return -EINVAL; - } - - if (plane->blend_property().id() == 0) { - if ((layer->blending != DrmHwcBlending::kNone) && - (layer->blending != DrmHwcBlending::kPreMult)) { - ALOGE("Blending is not supported on plane %d", plane->id()); - return -EINVAL; - } - } else { - switch (layer->blending) { - case DrmHwcBlending::kPreMult: - std::tie(blend, ret) = plane->blend_property().GetEnumValueWithName( - "Pre-multiplied"); - break; - case DrmHwcBlending::kCoverage: - std::tie(blend, ret) = plane->blend_property().GetEnumValueWithName( - "Coverage"); - break; - case DrmHwcBlending::kNone: - default: - std::tie(blend, - ret) = plane->blend_property().GetEnumValueWithName("None"); - break; - } - if (ret) - ALOGE("Expected a valid blend mode on plane %d", plane->id()); - } - - uint32_t format = layer->buffer->format; - if (!plane->IsFormatSupported(format)) { - ALOGE("Plane %d does not supports %c%c%c%c format", plane->id(), format, - format >> 8, format >> 16, format >> 24); - return -EINVAL; - } - - return ret; -} - std::tuple<int, std::vector<DrmCompositionPlane>> Planner::ProvisionPlanes( std::map<size_t, DrmHwcLayer *> &layers, DrmCrtc *crtc, std::vector<DrmPlane *> *primary_planes, diff --git a/compositor/Planner.h b/compositor/Planner.h index 7c1fe80..3390acb 100644 --- a/compositor/Planner.h +++ b/compositor/Planner.h @@ -52,8 +52,6 @@ class Planner { return plane; } - static int ValidatePlane(DrmPlane *plane, DrmHwcLayer *layer); - // Inserts the given layer:plane in the composition at the back static int Emplace(std::vector<DrmCompositionPlane> *composition, std::vector<DrmPlane *> *planes, @@ -63,7 +61,7 @@ class Planner { std::vector<DrmPlane *> unused_planes; int ret = -ENOENT; while (plane) { - ret = ValidatePlane(plane, layer.second); + ret = plane->IsValidForLayer(layer.second) ? 0 : -EINVAL; if (!ret) break; if (!plane->zpos_property().is_immutable()) diff --git a/drm/DrmPlane.cpp b/drm/DrmPlane.cpp index 2967a7a..b841189 100644 --- a/drm/DrmPlane.cpp +++ b/drm/DrmPlane.cpp @@ -164,6 +164,57 @@ bool DrmPlane::GetCrtcSupported(const DrmCrtc &crtc) const { return ((1 << crtc.pipe()) & possible_crtc_mask_) != 0; } +bool DrmPlane::IsValidForLayer(DrmHwcLayer *layer) { + if ((rotation_property_.id() == 0) && + layer->transform != DrmHwcTransform::kIdentity) { + ALOGV("Rotation is not supported on plane %d", id_); + return false; + } + + if (alpha_property_.id() == 0 && layer->alpha != 0xffff) { + ALOGV("Alpha is not supported on plane %d", id_); + return false; + } + + if (blend_property_.id() == 0) { + if ((layer->blending != DrmHwcBlending::kNone) && + (layer->blending != DrmHwcBlending::kPreMult)) { + ALOGV("Blending is not supported on plane %d", id_); + return false; + } + } else { + int ret = 0; + uint64_t blend = 0; + + switch (layer->blending) { + case DrmHwcBlending::kPreMult: + std::tie(blend, + ret) = blend_property_.GetEnumValueWithName("Pre-multiplied"); + break; + case DrmHwcBlending::kCoverage: + std::tie(blend, ret) = blend_property_.GetEnumValueWithName("Coverage"); + break; + case DrmHwcBlending::kNone: + default: + std::tie(blend, ret) = blend_property_.GetEnumValueWithName("None"); + break; + } + if (ret) { + ALOGV("Expected a valid blend mode on plane %d", id_); + return false; + } + } + + uint32_t format = layer->buffer->format; + if (!IsFormatSupported(format)) { + ALOGV("Plane %d does not supports %c%c%c%c format", id_, format, + format >> 8, format >> 16, format >> 24); + return false; + } + + return true; +} + uint32_t DrmPlane::type() const { return type_; } diff --git a/drm/DrmPlane.h b/drm/DrmPlane.h index 2e2c121..862a0f3 100644 --- a/drm/DrmPlane.h +++ b/drm/DrmPlane.h @@ -24,6 +24,7 @@ #include "DrmCrtc.h" #include "DrmProperty.h" +#include "drmhwcomposer.h" namespace android { @@ -40,6 +41,7 @@ class DrmPlane { uint32_t id() const; bool GetCrtcSupported(const DrmCrtc &crtc) const; + bool IsValidForLayer(DrmHwcLayer *layer); uint32_t type() const; |