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_ICONSUMER_SURFACE_H
17#define INTERFACES_INNERKITS_SURFACE_ICONSUMER_SURFACE_H
18
19#include <refbase.h>
20
21#include "ibuffer_consumer_listener.h"
22#include "ibuffer_producer.h"
23#include "surface.h"
24#include "surface_buffer.h"
25#include "surface_type.h"
26#include "surface_tunnel_handle.h"
27
28namespace OHOS {
29class IConsumerSurface : public Surface {
30public:
31    using AcquireBufferReturnValue = struct {
32        sptr<SurfaceBuffer> buffer;
33        sptr<SyncFence> fence;
34        int64_t timestamp;
35        std::vector<Rect> damages;
36    };
37    static sptr<IConsumerSurface> Create(std::string name = "noname", bool isShared = false);
38
39    virtual ~IConsumerSurface() = default;
40
41    virtual bool IsConsumer() const = 0;
42    virtual sptr<IBufferProducer> GetProducer() const = 0;
43
44    virtual GSError RequestBuffer(sptr<SurfaceBuffer>& buffer,
45                                  int32_t &fence, BufferRequestConfig &config) = 0;
46
47    virtual GSError CancelBuffer(sptr<SurfaceBuffer>& buffer) = 0;
48
49    virtual GSError FlushBuffer(sptr<SurfaceBuffer>& buffer,
50                                int32_t fence, BufferFlushConfig &config) = 0;
51
52    virtual GSError AcquireBuffer(sptr<SurfaceBuffer>& buffer, int32_t &fence,
53                                  int64_t &timestamp, Rect &damage) = 0;
54    virtual GSError ReleaseBuffer(sptr<SurfaceBuffer>& buffer, int32_t fence) = 0;
55
56    virtual GSError RequestBuffer(sptr<SurfaceBuffer>& buffer,
57                                  sptr<SyncFence>& fence, BufferRequestConfig &config) = 0;
58    virtual GSError FlushBuffer(sptr<SurfaceBuffer>& buffer,
59                                const sptr<SyncFence>& fence, BufferFlushConfig &config) = 0;
60    virtual GSError AcquireBuffer(sptr<SurfaceBuffer>& buffer, sptr<SyncFence>& fence,
61                                  int64_t &timestamp, Rect &damage) = 0;
62    virtual GSError ReleaseBuffer(sptr<SurfaceBuffer>& buffer, const sptr<SyncFence>& fence) = 0;
63
64    virtual GSError AttachBuffer(sptr<SurfaceBuffer>& buffer) = 0;
65
66    virtual GSError DetachBuffer(sptr<SurfaceBuffer>& buffer) = 0;
67
68    virtual uint32_t GetQueueSize() = 0;
69    virtual GSError SetQueueSize(uint32_t queueSize) = 0;
70
71    virtual GSError SetDefaultWidthAndHeight(int32_t width, int32_t height) = 0;
72    virtual int32_t GetDefaultWidth() = 0;
73    virtual int32_t GetDefaultHeight() = 0;
74
75    virtual GSError SetDefaultUsage(uint64_t usage) = 0;
76    virtual uint64_t GetDefaultUsage() = 0;
77
78    virtual GSError SetUserData(const std::string &key, const std::string &val) = 0;
79    virtual std::string GetUserData(const std::string &key) = 0;
80
81    virtual const std::string& GetName() = 0;
82    virtual uint64_t GetUniqueId() const = 0;
83
84    virtual GSError RegisterConsumerListener(sptr<IBufferConsumerListener>& listener) = 0;
85    virtual GSError RegisterConsumerListener(IBufferConsumerListenerClazz *listener) = 0;
86    virtual GSError RegisterReleaseListener(OnReleaseFunc func) = 0;
87    virtual GSError RegisterDeleteBufferListener(OnDeleteBufferFunc func, bool isForUniRedraw = false) = 0;
88    virtual GSError UnregisterConsumerListener() = 0;
89
90    // Call carefully. This interface will empty all caches of the current process
91    virtual GSError CleanCache(bool cleanAll = false) = 0;
92    virtual GSError GoBackground() = 0;
93
94    virtual GSError SetTransform(GraphicTransformType transform) = 0;
95    virtual GraphicTransformType GetTransform() const = 0;
96
97    virtual GSError IsSupportedAlloc(const std::vector<BufferVerifyAllocInfo> &infos,
98                                     std::vector<bool> &supporteds) = 0;
99    virtual GSError Connect() = 0;
100    virtual GSError Disconnect() = 0;
101    virtual GSError SetScalingMode(uint32_t sequence, ScalingMode scalingMode) = 0;
102    virtual GSError GetScalingMode(uint32_t sequence, ScalingMode &scalingMode) = 0;
103    virtual GSError SetMetaData(uint32_t sequence, const std::vector<GraphicHDRMetaData> &metaData) = 0;
104    virtual GSError SetMetaDataSet(uint32_t sequence, GraphicHDRMetadataKey key,
105                                   const std::vector<uint8_t> &metaData) = 0;
106    virtual GSError QueryMetaDataType(uint32_t sequence, HDRMetaDataType &type) const = 0;
107    virtual GSError GetMetaData(uint32_t sequence, std::vector<GraphicHDRMetaData> &metaData) const = 0;
108    virtual GSError GetMetaDataSet(uint32_t sequence, GraphicHDRMetadataKey &key,
109                                   std::vector<uint8_t> &metaData) const = 0;
110    virtual GSError SetTunnelHandle(const GraphicExtDataHandle *handle) = 0;
111    virtual sptr<SurfaceTunnelHandle> GetTunnelHandle() const = 0;
112    virtual GSError SetPresentTimestamp(uint32_t sequence, const GraphicPresentTimestamp &timestamp) = 0;
113    virtual GSError GetPresentTimestamp(uint32_t sequence, GraphicPresentTimestampType type,
114                                        int64_t &time) const = 0;
115    virtual void Dump(std::string &result) const = 0;
116
117    virtual int32_t GetDefaultFormat() = 0;
118    virtual GSError SetDefaultFormat(int32_t format) = 0;
119    virtual int32_t GetDefaultColorGamut() = 0;
120    virtual GSError SetDefaultColorGamut(int32_t colorGamut) = 0;
121
122    virtual sptr<NativeSurface> GetNativeSurface() = 0;
123
124    virtual bool QueryIfBufferAvailable() = 0;
125
126    virtual GSError AcquireBuffer(sptr<SurfaceBuffer>& buffer, sptr<SyncFence>& fence,
127                                  int64_t &timestamp, std::vector<Rect> &damages) = 0;
128    virtual GSError AcquireBuffer(AcquireBufferReturnValue &returnValue, int64_t expectPresentTimestamp,
129                                  bool isUsingAutoTimestamp)
130    {
131        (void)returnValue;
132        (void)expectPresentTimestamp;
133        (void)isUsingAutoTimestamp;
134        return SURFACE_ERROR_NOT_SUPPORT;
135    };
136    virtual GSError FlushBuffer(sptr<SurfaceBuffer>& buffer, const sptr<SyncFence>& fence,
137                                BufferFlushConfigWithDamages &config) = 0;
138    virtual GSError SetWptrNativeWindowToPSurface(void* nativeWindow) = 0;
139    virtual GSError GetLastFlushedBuffer(sptr<SurfaceBuffer>& buffer,
140        sptr<SyncFence>& fence, float matrix[16], bool isUseNewMatrix) = 0;
141    virtual GSError AttachBuffer(sptr<SurfaceBuffer>& buffer, int32_t timeOut) = 0;
142    virtual GSError RegisterSurfaceDelegator(sptr<IRemoteObject> client) = 0;
143    virtual GSError RegisterReleaseListener(OnReleaseFuncWithFence func) = 0;
144    virtual void ConsumerRequestCpuAccess(bool on) = 0;
145    virtual GSError AttachBufferToQueue(sptr<SurfaceBuffer> buffer) = 0;
146    virtual GSError DetachBufferFromQueue(sptr<SurfaceBuffer> buffer) = 0;
147    virtual bool IsBufferHold() = 0;
148    virtual GSError SetScalingMode(ScalingMode scalingMode) = 0;
149    virtual float GetHdrWhitePointBrightness() const = 0;
150    virtual float GetSdrWhitePointBrightness() const = 0;
151
152    virtual GSError GetSurfaceBufferTransformType(sptr<SurfaceBuffer> buffer, GraphicTransformType *transformType) = 0;
153
154    virtual GSError IsSurfaceBufferInCache(uint32_t seqNum, bool &isInCache) = 0;
155    virtual GSError AcquireLastFlushedBuffer(sptr<SurfaceBuffer> &buffer, sptr<SyncFence> &fence,
156        float matrix[16], uint32_t matrixSize, bool isUseNewMatrix)
157    {
158        (void)buffer;
159        (void)fence;
160        (void)matrix;
161        (void)matrixSize;
162        (void)isUseNewMatrix;
163        return SURFACE_ERROR_NOT_SUPPORT;
164    };
165    virtual GSError ReleaseLastFlushedBuffer(sptr<SurfaceBuffer> buffer)
166    {
167        (void)buffer;
168        return SURFACE_ERROR_NOT_SUPPORT;
169    };
170    virtual GSError GetGlobalAlpha(int32_t &alpha) = 0;
171    virtual uint32_t GetAvailableBufferCount() const
172    {
173        return SURFACE_ERROR_NOT_SUPPORT;
174    };
175protected:
176    IConsumerSurface() = default;
177};
178} // namespace OHOS
179
180#endif // INTERFACES_INNERKITS_SURFACE_SURFACE_H
181