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