• 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_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;
SetBufferName(const std::string & bufferName)102     virtual GSError SetBufferName(const std::string &bufferName)
103     {
104         (void)bufferName;
105         return GSERROR_NOT_SUPPORT;
106     }
107     virtual GSError SetMetaData(uint32_t sequence, const std::vector<GraphicHDRMetaData> &metaData) = 0;
108     virtual GSError SetMetaDataSet(uint32_t sequence, GraphicHDRMetadataKey key,
109                                    const std::vector<uint8_t> &metaData) = 0;
110     virtual GSError SetTunnelHandle(const GraphicExtDataHandle *handle) = 0;
111     virtual GSError GetPresentTimestamp(uint32_t sequence, GraphicPresentTimestampType type, int64_t &time) = 0;
112 
113     virtual sptr<NativeSurface> GetNativeSurface() = 0;
114     virtual GSError UnRegisterReleaseListener() = 0;
UnRegisterReleaseListenerBackup()115     virtual GSError UnRegisterReleaseListenerBackup()
116     {
117         return GSERROR_OK;
118     }
119     virtual GSError GetLastFlushedBuffer(sptr<SurfaceBuffer>& buffer,
120         sptr<SyncFence>& fence, float matrix[16], bool isUseNewMatrix) = 0;
121     virtual GSError AttachBuffer(sptr<SurfaceBuffer>& buffer, int32_t timeOut) = 0;
122 
123     virtual GSError GetTransform(GraphicTransformType &transform) = 0;
124 
125     virtual GSError AttachBufferToQueue(sptr<SurfaceBuffer> buffer) = 0;
126     virtual GSError DetachBufferFromQueue(sptr<SurfaceBuffer> buffer) = 0;
127     virtual GSError GetTransformHint(GraphicTransformType &transformHint) = 0;
128     virtual GSError SetTransformHint(GraphicTransformType transformHint, uint64_t fromId) = 0;
129     virtual GSError SetScalingMode(ScalingMode scalingMode) = 0;
130 
131     virtual GSError SetSurfaceSourceType(OHSurfaceSource sourceType) = 0;
132     virtual GSError GetSurfaceSourceType(OHSurfaceSource &sourceType) = 0;
133 
134     virtual GSError SetSurfaceAppFrameworkType(std::string appFrameworkType) = 0;
135     virtual GSError GetSurfaceAppFrameworkType(std::string &appFrameworkType) = 0;
136 
137     virtual GSError SetHdrWhitePointBrightness(float brightness) = 0;
138     virtual GSError SetSdrWhitePointBrightness(float brightness) = 0;
AcquireLastFlushedBuffer(sptr<SurfaceBuffer> & buffer,sptr<SyncFence> & fence,float matrix[16],uint32_t matrixSize,bool isUseNewMatrix)139     virtual GSError AcquireLastFlushedBuffer(sptr<SurfaceBuffer> &buffer, sptr<SyncFence> &fence,
140         float matrix[16], uint32_t matrixSize, bool isUseNewMatrix)
141     {
142         (void)buffer;
143         (void)fence;
144         (void)matrix;
145         (void)matrixSize;
146         (void)isUseNewMatrix;
147         return SURFACE_ERROR_NOT_SUPPORT;
148     };
ReleaseLastFlushedBuffer(uint32_t sequence)149     virtual GSError ReleaseLastFlushedBuffer(uint32_t sequence)
150     {
151         (void)sequence;
152         return SURFACE_ERROR_NOT_SUPPORT;
153     };
SetGlobalAlpha(int32_t alpha)154     virtual GSError SetGlobalAlpha(int32_t alpha)
155     {
156         (void)alpha;
157         return SURFACE_ERROR_NOT_SUPPORT;
158     };
RequestAndDetachBuffer(const BufferRequestConfig & config,sptr<BufferExtraData> & bedata,RequestBufferReturnValue & retval)159     virtual GSError RequestAndDetachBuffer(const BufferRequestConfig& config, sptr<BufferExtraData>& bedata,
160         RequestBufferReturnValue& retval)
161     {
162         (void)config;
163         (void)bedata;
164         (void)retval;
165         return SURFACE_ERROR_NOT_SUPPORT;
166     }
AttachAndFlushBuffer(sptr<SurfaceBuffer> & buffer,sptr<BufferExtraData> & bedata,const sptr<SyncFence> & fence,BufferFlushConfigWithDamages & config,bool needMap)167     virtual GSError AttachAndFlushBuffer(sptr<SurfaceBuffer>& buffer, sptr<BufferExtraData>& bedata,
168         const sptr<SyncFence>& fence, BufferFlushConfigWithDamages& config, bool needMap)
169     {
170         (void)buffer;
171         (void)bedata;
172         (void)fence;
173         (void)config;
174         (void)needMap;
175         return SURFACE_ERROR_NOT_SUPPORT;
176     }
GetCycleBuffersNumber(uint32_t & cycleBuffersNumber)177     virtual GSError GetCycleBuffersNumber(uint32_t& cycleBuffersNumber)
178     {
179         (void)cycleBuffersNumber;
180         return SURFACE_ERROR_NOT_SUPPORT;
181     }
SetCycleBuffersNumber(uint32_t cycleBuffersNumber)182     virtual GSError SetCycleBuffersNumber(uint32_t cycleBuffersNumber)
183     {
184         (void)cycleBuffersNumber;
185         return SURFACE_ERROR_NOT_SUPPORT;
186     }
187 
188     /**
189     * @brief In the strictly disconnected state, the producer must call the ConnectStrictly() interface before request
190     *        buffer. Unlike Connect(), ConnectStrictly() does not distinguish between process IDs (PIDs) and is
191     *        suitable for stricter connection management scenarios.
192     */
ConnectStrictly()193     virtual GSError ConnectStrictly()
194     {
195         return SURFACE_ERROR_NOT_SUPPORT;
196     }
197 
198     /**
199     * @brief After calling DisconnectStrictly(), the consumer (server) enter the strictly disconnected state.
200     *        In this state, any attempt by the producer (client) to request buffer will fail and return the error code
201     *        GSERROR_CONSUMER_DISCONNECTED.
202     */
DisconnectStrictly()203     virtual GSError DisconnectStrictly()
204     {
205         return SURFACE_ERROR_NOT_SUPPORT;
206     }
207     DECLARE_INTERFACE_DESCRIPTOR(u"surf.IBufferProducer");
208 
209 protected:
210     enum {
211         BUFFER_PRODUCER_REQUEST_BUFFER = 0,
212         BUFFER_PRODUCER_CANCEL_BUFFER,
213         BUFFER_PRODUCER_FLUSH_BUFFER,
214         BUFFER_PRODUCER_GET_QUEUE_SIZE,
215         BUFFER_PRODUCER_SET_QUEUE_SIZE,
216         BUFFER_PRODUCER_GET_NAME,
217         BUFFER_PRODUCER_GET_DEFAULT_WIDTH,
218         BUFFER_PRODUCER_GET_DEFAULT_HEIGHT,
219         BUFFER_PRODUCER_GET_DEFAULT_USAGE,
220         BUFFER_PRODUCER_CLEAN_CACHE,
221         BUFFER_PRODUCER_ATTACH_BUFFER,
222         BUFFER_PRODUCER_DETACH_BUFFER,
223         BUFFER_PRODUCER_REGISTER_RELEASE_LISTENER,
224         BUFFER_PRODUCER_GET_UNIQUE_ID,
225         BUFFER_PRODUCER_SET_TRANSFORM,
226         BUFFER_PRODUCER_GET_NAMEANDUNIQUEDID,
227         BUFFER_PRODUCER_DISCONNECT,
228         BUFFER_PRODUCER_SET_SCALING_MODE,
229         BUFFER_PRODUCER_SET_METADATA,
230         BUFFER_PRODUCER_SET_METADATASET,
231         BUFFER_PRODUCER_SET_TUNNEL_HANDLE,
232         BUFFER_PRODUCER_GO_BACKGROUND,
233         BUFFER_PRODUCER_GET_PRESENT_TIMESTAMP,
234         BUFFER_PRODUCER_UNREGISTER_RELEASE_LISTENER,
235         BUFFER_PRODUCER_GET_LAST_FLUSHED_BUFFER,
236         BUFFER_PRODUCER_GET_TRANSFORM,
237         BUFFER_PRODUCER_ATTACH_BUFFER_TO_QUEUE,
238         BUFFER_PRODUCER_DETACH_BUFFER_FROM_QUEUE,
239         BUFFER_PRODUCER_SET_DEFAULT_USAGE,
240         BUFFER_PRODUCER_GET_TRANSFORMHINT,
241         BUFFER_PRODUCER_SET_TRANSFORMHINT,
242         BUFFER_PRODUCER_SET_BUFFER_HOLD,
243         BUFFER_PRODUCER_SET_SOURCE_TYPE,
244         BUFFER_PRODUCER_GET_SOURCE_TYPE,
245         BUFFER_PRODUCER_SET_APP_FRAMEWORK_TYPE,
246         BUFFER_PRODUCER_GET_APP_FRAMEWORK_TYPE,
247         BUFFER_PRODUCER_SET_SCALING_MODEV2,
248         BUFFER_PRODUCER_SET_HDRWHITEPOINTBRIGHTNESS,
249         BUFFER_PRODUCER_SET_SDRWHITEPOINTBRIGHTNESS,
250         BUFFER_PRODUCER_REQUEST_BUFFERS,
251         BUFFER_PRODUCER_FLUSH_BUFFERS,
252         BUFFER_PRODUCER_GET_INIT_INFO,
253         BUFFER_PRODUCER_CONNECT,
254         BUFFER_PRODUCER_ACQUIRE_LAST_FLUSHED_BUFFER,
255         BUFFER_PRODUCER_RELEASE_LAST_FLUSHED_BUFFER,
256         BUFFER_PRODUCER_SET_GLOBALALPHA,
257         BUFFER_PRODUCER_REGISTER_RELEASE_LISTENER_BACKUP,
258         BUFFER_PRODUCER_UNREGISTER_RELEASE_LISTENER_BACKUP,
259         BUFFER_PRODUCER_REQUEST_AND_DETACH_BUFFER,
260         BUFFER_PRODUCER_ATTACH_AND_FLUSH_BUFFER,
261         BUFFER_PRODUCER_SET_BUFFER_NAME,
262         BUFFER_PRODUCER_GET_ROTATING_BUFFERS_NUMBER,
263         BUFFER_PRODUCER_SET_ROTATING_BUFFERS_NUMBER,
264         BUFFER_PRODUCER_CONNECT_STRICTLY,
265         BUFFER_PRODUCER_DISCONNECT_STRICTLY,
266         BUFFER_PRODUCER_REGISTER_PROPERTY_LISTENER,
267         BUFFER_PRODUCER_UNREGISTER_PROPERTY_LISTENER,
268     };
269 };
270 } // namespace OHOS
271 
272 #endif // INTERFACES_INNERKITS_SURFACE_IBUFFER_PRODUCER_H
273