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;
150     virtual BufferRequestConfig* GetWindowConfig() = 0;
151     virtual GSError SetScalingMode(ScalingMode scalingMode) = 0;
152     virtual GSError SetSurfaceSourceType(OHSurfaceSource sourceType) = 0;
153     virtual OHSurfaceSource GetSurfaceSourceType() const = 0;
154     virtual GSError SetSurfaceAppFrameworkType(std::string appFrameworkType) = 0;
155     virtual std::string GetSurfaceAppFrameworkType() const = 0;
156     virtual GSError SetHdrWhitePointBrightness(float brightness) = 0;
157     virtual GSError SetSdrWhitePointBrightness(float brightness) = 0;
AcquireLastFlushedBuffer(sptr<SurfaceBuffer> & buffer,sptr<SyncFence> & fence,float matrix[16],uint32_t matrixSize,bool isUseNewMatrix)158     virtual GSError AcquireLastFlushedBuffer(sptr<SurfaceBuffer> &buffer, sptr<SyncFence> &fence,
159         float matrix[16], uint32_t matrixSize, bool isUseNewMatrix)
160     {
161         (void)buffer;
162         (void)fence;
163         (void)matrix;
164         (void)matrixSize;
165         (void)isUseNewMatrix;
166         return SURFACE_ERROR_NOT_SUPPORT;
167     };
ReleaseLastFlushedBuffer(sptr<SurfaceBuffer> buffer)168     virtual GSError ReleaseLastFlushedBuffer(sptr<SurfaceBuffer> buffer)
169     {
170         (void)buffer;
171         return SURFACE_ERROR_NOT_SUPPORT;
172     };
173     /**
174      * @brief Merge RequestBuffer and DetachBufferFromQueue function to reduce once ipc.
175      */
RequestAndDetachBuffer(sptr<SurfaceBuffer> & buffer,sptr<SyncFence> & fence,BufferRequestConfig & config)176     virtual GSError RequestAndDetachBuffer(sptr<SurfaceBuffer>& buffer, sptr<SyncFence>& fence,
177                                            BufferRequestConfig& config)
178     {
179         (void)buffer;
180         (void)fence;
181         (void)config;
182         return GSERROR_NOT_SUPPORT;
183     }
184 
185     /**
186      * @brief Merge AttachBufferToQueue And FlushBuffer function to reduce once ipc.
187      */
AttachAndFlushBuffer(sptr<SurfaceBuffer> & buffer,const sptr<SyncFence> & fence,BufferFlushConfig & config,bool needMap)188     virtual GSError AttachAndFlushBuffer(sptr<SurfaceBuffer>& buffer, const sptr<SyncFence>& fence,
189                                          BufferFlushConfig& config, bool needMap)
190     {
191         (void)buffer;
192         (void)fence;
193         (void)config;
194         (void)needMap;
195         return GSERROR_NOT_SUPPORT;
196     }
197 
198 protected:
199     Surface() = default;
200 };
201 } // namespace OHOS
202 
203 #endif // INTERFACES_INNERKITS_SURFACE_SURFACE_H
204