1/*
2 * Copyright (c) 2021 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *     http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16#ifndef INTERFACES_INNERKITS_SURFACE_SURFACE_H
17#define INTERFACES_INNERKITS_SURFACE_SURFACE_H
18
19#include <refbase.h>
20
21#include "ibuffer_consumer_listener.h"
22#include "ibuffer_producer.h"
23#include "surface_buffer.h"
24#include "surface_type.h"
25#include "surface_tunnel_handle.h"
26
27namespace OHOS {
28class Surface : public RefBase {
29public:
30    static sptr<Surface> CreateSurfaceAsConsumer(std::string name = "noname", bool isShared = false);
31    static sptr<Surface> CreateSurfaceAsProducer(sptr<IBufferProducer>& producer);
32
33    virtual ~Surface() = default;
34
35    virtual GSError GetProducerInitInfo(ProducerInitInfo &info) = 0;
36    virtual bool IsConsumer() const = 0;
37    virtual sptr<IBufferProducer> GetProducer() const = 0;
38
39    virtual GSError RequestBuffer(sptr<SurfaceBuffer>& buffer,
40                                  int32_t &fence, BufferRequestConfig &config) = 0;
41
42    virtual GSError RequestBuffers(std::vector<sptr<SurfaceBuffer>> &buffers,
43        std::vector<sptr<SyncFence>> &fences, BufferRequestConfig &config) = 0;
44
45    virtual GSError CancelBuffer(sptr<SurfaceBuffer>& buffer) = 0;
46
47    virtual GSError FlushBuffer(sptr<SurfaceBuffer>& buffer,
48                                int32_t fence, BufferFlushConfig &config) = 0;
49
50    virtual GSError AcquireBuffer(sptr<SurfaceBuffer>& buffer, int32_t &fence,
51                                  int64_t &timestamp, Rect &damage) = 0;
52    virtual GSError ReleaseBuffer(sptr<SurfaceBuffer>& buffer, int32_t fence) = 0;
53
54    virtual GSError RequestBuffer(sptr<SurfaceBuffer>& buffer,
55                                  sptr<SyncFence>& fence, BufferRequestConfig &config) = 0;
56    virtual GSError FlushBuffer(sptr<SurfaceBuffer>& buffer,
57                                const sptr<SyncFence>& fence, BufferFlushConfig &config) = 0;
58    virtual GSError AcquireBuffer(sptr<SurfaceBuffer>& buffer, sptr<SyncFence>& fence,
59                                  int64_t &timestamp, Rect &damage) = 0;
60    virtual GSError ReleaseBuffer(sptr<SurfaceBuffer>& buffer, const sptr<SyncFence>& fence) = 0;
61
62    virtual GSError AttachBuffer(sptr<SurfaceBuffer>& buffer) = 0;
63
64    virtual GSError DetachBuffer(sptr<SurfaceBuffer>& buffer) = 0;
65
66    virtual uint32_t GetQueueSize() = 0;
67    virtual GSError SetQueueSize(uint32_t queueSize) = 0;
68
69    virtual GSError SetDefaultWidthAndHeight(int32_t width, int32_t height) = 0;
70    virtual int32_t GetDefaultWidth() = 0;
71    virtual int32_t GetDefaultHeight() = 0;
72
73    virtual GSError SetDefaultUsage(uint64_t usage) = 0;
74    virtual uint64_t GetDefaultUsage() = 0;
75
76    virtual GSError SetUserData(const std::string &key, const std::string &val) = 0;
77    virtual std::string GetUserData(const std::string &key) = 0;
78
79    virtual const std::string& GetName() = 0;
80    virtual uint64_t GetUniqueId() const = 0;
81
82    virtual GSError RegisterConsumerListener(sptr<IBufferConsumerListener>& listener) = 0;
83    virtual GSError RegisterConsumerListener(IBufferConsumerListenerClazz *listener) = 0;
84    virtual GSError RegisterReleaseListener(OnReleaseFunc func) = 0;
85    virtual GSError RegisterDeleteBufferListener(OnDeleteBufferFunc func, bool isForUniRedraw = false) = 0;
86    virtual GSError UnregisterConsumerListener() = 0;
87
88    // Call carefully. This interface will empty all caches of the current process
89    virtual GSError CleanCache(bool cleanAll = false) = 0;
90    virtual GSError GoBackground() = 0;
91
92    virtual GSError SetTransform(GraphicTransformType transform) = 0;
93    virtual GraphicTransformType GetTransform() const = 0;
94
95    virtual GSError IsSupportedAlloc(const std::vector<BufferVerifyAllocInfo> &infos,
96                                     std::vector<bool> &supporteds) = 0;
97    virtual GSError Connect() = 0;
98    virtual GSError Disconnect() = 0;
99    virtual GSError SetScalingMode(uint32_t sequence, ScalingMode scalingMode) = 0;
100    virtual GSError GetScalingMode(uint32_t sequence, ScalingMode &scalingMode) = 0;
101    virtual GSError SetMetaData(uint32_t sequence, const std::vector<GraphicHDRMetaData> &metaData) = 0;
102    virtual GSError SetMetaDataSet(uint32_t sequence, GraphicHDRMetadataKey key,
103                                   const std::vector<uint8_t> &metaData) = 0;
104    virtual GSError QueryMetaDataType(uint32_t sequence, HDRMetaDataType &type) const = 0;
105    virtual GSError GetMetaData(uint32_t sequence, std::vector<GraphicHDRMetaData> &metaData) const = 0;
106    virtual GSError GetMetaDataSet(uint32_t sequence, GraphicHDRMetadataKey &key,
107                                   std::vector<uint8_t> &metaData) const = 0;
108    virtual GSError SetTunnelHandle(const GraphicExtDataHandle *handle) = 0;
109    virtual sptr<SurfaceTunnelHandle> GetTunnelHandle() const = 0;
110    virtual GSError SetPresentTimestamp(uint32_t sequence, const GraphicPresentTimestamp &timestamp) = 0;
111    virtual GSError GetPresentTimestamp(uint32_t sequence, GraphicPresentTimestampType type,
112                                        int64_t &time) const = 0;
113
114    virtual void Dump(std::string &result) const = 0;
115
116    virtual int32_t GetDefaultFormat() = 0;
117    virtual GSError SetDefaultFormat(int32_t format) = 0;
118    virtual int32_t GetDefaultColorGamut() = 0;
119    virtual GSError SetDefaultColorGamut(int32_t colorGamut) = 0;
120
121    virtual sptr<NativeSurface> GetNativeSurface() = 0;
122
123    virtual bool QueryIfBufferAvailable() = 0;
124    virtual GSError FlushBuffer(sptr<SurfaceBuffer>& buffer, const sptr<SyncFence>& fence,
125                                BufferFlushConfigWithDamages &config) = 0;
126    virtual GSError FlushBuffers(const std::vector<sptr<SurfaceBuffer>> &buffers,
127        const std::vector<sptr<SyncFence>> &fences, const std::vector<BufferFlushConfigWithDamages> &configs) = 0;
128    virtual GSError UnRegisterReleaseListener() = 0;
129    virtual GSError SetWptrNativeWindowToPSurface(void* nativeWindow) = 0;
130    virtual GSError GetLastFlushedBuffer(sptr<SurfaceBuffer>& buffer,
131        sptr<SyncFence>& fence, float matrix[16], bool isUseNewMatrix = false) = 0;
132    virtual GSError AttachBuffer(sptr<SurfaceBuffer>& buffer, int32_t timeOut) = 0;
133    virtual GSError RegisterSurfaceDelegator(sptr<IRemoteObject> client) = 0;
134    virtual GSError RegisterReleaseListener(OnReleaseFuncWithFence func) = 0;
135    virtual GSError RegisterUserDataChangeListener(const std::string &funcName, OnUserDataChangeFunc func) = 0;
136    virtual GSError UnRegisterUserDataChangeListener(const std::string &funcName) = 0;
137    virtual GSError ClearUserDataChangeListener() = 0;
138
139    virtual GSError AttachBufferToQueue(sptr<SurfaceBuffer> buffer) = 0;
140    virtual GSError DetachBufferFromQueue(sptr<SurfaceBuffer> buffer) = 0;
141
142    virtual GraphicTransformType GetTransformHint() const = 0;
143    virtual GSError SetTransformHint(GraphicTransformType transformHint) = 0;
144
145    virtual void SetRequestWidthAndHeight(int32_t width, int32_t height) = 0;
146    virtual int32_t GetRequestWidth() = 0;
147    virtual int32_t GetRequestHeight() = 0;
148
149    virtual void SetBufferHold(bool hold) = 0;
150    virtual void SetWindowConfig(const BufferRequestConfig& config)
151    {
152        (void)config;
153    }
154    virtual void SetWindowConfigWidthAndHeight(int32_t width, int32_t height)
155    {
156        (void)width;
157        (void)height;
158    }
159    virtual void SetWindowConfigStride(int32_t stride)
160    {
161        (void)stride;
162    }
163    virtual void SetWindowConfigFormat(int32_t format)
164    {
165        (void)format;
166    }
167    virtual void SetWindowConfigUsage(uint64_t usage)
168    {
169        (void)usage;
170    }
171    virtual void SetWindowConfigTimeout(int32_t timeout)
172    {
173        (void)timeout;
174    }
175    virtual void SetWindowConfigColorGamut(GraphicColorGamut colorGamut)
176    {
177        (void)colorGamut;
178    }
179    virtual void SetWindowConfigTransform(GraphicTransformType transform)
180    {
181        (void)transform;
182    }
183    virtual BufferRequestConfig GetWindowConfig()
184    {
185        BufferRequestConfig config;
186        return config;
187    }
188    virtual GSError SetScalingMode(ScalingMode scalingMode) = 0;
189    virtual GSError SetSurfaceSourceType(OHSurfaceSource sourceType) = 0;
190    virtual OHSurfaceSource GetSurfaceSourceType() const = 0;
191    virtual GSError SetSurfaceAppFrameworkType(std::string appFrameworkType) = 0;
192    virtual std::string GetSurfaceAppFrameworkType() const = 0;
193    virtual GSError SetHdrWhitePointBrightness(float brightness) = 0;
194    virtual GSError SetSdrWhitePointBrightness(float brightness) = 0;
195    virtual GSError AcquireLastFlushedBuffer(sptr<SurfaceBuffer> &buffer, sptr<SyncFence> &fence,
196        float matrix[16], uint32_t matrixSize, bool isUseNewMatrix)
197    {
198        (void)buffer;
199        (void)fence;
200        (void)matrix;
201        (void)matrixSize;
202        (void)isUseNewMatrix;
203        return SURFACE_ERROR_NOT_SUPPORT;
204    };
205    virtual GSError ReleaseLastFlushedBuffer(sptr<SurfaceBuffer> buffer)
206    {
207        (void)buffer;
208        return SURFACE_ERROR_NOT_SUPPORT;
209    };
210    virtual GSError SetGlobalAlpha(int32_t alpha) = 0;
211    virtual bool IsInHebcList()
212    {
213        return false;
214    }
215protected:
216    Surface() = default;
217};
218} // namespace OHOS
219
220#endif // INTERFACES_INNERKITS_SURFACE_SURFACE_H
221