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_IBUFFER_PRODUCER_H
17#define INTERFACES_INNERKITS_SURFACE_IBUFFER_PRODUCER_H
18
19#include <string>
20#include <vector>
21
22#include "iremote_broker.h"
23
24#include "buffer_extra_data.h"
25#include "ibuffer_producer_listener.h"
26#include "native_surface.h"
27#include "surface_buffer.h"
28#include "surface_type.h"
29#include "external_window.h"
30
31namespace OHOS {
32class SyncFence;
33class IBufferProducerToken : public IRemoteBroker {
34public:
35    DECLARE_INTERFACE_DESCRIPTOR(u"surf.IBufferProducerToken");
36
37    IBufferProducerToken() = default;
38    virtual ~IBufferProducerToken() noexcept = default;
39};
40class IBufferProducer : public IRemoteBroker {
41public:
42    struct RequestBufferReturnValue {
43        uint32_t sequence;
44        sptr<SurfaceBuffer> buffer;
45        sptr<SyncFence> fence;
46        std::vector<uint32_t> deletingBuffers;
47        bool isConnected;
48    };
49    virtual GSError GetProducerInitInfo(ProducerInitInfo &info) = 0;
50
51    virtual GSError RequestBuffer(const BufferRequestConfig &config, sptr<BufferExtraData> &bedata,
52                                  RequestBufferReturnValue &retval) = 0;
53
54    virtual GSError RequestBuffers(const BufferRequestConfig &config, std::vector<sptr<BufferExtraData>> &bedata,
55        std::vector<RequestBufferReturnValue> &retvalues) = 0;
56
57    virtual GSError CancelBuffer(uint32_t sequence, sptr<BufferExtraData> bedata) = 0;
58
59    virtual GSError FlushBuffer(uint32_t sequence, sptr<BufferExtraData> bedata,
60                                sptr<SyncFence> fence, BufferFlushConfigWithDamages &config) = 0;
61
62    virtual GSError FlushBuffers(const std::vector<uint32_t> &sequences,
63        const std::vector<sptr<BufferExtraData>> &bedata,
64        const std::vector<sptr<SyncFence>> &fences,
65        const std::vector<BufferFlushConfigWithDamages> &configs) = 0;
66
67    virtual GSError AttachBuffer(sptr<SurfaceBuffer>& buffer) = 0;
68    virtual GSError DetachBuffer(sptr<SurfaceBuffer>& buffer) = 0;
69
70    virtual uint32_t GetQueueSize() = 0;
71    virtual GSError SetQueueSize(uint32_t queueSize) = 0;
72
73    virtual GSError GetName(std::string &name) = 0;
74    virtual uint64_t GetUniqueId() = 0;
75    virtual GSError GetNameAndUniqueId(std::string& name, uint64_t& uniqueId) = 0;
76
77    virtual int32_t GetDefaultWidth() = 0;
78    virtual int32_t GetDefaultHeight() = 0;
79    virtual GSError SetDefaultUsage(uint64_t usage) = 0;
80    virtual uint64_t GetDefaultUsage() = 0;
81
82    virtual GSError CleanCache(bool cleanAll = false) = 0;
83    virtual GSError GoBackground() = 0;
84
85    virtual GSError RegisterReleaseListener(sptr<IProducerListener> listener) = 0;
86
87    virtual GSError SetTransform(GraphicTransformType transform) = 0;
88
89    virtual GSError IsSupportedAlloc(const std::vector<BufferVerifyAllocInfo> &infos,
90                                     std::vector<bool> &supporteds) = 0;
91
92    virtual GSError Connect() = 0;
93    virtual GSError Disconnect() = 0;
94
95    virtual GSError SetScalingMode(uint32_t sequence, ScalingMode scalingMode) = 0;
96    virtual GSError SetBufferHold(bool hold) = 0;
97    virtual GSError SetMetaData(uint32_t sequence, const std::vector<GraphicHDRMetaData> &metaData) = 0;
98    virtual GSError SetMetaDataSet(uint32_t sequence, GraphicHDRMetadataKey key,
99                                   const std::vector<uint8_t> &metaData) = 0;
100    virtual GSError SetTunnelHandle(const GraphicExtDataHandle *handle) = 0;
101    virtual GSError GetPresentTimestamp(uint32_t sequence, GraphicPresentTimestampType type, int64_t &time) = 0;
102
103    virtual sptr<NativeSurface> GetNativeSurface() = 0;
104    virtual GSError UnRegisterReleaseListener() = 0;
105    virtual GSError GetLastFlushedBuffer(sptr<SurfaceBuffer>& buffer,
106        sptr<SyncFence>& fence, float matrix[16], bool isUseNewMatrix) = 0;
107    virtual GSError AttachBuffer(sptr<SurfaceBuffer>& buffer, int32_t timeOut) = 0;
108
109    virtual GSError GetTransform(GraphicTransformType &transform) = 0;
110
111    virtual GSError AttachBufferToQueue(sptr<SurfaceBuffer> buffer) = 0;
112    virtual GSError DetachBufferFromQueue(sptr<SurfaceBuffer> buffer) = 0;
113    virtual GSError GetTransformHint(GraphicTransformType &transformHint) = 0;
114    virtual GSError SetTransformHint(GraphicTransformType transformHint) = 0;
115    virtual GSError SetScalingMode(ScalingMode scalingMode) = 0;
116
117    virtual GSError SetSurfaceSourceType(OHSurfaceSource sourceType) = 0;
118    virtual GSError GetSurfaceSourceType(OHSurfaceSource &sourceType) = 0;
119
120    virtual GSError SetSurfaceAppFrameworkType(std::string appFrameworkType) = 0;
121    virtual GSError GetSurfaceAppFrameworkType(std::string &appFrameworkType) = 0;
122
123    virtual GSError SetHdrWhitePointBrightness(float brightness) = 0;
124    virtual GSError SetSdrWhitePointBrightness(float brightness) = 0;
125    virtual GSError AcquireLastFlushedBuffer(sptr<SurfaceBuffer> &buffer, sptr<SyncFence> &fence,
126        float matrix[16], uint32_t matrixSize, bool isUseNewMatrix)
127    {
128        (void)buffer;
129        (void)fence;
130        (void)matrix;
131        (void)matrixSize;
132        (void)isUseNewMatrix;
133        return SURFACE_ERROR_NOT_SUPPORT;
134    };
135    virtual GSError ReleaseLastFlushedBuffer(uint32_t sequence)
136    {
137        (void)sequence;
138        return SURFACE_ERROR_NOT_SUPPORT;
139    };
140    virtual GSError SetGlobalAlpha(int32_t alpha) = 0;
141    DECLARE_INTERFACE_DESCRIPTOR(u"surf.IBufferProducer");
142
143protected:
144    enum {
145        BUFFER_PRODUCER_REQUEST_BUFFER = 0,
146        BUFFER_PRODUCER_CANCEL_BUFFER,
147        BUFFER_PRODUCER_FLUSH_BUFFER,
148        BUFFER_PRODUCER_GET_QUEUE_SIZE,
149        BUFFER_PRODUCER_SET_QUEUE_SIZE,
150        BUFFER_PRODUCER_GET_NAME,
151        BUFFER_PRODUCER_GET_DEFAULT_WIDTH,
152        BUFFER_PRODUCER_GET_DEFAULT_HEIGHT,
153        BUFFER_PRODUCER_GET_DEFAULT_USAGE,
154        BUFFER_PRODUCER_CLEAN_CACHE,
155        BUFFER_PRODUCER_ATTACH_BUFFER,
156        BUFFER_PRODUCER_DETACH_BUFFER,
157        BUFFER_PRODUCER_REGISTER_RELEASE_LISTENER,
158        BUFFER_PRODUCER_GET_UNIQUE_ID,
159        BUFFER_PRODUCER_SET_TRANSFORM,
160        BUFFER_PRODUCER_IS_SUPPORTED_ALLOC,
161        BUFFER_PRODUCER_GET_NAMEANDUNIQUEDID,
162        BUFFER_PRODUCER_DISCONNECT,
163        BUFFER_PRODUCER_SET_SCALING_MODE,
164        BUFFER_PRODUCER_SET_METADATA,
165        BUFFER_PRODUCER_SET_METADATASET,
166        BUFFER_PRODUCER_SET_TUNNEL_HANDLE,
167        BUFFER_PRODUCER_GO_BACKGROUND,
168        BUFFER_PRODUCER_GET_PRESENT_TIMESTAMP,
169        BUFFER_PRODUCER_UNREGISTER_RELEASE_LISTENER,
170        BUFFER_PRODUCER_GET_LAST_FLUSHED_BUFFER,
171        BUFFER_PRODUCER_GET_TRANSFORM,
172        BUFFER_PRODUCER_ATTACH_BUFFER_TO_QUEUE,
173        BUFFER_PRODUCER_DETACH_BUFFER_FROM_QUEUE,
174        BUFFER_PRODUCER_SET_DEFAULT_USAGE,
175        BUFFER_PRODUCER_GET_TRANSFORMHINT,
176        BUFFER_PRODUCER_SET_TRANSFORMHINT,
177        BUFFER_PRODUCER_SET_BUFFER_HOLD,
178        BUFFER_PRODUCER_SET_SOURCE_TYPE,
179        BUFFER_PRODUCER_GET_SOURCE_TYPE,
180        BUFFER_PRODUCER_SET_APP_FRAMEWORK_TYPE,
181        BUFFER_PRODUCER_GET_APP_FRAMEWORK_TYPE,
182        BUFFER_PRODUCER_SET_SCALING_MODEV2,
183        BUFFER_PRODUCER_SET_HDRWHITEPOINTBRIGHTNESS,
184        BUFFER_PRODUCER_SET_SDRWHITEPOINTBRIGHTNESS,
185        BUFFER_PRODUCER_REQUEST_BUFFERS,
186        BUFFER_PRODUCER_FLUSH_BUFFERS,
187        BUFFER_PRODUCER_GET_INIT_INFO,
188        BUFFER_PRODUCER_CONNECT,
189        BUFFER_PRODUCER_ACQUIRE_LAST_FLUSHED_BUFFER,
190        BUFFER_PRODUCER_RELEASE_LAST_FLUSHED_BUFFER,
191        BUFFER_PRODUCER_SET_GLOBALALPHA,
192    };
193};
194} // namespace OHOS
195
196#endif // INTERFACES_INNERKITS_SURFACE_IBUFFER_PRODUCER_H
197