/* * Copyright (C) 2015 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. */ #pragma once #include #include #include #include "DrmCrtc.h" #include "DrmProperty.h" #include "compositor/LayerData.h" namespace android { class DrmDevice; struct LayerData; class DrmPlane : public PipelineBindable { public: DrmPlane(const DrmPlane &) = delete; DrmPlane &operator=(const DrmPlane &) = delete; static auto CreateInstance(DrmDevice &dev, uint32_t plane_id) -> std::unique_ptr; bool IsCrtcSupported(const DrmCrtc &crtc) const; bool IsValidForLayer(LayerData *layer); auto GetType() const { return type_; } bool IsFormatSupported(uint32_t format) const; bool HasNonRgbFormat() const; auto AtomicSetState(drmModeAtomicReq &pset, LayerData &layer, uint32_t zpos, uint32_t crtc_id) -> int; auto AtomicDisablePlane(drmModeAtomicReq &pset) -> int; auto &GetZPosProperty() const { return zpos_property_; } auto GetId() const { return plane_->plane_id; } private: DrmPlane(DrmDevice &dev, DrmModePlaneUnique plane) : drm_(&dev), plane_(std::move(plane)){}; DrmDevice *const drm_; DrmModePlaneUnique plane_; enum class Presence { kOptional, kMandatory }; auto Init() -> int; auto GetPlaneProperty(const char *prop_name, DrmProperty &property, Presence presence = Presence::kMandatory) -> bool; uint32_t type_{}; std::vector formats_; DrmProperty crtc_property_; DrmProperty fb_property_; DrmProperty crtc_x_property_; DrmProperty crtc_y_property_; DrmProperty crtc_w_property_; DrmProperty crtc_h_property_; DrmProperty src_x_property_; DrmProperty src_y_property_; DrmProperty src_w_property_; DrmProperty src_h_property_; DrmProperty zpos_property_; DrmProperty rotation_property_; DrmProperty alpha_property_; DrmProperty blend_property_; DrmProperty in_fence_fd_property_; DrmProperty color_encoding_propery_; DrmProperty color_range_property_; std::map blending_enum_map_; std::map color_encoding_enum_map_; std::map color_range_enum_map_; std::map transform_enum_map_; }; } // namespace android