• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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");
31     static sptr<Surface> CreateSurfaceAsProducer(sptr<IBufferProducer>& producer);
32 
33     virtual ~Surface() = default;
34 
GetProducerInitInfo(ProducerInitInfo & info)35     virtual GSError GetProducerInitInfo(ProducerInitInfo &info)
36     {
37         (void)info;
38         return GSERROR_NOT_SUPPORT;
39     }
40     virtual bool IsConsumer() const = 0;
41     virtual sptr<IBufferProducer> GetProducer() const = 0;
42 
RequestBuffer(sptr<SurfaceBuffer> & buffer,int32_t & fence,BufferRequestConfig & config)43     virtual GSError RequestBuffer(sptr<SurfaceBuffer>& buffer,
44                                   int32_t &fence, BufferRequestConfig &config)
45     {
46         (void)buffer;
47         (void)fence;
48         (void)config;
49         return GSERROR_NOT_SUPPORT;
50     }
51 
RequestBuffers(std::vector<sptr<SurfaceBuffer>> & buffers,std::vector<sptr<SyncFence>> & fences,BufferRequestConfig & config)52     virtual GSError RequestBuffers(std::vector<sptr<SurfaceBuffer>> &buffers,
53         std::vector<sptr<SyncFence>> &fences, BufferRequestConfig &config)
54     {
55         (void)buffers;
56         (void)fences;
57         (void)config;
58         return GSERROR_NOT_SUPPORT;
59     }
60 
CancelBuffer(sptr<SurfaceBuffer> & buffer)61     virtual GSError CancelBuffer(sptr<SurfaceBuffer>& buffer)
62     {
63         (void)buffer;
64         return GSERROR_NOT_SUPPORT;
65     }
66 
FlushBuffer(sptr<SurfaceBuffer> & buffer,int32_t fence,BufferFlushConfig & config)67     virtual GSError FlushBuffer(sptr<SurfaceBuffer>& buffer,
68                                 int32_t fence, BufferFlushConfig &config)
69     {
70         (void)buffer;
71         (void)fence;
72         (void)config;
73         return GSERROR_NOT_SUPPORT;
74     }
75 
AcquireBuffer(sptr<SurfaceBuffer> & buffer,int32_t & fence,int64_t & timestamp,Rect & damage)76     virtual GSError AcquireBuffer(sptr<SurfaceBuffer>& buffer, int32_t &fence,
77                                   int64_t &timestamp, Rect &damage)
78     {
79         (void)buffer;
80         (void)fence;
81         (void)timestamp;
82         (void)damage;
83         return GSERROR_NOT_SUPPORT;
84     }
ReleaseBuffer(sptr<SurfaceBuffer> & buffer,int32_t fence)85     virtual GSError ReleaseBuffer(sptr<SurfaceBuffer>& buffer, int32_t fence)
86     {
87         (void)buffer;
88         (void)fence;
89         return GSERROR_NOT_SUPPORT;
90     }
91 
RequestBuffer(sptr<SurfaceBuffer> & buffer,sptr<SyncFence> & fence,BufferRequestConfig & config)92     virtual GSError RequestBuffer(sptr<SurfaceBuffer>& buffer,
93                                   sptr<SyncFence>& fence, BufferRequestConfig &config)
94     {
95         (void)buffer;
96         (void)fence;
97         (void)config;
98         return GSERROR_NOT_SUPPORT;
99     }
FlushBuffer(sptr<SurfaceBuffer> & buffer,const sptr<SyncFence> & fence,BufferFlushConfig & config)100     virtual GSError FlushBuffer(sptr<SurfaceBuffer>& buffer,
101                                 const sptr<SyncFence>& fence, BufferFlushConfig &config)
102     {
103         (void)buffer;
104         (void)fence;
105         (void)config;
106         return GSERROR_NOT_SUPPORT;
107     }
AcquireBuffer(sptr<SurfaceBuffer> & buffer,sptr<SyncFence> & fence,int64_t & timestamp,Rect & damage)108     virtual GSError AcquireBuffer(sptr<SurfaceBuffer>& buffer, sptr<SyncFence>& fence,
109                                   int64_t &timestamp, Rect &damage)
110     {
111         (void)buffer;
112         (void)fence;
113         (void)timestamp;
114         (void)damage;
115         return GSERROR_NOT_SUPPORT;
116     }
ReleaseBuffer(sptr<SurfaceBuffer> & buffer,const sptr<SyncFence> & fence)117     virtual GSError ReleaseBuffer(sptr<SurfaceBuffer>& buffer, const sptr<SyncFence>& fence)
118     {
119         (void)buffer;
120         (void)fence;
121         return GSERROR_NOT_SUPPORT;
122     }
123 
124     virtual GSError AttachBuffer(sptr<SurfaceBuffer>& buffer) = 0;
125 
126     virtual GSError DetachBuffer(sptr<SurfaceBuffer>& buffer) = 0;
127 
128     virtual uint32_t GetQueueSize() = 0;
129     virtual GSError SetQueueSize(uint32_t queueSize) = 0;
130 
SetDefaultWidthAndHeight(int32_t width,int32_t height)131     virtual GSError SetDefaultWidthAndHeight(int32_t width, int32_t height)
132     {
133         (void)width;
134         (void)height;
135         return GSERROR_NOT_SUPPORT;
136     }
137     virtual int32_t GetDefaultWidth() = 0;
138     virtual int32_t GetDefaultHeight() = 0;
139 
140     virtual GSError SetDefaultUsage(uint64_t usage) = 0;
141     virtual uint64_t GetDefaultUsage() = 0;
142 
143     virtual GSError SetUserData(const std::string &key, const std::string &val) = 0;
144     virtual std::string GetUserData(const std::string &key) = 0;
145 
146     virtual const std::string& GetName() = 0;
147     virtual uint64_t GetUniqueId() const = 0;
148 
RegisterConsumerListener(sptr<IBufferConsumerListener> & listener)149     virtual GSError RegisterConsumerListener(sptr<IBufferConsumerListener>& listener)
150     {
151         (void)listener;
152         return GSERROR_NOT_SUPPORT;
153     }
RegisterConsumerListener(IBufferConsumerListenerClazz * listener)154     virtual GSError RegisterConsumerListener(IBufferConsumerListenerClazz *listener)
155     {
156         (void)listener;
157         return GSERROR_NOT_SUPPORT;
158     }
RegisterReleaseListener(OnReleaseFunc func)159     virtual GSError RegisterReleaseListener(OnReleaseFunc func)
160     {
161         (void)func;
162         return GSERROR_NOT_SUPPORT;
163     }
164     virtual GSError RegisterDeleteBufferListener(OnDeleteBufferFunc func, bool isForUniRedraw = false)
165     {
166         (void)func;
167         (void)isForUniRedraw;
168         return GSERROR_NOT_SUPPORT;
169     }
UnregisterConsumerListener()170     virtual GSError UnregisterConsumerListener()
171     {
172         return GSERROR_NOT_SUPPORT;
173     }
174 
175     // Call carefully. This interface will empty all caches of the current process
176     virtual GSError CleanCache(bool cleanAll = false)
177     {
178         (void)cleanAll;
179         return GSERROR_NOT_SUPPORT;
180     }
181     virtual GSError GoBackground() = 0;
182 
183     virtual GSError SetTransform(GraphicTransformType transform) = 0;
184     virtual GraphicTransformType GetTransform() const = 0;
185 
Connect()186     virtual GSError Connect()
187     {
188         return GSERROR_NOT_SUPPORT;
189     }
Disconnect()190     virtual GSError Disconnect()
191     {
192         return GSERROR_NOT_SUPPORT;
193     }
194     virtual GSError SetScalingMode(uint32_t sequence, ScalingMode scalingMode) = 0;
GetScalingMode(uint32_t sequence,ScalingMode & scalingMode)195     virtual GSError GetScalingMode(uint32_t sequence, ScalingMode &scalingMode)
196     {
197         (void)sequence;
198         (void)scalingMode;
199         return GSERROR_NOT_SUPPORT;
200     }
201     virtual GSError SetMetaData(uint32_t sequence, const std::vector<GraphicHDRMetaData> &metaData) = 0;
202     virtual GSError SetMetaDataSet(uint32_t sequence, GraphicHDRMetadataKey key,
203                                    const std::vector<uint8_t> &metaData) = 0;
QueryMetaDataType(uint32_t sequence,HDRMetaDataType & type)204     virtual GSError QueryMetaDataType(uint32_t sequence, HDRMetaDataType &type) const
205     {
206         (void)sequence;
207         (void)type;
208         return GSERROR_NOT_SUPPORT;
209     }
GetMetaData(uint32_t sequence,std::vector<GraphicHDRMetaData> & metaData)210     virtual GSError GetMetaData(uint32_t sequence, std::vector<GraphicHDRMetaData> &metaData) const
211     {
212         (void)sequence;
213         (void)metaData;
214         return GSERROR_NOT_SUPPORT;
215     }
GetMetaDataSet(uint32_t sequence,GraphicHDRMetadataKey & key,std::vector<uint8_t> & metaData)216     virtual GSError GetMetaDataSet(uint32_t sequence, GraphicHDRMetadataKey &key,
217                                    std::vector<uint8_t> &metaData) const
218     {
219         (void)sequence;
220         (void)key;
221         (void)metaData;
222         return GSERROR_NOT_SUPPORT;
223     }
224     virtual GSError SetTunnelHandle(const GraphicExtDataHandle *handle) = 0;
GetTunnelHandle()225     virtual sptr<SurfaceTunnelHandle> GetTunnelHandle() const
226     {
227         return nullptr;
228     }
SetPresentTimestamp(uint32_t sequence,const GraphicPresentTimestamp & timestamp)229     virtual GSError SetPresentTimestamp(uint32_t sequence, const GraphicPresentTimestamp &timestamp)
230     {
231         (void)sequence;
232         (void)timestamp;
233         return GSERROR_NOT_SUPPORT;
234     }
GetPresentTimestamp(uint32_t sequence,GraphicPresentTimestampType type,int64_t & time)235     virtual GSError GetPresentTimestamp(uint32_t sequence, GraphicPresentTimestampType type,
236                                         int64_t &time) const
237     {
238         (void)sequence;
239         (void)type;
240         (void)time;
241         return GSERROR_NOT_SUPPORT;
242     }
243 
244     virtual void Dump(std::string &result) const = 0;
245 
GetDefaultFormat()246     virtual int32_t GetDefaultFormat()
247     {
248         return 0;
249     }
SetDefaultFormat(int32_t format)250     virtual GSError SetDefaultFormat(int32_t format)
251     {
252         (void)format;
253         return GSERROR_NOT_SUPPORT;
254     }
GetDefaultColorGamut()255     virtual int32_t GetDefaultColorGamut()
256     {
257         return 0;
258     }
SetDefaultColorGamut(int32_t colorGamut)259     virtual GSError SetDefaultColorGamut(int32_t colorGamut)
260     {
261         (void)colorGamut;
262         return GSERROR_NOT_SUPPORT;
263     }
264 
GetNativeSurface()265     virtual sptr<NativeSurface> GetNativeSurface()
266     {
267         return nullptr;
268     }
269 
QueryIfBufferAvailable()270     virtual bool QueryIfBufferAvailable()
271     {
272         return false;
273     }
FlushBuffer(sptr<SurfaceBuffer> & buffer,const sptr<SyncFence> & fence,BufferFlushConfigWithDamages & config)274     virtual GSError FlushBuffer(sptr<SurfaceBuffer>& buffer, const sptr<SyncFence>& fence,
275                                 BufferFlushConfigWithDamages &config)
276     {
277         (void)buffer;
278         (void)fence;
279         (void)config;
280         return GSERROR_NOT_SUPPORT;
281     }
FlushBuffers(const std::vector<sptr<SurfaceBuffer>> & buffers,const std::vector<sptr<SyncFence>> & fences,const std::vector<BufferFlushConfigWithDamages> & configs)282     virtual GSError FlushBuffers(const std::vector<sptr<SurfaceBuffer>> &buffers,
283         const std::vector<sptr<SyncFence>> &fences, const std::vector<BufferFlushConfigWithDamages> &configs)
284     {
285         (void)buffers;
286         (void)fences;
287         (void)configs;
288         return GSERROR_NOT_SUPPORT;
289     }
UnRegisterReleaseListener()290     virtual GSError UnRegisterReleaseListener()
291     {
292         return GSERROR_NOT_SUPPORT;
293     }
UnRegisterReleaseListenerBackup()294     virtual GSError UnRegisterReleaseListenerBackup()
295     {
296         return GSERROR_NOT_SUPPORT;
297     }
SetWptrNativeWindowToPSurface(void * nativeWindow)298     virtual GSError SetWptrNativeWindowToPSurface(void* nativeWindow)
299     {
300         (void)nativeWindow;
301         return GSERROR_NOT_SUPPORT;
302     }
303     virtual GSError GetLastFlushedBuffer(sptr<SurfaceBuffer>& buffer,
304         sptr<SyncFence>& fence, float matrix[16], bool isUseNewMatrix = false)
305     {
306         (void)buffer;
307         (void)fence;
308         (void)matrix;
309         (void)isUseNewMatrix;
310         return GSERROR_NOT_SUPPORT;
311     }
312     virtual GSError AttachBuffer(sptr<SurfaceBuffer>& buffer, int32_t timeOut) = 0;
313     virtual GSError RegisterSurfaceDelegator(sptr<IRemoteObject> client) = 0;
314     virtual GSError RegisterReleaseListener(OnReleaseFuncWithFence func) = 0;
RegisterReleaseListenerBackup(OnReleaseFuncWithFence func)315     virtual GSError RegisterReleaseListenerBackup(OnReleaseFuncWithFence func)
316     {
317         (void)func;
318         return GSERROR_NOT_SUPPORT;
319     }
320     virtual GSError RegisterUserDataChangeListener(const std::string &funcName, OnUserDataChangeFunc func) = 0;
321     virtual GSError UnRegisterUserDataChangeListener(const std::string &funcName) = 0;
322     virtual GSError ClearUserDataChangeListener() = 0;
323 
324     virtual GSError AttachBufferToQueue(sptr<SurfaceBuffer> buffer) = 0;
325     virtual GSError DetachBufferFromQueue(sptr<SurfaceBuffer> buffer, bool isReserveSlot = false) = 0;
326 
327     virtual GraphicTransformType GetTransformHint() const = 0;
328     virtual GSError SetTransformHint(GraphicTransformType transformHint) = 0;
SetBufferName(const std::string & name)329     virtual GSError SetBufferName(const std::string &name)
330     {
331         (void)name;
332         return GSERROR_NOT_SUPPORT;
333     }
334 
SetRequestWidthAndHeight(int32_t width,int32_t height)335     virtual void SetRequestWidthAndHeight(int32_t width, int32_t height)
336     {
337         (void)width;
338         (void)height;
339     }
GetRequestWidth()340     virtual int32_t GetRequestWidth()
341     {
342         return 0;
343     }
GetRequestHeight()344     virtual int32_t GetRequestHeight()
345     {
346         return 0;
347     }
348 
349     virtual void SetBufferHold(bool hold) = 0;
SetWindowConfig(const BufferRequestConfig & config)350     virtual void SetWindowConfig(const BufferRequestConfig& config)
351     {
352         (void)config;
353     }
SetWindowConfigWidthAndHeight(int32_t width,int32_t height)354     virtual void SetWindowConfigWidthAndHeight(int32_t width, int32_t height)
355     {
356         (void)width;
357         (void)height;
358     }
SetWindowConfigStride(int32_t stride)359     virtual void SetWindowConfigStride(int32_t stride)
360     {
361         (void)stride;
362     }
SetWindowConfigFormat(int32_t format)363     virtual void SetWindowConfigFormat(int32_t format)
364     {
365         (void)format;
366     }
SetWindowConfigUsage(uint64_t usage)367     virtual void SetWindowConfigUsage(uint64_t usage)
368     {
369         (void)usage;
370     }
SetWindowConfigTimeout(int32_t timeout)371     virtual void SetWindowConfigTimeout(int32_t timeout)
372     {
373         (void)timeout;
374     }
SetWindowConfigColorGamut(GraphicColorGamut colorGamut)375     virtual void SetWindowConfigColorGamut(GraphicColorGamut colorGamut)
376     {
377         (void)colorGamut;
378     }
SetWindowConfigTransform(GraphicTransformType transform)379     virtual void SetWindowConfigTransform(GraphicTransformType transform)
380     {
381         (void)transform;
382     }
GetWindowConfig()383     virtual BufferRequestConfig GetWindowConfig()
384     {
385         BufferRequestConfig config;
386         return config;
387     }
388     virtual GSError SetScalingMode(ScalingMode scalingMode) = 0;
389     virtual GSError SetSurfaceSourceType(OHSurfaceSource sourceType) = 0;
390     virtual OHSurfaceSource GetSurfaceSourceType() const = 0;
391     virtual GSError SetSurfaceAppFrameworkType(std::string appFrameworkType) = 0;
392     virtual std::string GetSurfaceAppFrameworkType() const = 0;
SetHdrWhitePointBrightness(float brightness)393     virtual GSError SetHdrWhitePointBrightness(float brightness)
394     {
395         (void)brightness;
396         return GSERROR_NOT_SUPPORT;
397     }
SetSdrWhitePointBrightness(float brightness)398     virtual GSError SetSdrWhitePointBrightness(float brightness)
399     {
400         (void)brightness;
401         return GSERROR_NOT_SUPPORT;
402     }
AcquireLastFlushedBuffer(sptr<SurfaceBuffer> & buffer,sptr<SyncFence> & fence,float matrix[16],uint32_t matrixSize,bool isUseNewMatrix)403     virtual GSError AcquireLastFlushedBuffer(sptr<SurfaceBuffer> &buffer, sptr<SyncFence> &fence,
404         float matrix[16], uint32_t matrixSize, bool isUseNewMatrix)
405     {
406         (void)buffer;
407         (void)fence;
408         (void)matrix;
409         (void)matrixSize;
410         (void)isUseNewMatrix;
411         return GSERROR_NOT_SUPPORT;
412     }
ReleaseLastFlushedBuffer(sptr<SurfaceBuffer> buffer)413     virtual GSError ReleaseLastFlushedBuffer(sptr<SurfaceBuffer> buffer)
414     {
415         (void)buffer;
416         return GSERROR_NOT_SUPPORT;
417     }
SetGlobalAlpha(int32_t alpha)418     virtual GSError SetGlobalAlpha(int32_t alpha)
419     {
420         (void)alpha;
421         return GSERROR_NOT_SUPPORT;
422     }
IsInHebcList()423     virtual bool IsInHebcList()
424     {
425         return false;
426     }
427     /**
428      * @brief Merge RequestBuffer and DetachBufferFromQueue function to reduce once ipc.
429      */
RequestAndDetachBuffer(sptr<SurfaceBuffer> & buffer,sptr<SyncFence> & fence,BufferRequestConfig & config)430     virtual GSError RequestAndDetachBuffer(sptr<SurfaceBuffer>& buffer, sptr<SyncFence>& fence,
431                                            BufferRequestConfig& config)
432     {
433         (void)buffer;
434         (void)fence;
435         (void)config;
436         return GSERROR_NOT_SUPPORT;
437     }
438 
439     /**
440      * @brief Merge AttachBufferToQueue And FlushBuffer function to reduce once ipc.
441      */
AttachAndFlushBuffer(sptr<SurfaceBuffer> & buffer,const sptr<SyncFence> & fence,BufferFlushConfig & config,bool needMap)442     virtual GSError AttachAndFlushBuffer(sptr<SurfaceBuffer>& buffer, const sptr<SyncFence>& fence,
443                                          BufferFlushConfig& config, bool needMap)
444     {
445         (void)buffer;
446         (void)fence;
447         (void)config;
448         (void)needMap;
449         return GSERROR_NOT_SUPPORT;
450     }
451     /**
452      * @brief Avoidance plan, which can be deleted later.
453      */
GetBufferCacheConfig(const sptr<SurfaceBuffer> & buffer,BufferRequestConfig & config)454     virtual GSError GetBufferCacheConfig(const sptr<SurfaceBuffer>& buffer, BufferRequestConfig& config)
455     {
456         (void)buffer;
457         (void)config;
458         return GSERROR_NOT_SUPPORT;
459     }
GetCycleBuffersNumber(uint32_t & cycleBuffersNumber)460     virtual GSError GetCycleBuffersNumber(uint32_t& cycleBuffersNumber)
461     {
462         (void)cycleBuffersNumber;
463         return SURFACE_ERROR_NOT_SUPPORT;
464     }
465     /**
466      * @brief Set the Rotating Buffers Number object for hdi create layer max cache count.
467      * @param cycleBuffersNumber scope : (0, 2 * maxQueueSize], and it should be actual number of cycle buffers.
468      */
SetCycleBuffersNumber(uint32_t cycleBuffersNumber)469     virtual GSError SetCycleBuffersNumber(uint32_t cycleBuffersNumber)
470     {
471         (void)cycleBuffersNumber;
472         return SURFACE_ERROR_NOT_SUPPORT;
473     }
474 
475     /**
476     * @brief In the strictly disconnected state, the producer must call the ConnectStrictly() interface before request
477     *        buffer. Unlike Connect(), ConnectStrictly() does not distinguish between process IDs (PIDs) and is
478     *        suitable for stricter connection management scenarios.
479     */
ConnectStrictly()480     virtual GSError ConnectStrictly()
481     {
482         return SURFACE_ERROR_NOT_SUPPORT;
483     }
484 
485     /**
486     * @brief After calling DisconnectStrictly(), the consumer (server) enter the strictly disconnected state.
487     *        In this state, any attempt by the producer (client) to request buffer will fail and return the error code
488     *        GSERROR_CONSUMER_DISCONNECTED.
489     */
DisconnectStrictly()490     virtual GSError DisconnectStrictly()
491     {
492         return SURFACE_ERROR_NOT_SUPPORT;
493     }
494 protected:
495     Surface() = default;
496 };
497 } // namespace OHOS
498 
499 #endif // INTERFACES_INNERKITS_SURFACE_SURFACE_H
500