1 /* 2 * Copyright (C) 2022 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #pragma once 18 19 #include <hardware/hardware.h> 20 #include <hardware/hwcomposer.h> 21 22 #include <cmath> 23 #include <cstdbool> 24 #include <cstdint> 25 #include <optional> 26 #include <vector> 27 28 #include "bufferinfo/BufferInfo.h" 29 #include "drm/DrmFbImporter.h" 30 #include "utils/fd.h" 31 32 namespace android { 33 34 class DrmFbIdHandle; 35 36 /* Rotation is defined in the clockwise direction */ 37 enum LayerTransform : uint32_t { 38 kIdentity = 0, 39 kFlipH = 1 << 0, 40 kFlipV = 1 << 1, 41 kRotate90 = 1 << 2, 42 kRotate180 = 1 << 3, 43 kRotate270 = 1 << 4, 44 }; 45 46 struct PresentInfo { 47 LayerTransform transform{}; 48 uint16_t alpha = UINT16_MAX; 49 hwc_frect_t source_crop{}; 50 hwc_rect_t display_frame{}; 51 RequireScalingOrPhasingPresentInfo52 bool RequireScalingOrPhasing() const { 53 const float src_width = source_crop.right - source_crop.left; 54 const float src_height = source_crop.bottom - source_crop.top; 55 56 auto dest_width = float(display_frame.right - display_frame.left); 57 auto dest_height = float(display_frame.bottom - display_frame.top); 58 59 auto scaling = src_width != dest_width || src_height != dest_height; 60 auto phasing = (source_crop.left - std::floor(source_crop.left) != 0) || 61 (source_crop.top - std::floor(source_crop.top) != 0); 62 return scaling || phasing; 63 } 64 }; 65 66 struct LayerData { 67 std::optional<BufferInfo> bi; 68 std::shared_ptr<DrmFbIdHandle> fb; 69 PresentInfo pi; 70 SharedFd acquire_fence; 71 }; 72 73 } // namespace android 74