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) = 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;
AcquireLastFlushedBuffer(sptr<SurfaceBuffer> & buffer,sptr<SyncFence> & fence,float matrix[16],uint32_t matrixSize,bool isUseNewMatrix)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     };
ReleaseLastFlushedBuffer(uint32_t sequence)135     virtual GSError ReleaseLastFlushedBuffer(uint32_t sequence)
136     {
137         (void)sequence;
138         return SURFACE_ERROR_NOT_SUPPORT;
139     };
RequestAndDetachBuffer(const BufferRequestConfig & config,sptr<BufferExtraData> & bedata,RequestBufferReturnValue & retval)140     virtual GSError RequestAndDetachBuffer(const BufferRequestConfig& config, sptr<BufferExtraData>& bedata,
141         RequestBufferReturnValue& retval)
142     {
143         (void)config;
144         (void)bedata;
145         (void)retval;
146         return SURFACE_ERROR_NOT_SUPPORT;
147     }
AttachAndFlushBuffer(sptr<SurfaceBuffer> & buffer,sptr<BufferExtraData> & bedata,const sptr<SyncFence> & fence,BufferFlushConfigWithDamages & config,bool needMap)148     virtual GSError AttachAndFlushBuffer(sptr<SurfaceBuffer>& buffer, sptr<BufferExtraData>& bedata,
149         const sptr<SyncFence>& fence, BufferFlushConfigWithDamages& config, bool needMap)
150     {
151         (void)buffer;
152         (void)bedata;
153         (void)fence;
154         (void)config;
155         (void)needMap;
156         return SURFACE_ERROR_NOT_SUPPORT;
157     }
158     DECLARE_INTERFACE_DESCRIPTOR(u"surf.IBufferProducer");
159 
160 protected:
161     enum {
162         BUFFER_PRODUCER_REQUEST_BUFFER = 0,
163         BUFFER_PRODUCER_CANCEL_BUFFER,
164         BUFFER_PRODUCER_FLUSH_BUFFER,
165         BUFFER_PRODUCER_GET_QUEUE_SIZE,
166         BUFFER_PRODUCER_SET_QUEUE_SIZE,
167         BUFFER_PRODUCER_GET_NAME,
168         BUFFER_PRODUCER_GET_DEFAULT_WIDTH,
169         BUFFER_PRODUCER_GET_DEFAULT_HEIGHT,
170         BUFFER_PRODUCER_GET_DEFAULT_USAGE,
171         BUFFER_PRODUCER_CLEAN_CACHE,
172         BUFFER_PRODUCER_ATTACH_BUFFER,
173         BUFFER_PRODUCER_DETACH_BUFFER,
174         BUFFER_PRODUCER_REGISTER_RELEASE_LISTENER,
175         BUFFER_PRODUCER_GET_UNIQUE_ID,
176         BUFFER_PRODUCER_SET_TRANSFORM,
177         BUFFER_PRODUCER_IS_SUPPORTED_ALLOC,
178         BUFFER_PRODUCER_GET_NAMEANDUNIQUEDID,
179         BUFFER_PRODUCER_DISCONNECT,
180         BUFFER_PRODUCER_SET_SCALING_MODE,
181         BUFFER_PRODUCER_SET_METADATA,
182         BUFFER_PRODUCER_SET_METADATASET,
183         BUFFER_PRODUCER_SET_TUNNEL_HANDLE,
184         BUFFER_PRODUCER_GO_BACKGROUND,
185         BUFFER_PRODUCER_GET_PRESENT_TIMESTAMP,
186         BUFFER_PRODUCER_UNREGISTER_RELEASE_LISTENER,
187         BUFFER_PRODUCER_GET_LAST_FLUSHED_BUFFER,
188         BUFFER_PRODUCER_GET_TRANSFORM,
189         BUFFER_PRODUCER_ATTACH_BUFFER_TO_QUEUE,
190         BUFFER_PRODUCER_DETACH_BUFFER_FROM_QUEUE,
191         BUFFER_PRODUCER_SET_DEFAULT_USAGE,
192         BUFFER_PRODUCER_GET_TRANSFORMHINT,
193         BUFFER_PRODUCER_SET_TRANSFORMHINT,
194         BUFFER_PRODUCER_SET_BUFFER_HOLD,
195         BUFFER_PRODUCER_SET_SOURCE_TYPE,
196         BUFFER_PRODUCER_GET_SOURCE_TYPE,
197         BUFFER_PRODUCER_SET_APP_FRAMEWORK_TYPE,
198         BUFFER_PRODUCER_GET_APP_FRAMEWORK_TYPE,
199         BUFFER_PRODUCER_SET_SCALING_MODEV2,
200         BUFFER_PRODUCER_SET_HDRWHITEPOINTBRIGHTNESS,
201         BUFFER_PRODUCER_SET_SDRWHITEPOINTBRIGHTNESS,
202         BUFFER_PRODUCER_REQUEST_BUFFERS,
203         BUFFER_PRODUCER_FLUSH_BUFFERS,
204         BUFFER_PRODUCER_GET_INIT_INFO,
205         BUFFER_PRODUCER_CONNECT,
206         BUFFER_PRODUCER_ACQUIRE_LAST_FLUSHED_BUFFER,
207         BUFFER_PRODUCER_RELEASE_LAST_FLUSHED_BUFFER,
208         BUFFER_PRODUCER_REQUEST_AND_DETACH_BUFFER,
209         BUFFER_PRODUCER_ATTACH_AND_FLUSH_BUFFER,
210     };
211 };
212 } // namespace OHOS
213 
214 #endif // INTERFACES_INNERKITS_SURFACE_IBUFFER_PRODUCER_H
215