1/*
2 * Copyright 2018 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 <android-base/unique_fd.h>
20#include <android/hardware/graphics/composer/2.2/IComposer.h>
21#include <android/hardware/graphics/composer/2.2/IComposerClient.h>
22#include <composer-hal/2.1/ComposerHal.h>
23
24namespace android {
25namespace hardware {
26namespace graphics {
27namespace composer {
28namespace V2_2 {
29namespace hal {
30
31using common::V1_1::ColorMode;
32using common::V1_1::Dataspace;
33using common::V1_1::PixelFormat;
34using common::V1_1::RenderIntent;
35using V2_1::Display;
36using V2_1::Error;
37using V2_1::Layer;
38
39class ComposerHal : public V2_1::hal::ComposerHal {
40   public:
41    Error createVirtualDisplay(uint32_t width, uint32_t height, common::V1_0::PixelFormat* format,
42                               Display* outDisplay) override {
43        return createVirtualDisplay_2_2(width, height, reinterpret_cast<PixelFormat*>(format),
44                                        outDisplay);
45    }
46    Error getClientTargetSupport(Display display, uint32_t width, uint32_t height,
47                                 common::V1_0::PixelFormat format,
48                                 common::V1_0::Dataspace dataspace) override {
49        return getClientTargetSupport_2_2(display, width, height, static_cast<PixelFormat>(format),
50                                          static_cast<Dataspace>(dataspace));
51    }
52    // superceded by setPowerMode_2_2
53    Error setPowerMode(Display display, V2_1::IComposerClient::PowerMode mode) override {
54        return setPowerMode_2_2(display, static_cast<IComposerClient::PowerMode>(mode));
55    }
56
57    // superceded by getColorModes_2_2
58    Error getColorModes(Display display, hidl_vec<common::V1_0::ColorMode>* outModes) override {
59        return getColorModes_2_2(display, reinterpret_cast<hidl_vec<ColorMode>*>(outModes));
60    }
61
62    // superceded by setColorMode_2_2
63    Error setColorMode(Display display, common::V1_0::ColorMode mode) override {
64        return setColorMode_2_2(display, static_cast<ColorMode>(mode), RenderIntent::COLORIMETRIC);
65    }
66
67    virtual Error getPerFrameMetadataKeys(
68        Display display, std::vector<IComposerClient::PerFrameMetadataKey>* outKeys) = 0;
69    virtual Error setLayerPerFrameMetadata(
70        Display display, Layer layer,
71        const std::vector<IComposerClient::PerFrameMetadata>& metadata) = 0;
72
73    virtual Error getReadbackBufferAttributes(Display display, PixelFormat* outFormat,
74                                              Dataspace* outDataspace) = 0;
75    virtual Error setReadbackBuffer(Display display, const native_handle_t* bufferHandle,
76                                    base::unique_fd fenceFd) = 0;
77    virtual Error getReadbackBufferFence(Display display, base::unique_fd* outFenceFd) = 0;
78    virtual Error createVirtualDisplay_2_2(uint32_t width, uint32_t height, PixelFormat* format,
79                                           Display* outDisplay) = 0;
80    virtual Error getClientTargetSupport_2_2(Display display, uint32_t width, uint32_t height,
81                                             PixelFormat format, Dataspace dataspace) = 0;
82    virtual Error setPowerMode_2_2(Display display, IComposerClient::PowerMode mode) = 0;
83
84    virtual Error setLayerFloatColor(Display display, Layer layer,
85                                     IComposerClient::FloatColor color) = 0;
86
87    virtual Error getColorModes_2_2(Display display, hidl_vec<ColorMode>* outModes) = 0;
88    virtual Error getRenderIntents(Display display, ColorMode mode,
89                                   std::vector<RenderIntent>* outIntents) = 0;
90    virtual Error setColorMode_2_2(Display display, ColorMode mode, RenderIntent intent) = 0;
91
92    virtual std::array<float, 16> getDataspaceSaturationMatrix(Dataspace dataspace) = 0;
93};
94
95}  // namespace hal
96}  // namespace V2_2
97}  // namespace composer
98}  // namespace graphics
99}  // namespace hardware
100}  // namespace android
101