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 
27 namespace OHOS {
28 class Surface : public RefBase {
29 public:
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;
SetWindowConfig(const BufferRequestConfig& config)150     virtual void SetWindowConfig(const BufferRequestConfig& config)
151     {
152         (void)config;
153     }
SetWindowConfigWidthAndHeight(int32_t width, int32_t height)154     virtual void SetWindowConfigWidthAndHeight(int32_t width, int32_t height)
155     {
156         (void)width;
157         (void)height;
158     }
SetWindowConfigStride(int32_t stride)159     virtual void SetWindowConfigStride(int32_t stride)
160     {
161         (void)stride;
162     }
SetWindowConfigFormat(int32_t format)163     virtual void SetWindowConfigFormat(int32_t format)
164     {
165         (void)format;
166     }
SetWindowConfigUsage(uint64_t usage)167     virtual void SetWindowConfigUsage(uint64_t usage)
168     {
169         (void)usage;
170     }
SetWindowConfigTimeout(int32_t timeout)171     virtual void SetWindowConfigTimeout(int32_t timeout)
172     {
173         (void)timeout;
174     }
SetWindowConfigColorGamut(GraphicColorGamut colorGamut)175     virtual void SetWindowConfigColorGamut(GraphicColorGamut colorGamut)
176     {
177         (void)colorGamut;
178     }
SetWindowConfigTransform(GraphicTransformType transform)179     virtual void SetWindowConfigTransform(GraphicTransformType transform)
180     {
181         (void)transform;
182     }
GetWindowConfig()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;
AcquireLastFlushedBuffer(sptr<SurfaceBuffer> &buffer, sptr<SyncFence> &fence, float matrix[16], uint32_t matrixSize, bool isUseNewMatrix)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     };
ReleaseLastFlushedBuffer(sptr<SurfaceBuffer> buffer)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;
IsInHebcList()211     virtual bool IsInHebcList()
212     {
213         return false;
214     }
215 protected:
216     Surface() = default;
217 };
218 } // namespace OHOS
219 
220 #endif // INTERFACES_INNERKITS_SURFACE_SURFACE_H
221