• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021-2025 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 
31 namespace OHOS {
32 class SyncFence;
33 class IBufferProducerToken : public IRemoteBroker {
34 public:
35     DECLARE_INTERFACE_DESCRIPTOR(u"surf.IBufferProducerToken");
36 
37     IBufferProducerToken() = default;
38     virtual ~IBufferProducerToken() noexcept = default;
39 };
40 class IBufferProducer : public IRemoteBroker {
41 public:
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, uint32_t *bufSeqNum = nullptr) = 0;
83     virtual GSError GoBackground() = 0;
84 
85     virtual GSError RegisterReleaseListener(sptr<IProducerListener> listener) = 0;
RegisterReleaseListenerBackup(sptr<IProducerListener> listener)86     virtual GSError RegisterReleaseListenerBackup(sptr<IProducerListener> listener)
87     {
88         (void)listener;
89         return GSERROR_OK;
90     }
91 
92     virtual GSError RegisterPropertyListener(sptr<IProducerListener> listener, uint64_t producerId) =0;
93     virtual GSError UnRegisterPropertyListener(uint64_t producerId) = 0;
94 
95     virtual GSError SetTransform(GraphicTransformType transform) = 0;
96 
97     virtual GSError Connect() = 0;
98     virtual GSError Disconnect(uint32_t *bufSeqNum = nullptr) = 0;
99 
100     virtual GSError SetScalingMode(uint32_t sequence, ScalingMode scalingMode) = 0;
101     virtual GSError SetBufferHold(bool hold) = 0;
SetBufferReallocFlag(bool flag)102     virtual GSError SetBufferReallocFlag(bool flag)
103     {
104         (void)flag;
105         return SURFACE_ERROR_NOT_SUPPORT;
106     }
SetBufferName(const std::string & bufferName)107     virtual GSError SetBufferName(const std::string &bufferName)
108     {
109         (void)bufferName;
110         return GSERROR_NOT_SUPPORT;
111     }
112     virtual GSError SetMetaData(uint32_t sequence, const std::vector<GraphicHDRMetaData> &metaData) = 0;
113     virtual GSError SetMetaDataSet(uint32_t sequence, GraphicHDRMetadataKey key,
114                                    const std::vector<uint8_t> &metaData) = 0;
115     virtual GSError SetTunnelHandle(const GraphicExtDataHandle *handle) = 0;
116     virtual GSError GetPresentTimestamp(uint32_t sequence, GraphicPresentTimestampType type, int64_t &time) = 0;
117 
118     virtual sptr<NativeSurface> GetNativeSurface() = 0;
119     virtual GSError UnRegisterReleaseListener() = 0;
UnRegisterReleaseListenerBackup()120     virtual GSError UnRegisterReleaseListenerBackup()
121     {
122         return GSERROR_OK;
123     }
124     virtual GSError GetLastFlushedBuffer(sptr<SurfaceBuffer>& buffer,
125         sptr<SyncFence>& fence, float matrix[16], bool isUseNewMatrix) = 0;
126     virtual GSError AttachBuffer(sptr<SurfaceBuffer>& buffer, int32_t timeOut) = 0;
127 
128     virtual GSError GetTransform(GraphicTransformType &transform) = 0;
129 
130     virtual GSError AttachBufferToQueue(sptr<SurfaceBuffer> buffer) = 0;
131     virtual GSError DetachBufferFromQueue(sptr<SurfaceBuffer> buffer) = 0;
132     virtual GSError GetTransformHint(GraphicTransformType &transformHint) = 0;
133     virtual GSError SetTransformHint(GraphicTransformType transformHint, uint64_t fromId) = 0;
134     virtual GSError SetScalingMode(ScalingMode scalingMode) = 0;
135 
136     virtual GSError SetSurfaceSourceType(OHSurfaceSource sourceType) = 0;
137     virtual GSError GetSurfaceSourceType(OHSurfaceSource &sourceType) = 0;
138 
139     virtual GSError SetSurfaceAppFrameworkType(std::string appFrameworkType) = 0;
140     virtual GSError GetSurfaceAppFrameworkType(std::string &appFrameworkType) = 0;
141 
142     virtual GSError SetHdrWhitePointBrightness(float brightness) = 0;
143     virtual GSError SetSdrWhitePointBrightness(float brightness) = 0;
AcquireLastFlushedBuffer(sptr<SurfaceBuffer> & buffer,sptr<SyncFence> & fence,float matrix[16],uint32_t matrixSize,bool isUseNewMatrix)144     virtual GSError AcquireLastFlushedBuffer(sptr<SurfaceBuffer> &buffer, sptr<SyncFence> &fence,
145         float matrix[16], uint32_t matrixSize, bool isUseNewMatrix)
146     {
147         (void)buffer;
148         (void)fence;
149         (void)matrix;
150         (void)matrixSize;
151         (void)isUseNewMatrix;
152         return SURFACE_ERROR_NOT_SUPPORT;
153     };
ReleaseLastFlushedBuffer(uint32_t sequence)154     virtual GSError ReleaseLastFlushedBuffer(uint32_t sequence)
155     {
156         (void)sequence;
157         return SURFACE_ERROR_NOT_SUPPORT;
158     };
SetGlobalAlpha(int32_t alpha)159     virtual GSError SetGlobalAlpha(int32_t alpha)
160     {
161         (void)alpha;
162         return SURFACE_ERROR_NOT_SUPPORT;
163     };
SetRequestBufferNoblockMode(bool noblock)164     virtual GSError SetRequestBufferNoblockMode(bool noblock)
165     {
166         (void)noblock;
167         return SURFACE_ERROR_NOT_SUPPORT;
168     };
RequestAndDetachBuffer(const BufferRequestConfig & config,sptr<BufferExtraData> & bedata,RequestBufferReturnValue & retval)169     virtual GSError RequestAndDetachBuffer(const BufferRequestConfig& config, sptr<BufferExtraData>& bedata,
170         RequestBufferReturnValue& retval)
171     {
172         (void)config;
173         (void)bedata;
174         (void)retval;
175         return SURFACE_ERROR_NOT_SUPPORT;
176     }
AttachAndFlushBuffer(sptr<SurfaceBuffer> & buffer,sptr<BufferExtraData> & bedata,const sptr<SyncFence> & fence,BufferFlushConfigWithDamages & config,bool needMap)177     virtual GSError AttachAndFlushBuffer(sptr<SurfaceBuffer>& buffer, sptr<BufferExtraData>& bedata,
178         const sptr<SyncFence>& fence, BufferFlushConfigWithDamages& config, bool needMap)
179     {
180         (void)buffer;
181         (void)bedata;
182         (void)fence;
183         (void)config;
184         (void)needMap;
185         return SURFACE_ERROR_NOT_SUPPORT;
186     }
GetCycleBuffersNumber(uint32_t & cycleBuffersNumber)187     virtual GSError GetCycleBuffersNumber(uint32_t& cycleBuffersNumber)
188     {
189         (void)cycleBuffersNumber;
190         return SURFACE_ERROR_NOT_SUPPORT;
191     }
SetCycleBuffersNumber(uint32_t cycleBuffersNumber)192     virtual GSError SetCycleBuffersNumber(uint32_t cycleBuffersNumber)
193     {
194         (void)cycleBuffersNumber;
195         return SURFACE_ERROR_NOT_SUPPORT;
196     }
197 
SetFrameGravity(int32_t frameGravity)198     virtual GSError SetFrameGravity(int32_t frameGravity)
199     {
200         (void)frameGravity;
201         return SURFACE_ERROR_NOT_SUPPORT;
202     }
203 
SetFixedRotation(int32_t fixedRotation)204     virtual GSError SetFixedRotation(int32_t fixedRotation)
205     {
206         (void)fixedRotation;
207         return SURFACE_ERROR_NOT_SUPPORT;
208     }
209 
210     /**
211     * @brief In the strictly disconnected state, the producer must call the ConnectStrictly() interface before request
212     *        buffer. Unlike Connect(), ConnectStrictly() does not distinguish between process IDs (PIDs) and is
213     *        suitable for stricter connection management scenarios.
214     */
ConnectStrictly()215     virtual GSError ConnectStrictly()
216     {
217         return SURFACE_ERROR_NOT_SUPPORT;
218     }
219 
220     /**
221     * @brief After calling DisconnectStrictly(), the consumer (server) enter the strictly disconnected state.
222     *        In this state, any attempt by the producer (client) to request buffer will fail and return the error code
223     *        GSERROR_CONSUMER_DISCONNECTED.
224     */
DisconnectStrictly()225     virtual GSError DisconnectStrictly()
226     {
227         return SURFACE_ERROR_NOT_SUPPORT;
228     }
PreAllocBuffers(const BufferRequestConfig & config,uint32_t allocBufferCount)229     virtual GSError PreAllocBuffers(const BufferRequestConfig &config, uint32_t allocBufferCount)
230     {
231         (void)config;
232         (void)allocBufferCount;
233         return SURFACE_ERROR_NOT_SUPPORT;
234     }
SetLppShareFd(int fd,bool state)235     virtual GSError SetLppShareFd(int fd, bool state)
236     {
237         (void)fd;
238         (void)state;
239         return SURFACE_ERROR_NOT_SUPPORT;
240     }
SetAlphaType(GraphicAlphaType alphaType)241     virtual GSError SetAlphaType(GraphicAlphaType alphaType)
242     {
243         (void)alphaType;
244         return SURFACE_ERROR_NOT_SUPPORT;
245     }
246     DECLARE_INTERFACE_DESCRIPTOR(u"surf.IBufferProducer");
247 
248 protected:
249     enum {
250         BUFFER_PRODUCER_REQUEST_BUFFER = 0,
251         BUFFER_PRODUCER_CANCEL_BUFFER,
252         BUFFER_PRODUCER_FLUSH_BUFFER,
253         BUFFER_PRODUCER_GET_QUEUE_SIZE,
254         BUFFER_PRODUCER_SET_QUEUE_SIZE,
255         BUFFER_PRODUCER_GET_NAME,
256         BUFFER_PRODUCER_GET_DEFAULT_WIDTH,
257         BUFFER_PRODUCER_GET_DEFAULT_HEIGHT,
258         BUFFER_PRODUCER_GET_DEFAULT_USAGE,
259         BUFFER_PRODUCER_CLEAN_CACHE,
260         BUFFER_PRODUCER_ATTACH_BUFFER,
261         BUFFER_PRODUCER_DETACH_BUFFER,
262         BUFFER_PRODUCER_REGISTER_RELEASE_LISTENER,
263         BUFFER_PRODUCER_GET_UNIQUE_ID,
264         BUFFER_PRODUCER_SET_TRANSFORM,
265         BUFFER_PRODUCER_GET_NAMEANDUNIQUEDID,
266         BUFFER_PRODUCER_DISCONNECT,
267         BUFFER_PRODUCER_SET_SCALING_MODE,
268         BUFFER_PRODUCER_SET_METADATA,
269         BUFFER_PRODUCER_SET_METADATASET,
270         BUFFER_PRODUCER_SET_TUNNEL_HANDLE,
271         BUFFER_PRODUCER_GO_BACKGROUND,
272         BUFFER_PRODUCER_GET_PRESENT_TIMESTAMP,
273         BUFFER_PRODUCER_UNREGISTER_RELEASE_LISTENER,
274         BUFFER_PRODUCER_GET_LAST_FLUSHED_BUFFER,
275         BUFFER_PRODUCER_GET_TRANSFORM,
276         BUFFER_PRODUCER_ATTACH_BUFFER_TO_QUEUE,
277         BUFFER_PRODUCER_DETACH_BUFFER_FROM_QUEUE,
278         BUFFER_PRODUCER_SET_DEFAULT_USAGE,
279         BUFFER_PRODUCER_GET_TRANSFORMHINT,
280         BUFFER_PRODUCER_SET_TRANSFORMHINT,
281         BUFFER_PRODUCER_SET_BUFFER_HOLD,
282         BUFFER_PRODUCER_SET_SOURCE_TYPE,
283         BUFFER_PRODUCER_GET_SOURCE_TYPE,
284         BUFFER_PRODUCER_SET_APP_FRAMEWORK_TYPE,
285         BUFFER_PRODUCER_GET_APP_FRAMEWORK_TYPE,
286         BUFFER_PRODUCER_SET_SCALING_MODEV2,
287         BUFFER_PRODUCER_SET_HDRWHITEPOINTBRIGHTNESS,
288         BUFFER_PRODUCER_SET_SDRWHITEPOINTBRIGHTNESS,
289         BUFFER_PRODUCER_REQUEST_BUFFERS,
290         BUFFER_PRODUCER_FLUSH_BUFFERS,
291         BUFFER_PRODUCER_GET_INIT_INFO,
292         BUFFER_PRODUCER_CONNECT,
293         BUFFER_PRODUCER_ACQUIRE_LAST_FLUSHED_BUFFER,
294         BUFFER_PRODUCER_RELEASE_LAST_FLUSHED_BUFFER,
295         BUFFER_PRODUCER_SET_GLOBALALPHA,
296         BUFFER_PRODUCER_SET_REQUESTBUFFER_NOBLOCKMODE,
297         BUFFER_PRODUCER_REGISTER_RELEASE_LISTENER_BACKUP,
298         BUFFER_PRODUCER_UNREGISTER_RELEASE_LISTENER_BACKUP,
299         BUFFER_PRODUCER_REQUEST_AND_DETACH_BUFFER,
300         BUFFER_PRODUCER_ATTACH_AND_FLUSH_BUFFER,
301         BUFFER_PRODUCER_SET_BUFFER_NAME,
302         BUFFER_PRODUCER_GET_ROTATING_BUFFERS_NUMBER,
303         BUFFER_PRODUCER_SET_ROTATING_BUFFERS_NUMBER,
304         BUFFER_PRODUCER_SET_FRAME_GRAVITY,
305         BUFFER_PRODUCER_SET_FIXED_ROTATION,
306         BUFFER_PRODUCER_CONNECT_STRICTLY,
307         BUFFER_PRODUCER_DISCONNECT_STRICTLY,
308         BUFFER_PRODUCER_REGISTER_PROPERTY_LISTENER,
309         BUFFER_PRODUCER_UNREGISTER_PROPERTY_LISTENER,
310         BUFFER_PRODUCER_PRE_ALLOC_BUFFERS,
311         BUFFER_PRODUCER_SET_LPP_FD,
312         BUFFER_PRODUCER_BUFFER_REALLOC_FLAG,
313         BUFFER_PRODUCER_SET_ALPHA_TYPE,
314     };
315 };
316 } // namespace OHOS
317 
318 #endif // INTERFACES_INNERKITS_SURFACE_IBUFFER_PRODUCER_H
319