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_SURFACE_H 17 #define INTERFACES_INNERKITS_SURFACE_SURFACE_H 18 19 #include <refbase.h> 20 21 #include "ibuffer_consumer_listener.h" 22 #include "ibuffer_producer.h" 23 #include "surface_buffer.h" 24 #include "surface_type.h" 25 #include "surface_tunnel_handle.h" 26 27 namespace OHOS { 28 class Surface : public RefBase { 29 public: 30 static sptr<Surface> CreateSurfaceAsConsumer(std::string name = "noname"); 31 static sptr<Surface> CreateSurfaceAsProducer(sptr<IBufferProducer>& producer); 32 33 virtual ~Surface() = default; 34 GetProducerInitInfo(ProducerInitInfo & info)35 virtual GSError GetProducerInitInfo(ProducerInitInfo &info) 36 { 37 (void)info; 38 return GSERROR_NOT_SUPPORT; 39 } 40 virtual bool IsConsumer() const = 0; 41 virtual sptr<IBufferProducer> GetProducer() const = 0; 42 RequestBuffer(sptr<SurfaceBuffer> & buffer,int32_t & fence,BufferRequestConfig & config)43 virtual GSError RequestBuffer(sptr<SurfaceBuffer>& buffer, 44 int32_t &fence, BufferRequestConfig &config) 45 { 46 (void)buffer; 47 (void)fence; 48 (void)config; 49 return GSERROR_NOT_SUPPORT; 50 } 51 RequestBuffers(std::vector<sptr<SurfaceBuffer>> & buffers,std::vector<sptr<SyncFence>> & fences,BufferRequestConfig & config)52 virtual GSError RequestBuffers(std::vector<sptr<SurfaceBuffer>> &buffers, 53 std::vector<sptr<SyncFence>> &fences, BufferRequestConfig &config) 54 { 55 (void)buffers; 56 (void)fences; 57 (void)config; 58 return GSERROR_NOT_SUPPORT; 59 } 60 CancelBuffer(sptr<SurfaceBuffer> & buffer)61 virtual GSError CancelBuffer(sptr<SurfaceBuffer>& buffer) 62 { 63 (void)buffer; 64 return GSERROR_NOT_SUPPORT; 65 } 66 FlushBuffer(sptr<SurfaceBuffer> & buffer,int32_t fence,BufferFlushConfig & config)67 virtual GSError FlushBuffer(sptr<SurfaceBuffer>& buffer, 68 int32_t fence, BufferFlushConfig &config) 69 { 70 (void)buffer; 71 (void)fence; 72 (void)config; 73 return GSERROR_NOT_SUPPORT; 74 } 75 AcquireBuffer(sptr<SurfaceBuffer> & buffer,int32_t & fence,int64_t & timestamp,Rect & damage)76 virtual GSError AcquireBuffer(sptr<SurfaceBuffer>& buffer, int32_t &fence, 77 int64_t ×tamp, Rect &damage) 78 { 79 (void)buffer; 80 (void)fence; 81 (void)timestamp; 82 (void)damage; 83 return GSERROR_NOT_SUPPORT; 84 } ReleaseBuffer(sptr<SurfaceBuffer> & buffer,int32_t fence)85 virtual GSError ReleaseBuffer(sptr<SurfaceBuffer>& buffer, int32_t fence) 86 { 87 (void)buffer; 88 (void)fence; 89 return GSERROR_NOT_SUPPORT; 90 } 91 RequestBuffer(sptr<SurfaceBuffer> & buffer,sptr<SyncFence> & fence,BufferRequestConfig & config)92 virtual GSError RequestBuffer(sptr<SurfaceBuffer>& buffer, 93 sptr<SyncFence>& fence, BufferRequestConfig &config) 94 { 95 (void)buffer; 96 (void)fence; 97 (void)config; 98 return GSERROR_NOT_SUPPORT; 99 } FlushBuffer(sptr<SurfaceBuffer> & buffer,const sptr<SyncFence> & fence,BufferFlushConfig & config)100 virtual GSError FlushBuffer(sptr<SurfaceBuffer>& buffer, 101 const sptr<SyncFence>& fence, BufferFlushConfig &config) 102 { 103 (void)buffer; 104 (void)fence; 105 (void)config; 106 return GSERROR_NOT_SUPPORT; 107 } AcquireBuffer(sptr<SurfaceBuffer> & buffer,sptr<SyncFence> & fence,int64_t & timestamp,Rect & damage)108 virtual GSError AcquireBuffer(sptr<SurfaceBuffer>& buffer, sptr<SyncFence>& fence, 109 int64_t ×tamp, Rect &damage) 110 { 111 (void)buffer; 112 (void)fence; 113 (void)timestamp; 114 (void)damage; 115 return GSERROR_NOT_SUPPORT; 116 } ReleaseBuffer(sptr<SurfaceBuffer> & buffer,const sptr<SyncFence> & fence)117 virtual GSError ReleaseBuffer(sptr<SurfaceBuffer>& buffer, const sptr<SyncFence>& fence) 118 { 119 (void)buffer; 120 (void)fence; 121 return GSERROR_NOT_SUPPORT; 122 } 123 124 virtual GSError AttachBuffer(sptr<SurfaceBuffer>& buffer) = 0; 125 126 virtual GSError DetachBuffer(sptr<SurfaceBuffer>& buffer) = 0; 127 128 virtual uint32_t GetQueueSize() = 0; 129 virtual GSError SetQueueSize(uint32_t queueSize) = 0; 130 SetDefaultWidthAndHeight(int32_t width,int32_t height)131 virtual GSError SetDefaultWidthAndHeight(int32_t width, int32_t height) 132 { 133 (void)width; 134 (void)height; 135 return GSERROR_NOT_SUPPORT; 136 } 137 virtual int32_t GetDefaultWidth() = 0; 138 virtual int32_t GetDefaultHeight() = 0; 139 140 virtual GSError SetDefaultUsage(uint64_t usage) = 0; 141 virtual uint64_t GetDefaultUsage() = 0; 142 143 virtual GSError SetUserData(const std::string &key, const std::string &val) = 0; 144 virtual std::string GetUserData(const std::string &key) = 0; 145 146 virtual const std::string& GetName() = 0; 147 virtual uint64_t GetUniqueId() const = 0; 148 RegisterConsumerListener(sptr<IBufferConsumerListener> & listener)149 virtual GSError RegisterConsumerListener(sptr<IBufferConsumerListener>& listener) 150 { 151 (void)listener; 152 return GSERROR_NOT_SUPPORT; 153 } RegisterConsumerListener(IBufferConsumerListenerClazz * listener)154 virtual GSError RegisterConsumerListener(IBufferConsumerListenerClazz *listener) 155 { 156 (void)listener; 157 return GSERROR_NOT_SUPPORT; 158 } RegisterReleaseListener(OnReleaseFunc func)159 virtual GSError RegisterReleaseListener(OnReleaseFunc func) 160 { 161 (void)func; 162 return GSERROR_NOT_SUPPORT; 163 } 164 virtual GSError RegisterDeleteBufferListener(OnDeleteBufferFunc func, bool isForUniRedraw = false) 165 { 166 (void)func; 167 (void)isForUniRedraw; 168 return GSERROR_NOT_SUPPORT; 169 } UnregisterConsumerListener()170 virtual GSError UnregisterConsumerListener() 171 { 172 return GSERROR_NOT_SUPPORT; 173 } 174 175 // Call carefully. This interface will empty all caches of the current process 176 virtual GSError CleanCache(bool cleanAll = false) 177 { 178 (void)cleanAll; 179 return GSERROR_NOT_SUPPORT; 180 } 181 virtual GSError GoBackground() = 0; 182 183 virtual GSError SetTransform(GraphicTransformType transform) = 0; 184 virtual GraphicTransformType GetTransform() const = 0; 185 Connect()186 virtual GSError Connect() 187 { 188 return GSERROR_NOT_SUPPORT; 189 } Disconnect()190 virtual GSError Disconnect() 191 { 192 return GSERROR_NOT_SUPPORT; 193 } 194 virtual GSError SetScalingMode(uint32_t sequence, ScalingMode scalingMode) = 0; GetScalingMode(uint32_t sequence,ScalingMode & scalingMode)195 virtual GSError GetScalingMode(uint32_t sequence, ScalingMode &scalingMode) 196 { 197 (void)sequence; 198 (void)scalingMode; 199 return GSERROR_NOT_SUPPORT; 200 } 201 virtual GSError SetMetaData(uint32_t sequence, const std::vector<GraphicHDRMetaData> &metaData) = 0; 202 virtual GSError SetMetaDataSet(uint32_t sequence, GraphicHDRMetadataKey key, 203 const std::vector<uint8_t> &metaData) = 0; QueryMetaDataType(uint32_t sequence,HDRMetaDataType & type)204 virtual GSError QueryMetaDataType(uint32_t sequence, HDRMetaDataType &type) const 205 { 206 (void)sequence; 207 (void)type; 208 return GSERROR_NOT_SUPPORT; 209 } GetMetaData(uint32_t sequence,std::vector<GraphicHDRMetaData> & metaData)210 virtual GSError GetMetaData(uint32_t sequence, std::vector<GraphicHDRMetaData> &metaData) const 211 { 212 (void)sequence; 213 (void)metaData; 214 return GSERROR_NOT_SUPPORT; 215 } GetMetaDataSet(uint32_t sequence,GraphicHDRMetadataKey & key,std::vector<uint8_t> & metaData)216 virtual GSError GetMetaDataSet(uint32_t sequence, GraphicHDRMetadataKey &key, 217 std::vector<uint8_t> &metaData) const 218 { 219 (void)sequence; 220 (void)key; 221 (void)metaData; 222 return GSERROR_NOT_SUPPORT; 223 } 224 virtual GSError SetTunnelHandle(const GraphicExtDataHandle *handle) = 0; GetTunnelHandle()225 virtual sptr<SurfaceTunnelHandle> GetTunnelHandle() const 226 { 227 return nullptr; 228 } SetPresentTimestamp(uint32_t sequence,const GraphicPresentTimestamp & timestamp)229 virtual GSError SetPresentTimestamp(uint32_t sequence, const GraphicPresentTimestamp ×tamp) 230 { 231 (void)sequence; 232 (void)timestamp; 233 return GSERROR_NOT_SUPPORT; 234 } GetPresentTimestamp(uint32_t sequence,GraphicPresentTimestampType type,int64_t & time)235 virtual GSError GetPresentTimestamp(uint32_t sequence, GraphicPresentTimestampType type, 236 int64_t &time) const 237 { 238 (void)sequence; 239 (void)type; 240 (void)time; 241 return GSERROR_NOT_SUPPORT; 242 } 243 244 virtual void Dump(std::string &result) const = 0; 245 GetDefaultFormat()246 virtual int32_t GetDefaultFormat() 247 { 248 return 0; 249 } SetDefaultFormat(int32_t format)250 virtual GSError SetDefaultFormat(int32_t format) 251 { 252 (void)format; 253 return GSERROR_NOT_SUPPORT; 254 } GetDefaultColorGamut()255 virtual int32_t GetDefaultColorGamut() 256 { 257 return 0; 258 } SetDefaultColorGamut(int32_t colorGamut)259 virtual GSError SetDefaultColorGamut(int32_t colorGamut) 260 { 261 (void)colorGamut; 262 return GSERROR_NOT_SUPPORT; 263 } 264 GetNativeSurface()265 virtual sptr<NativeSurface> GetNativeSurface() 266 { 267 return nullptr; 268 } 269 QueryIfBufferAvailable()270 virtual bool QueryIfBufferAvailable() 271 { 272 return false; 273 } FlushBuffer(sptr<SurfaceBuffer> & buffer,const sptr<SyncFence> & fence,BufferFlushConfigWithDamages & config)274 virtual GSError FlushBuffer(sptr<SurfaceBuffer>& buffer, const sptr<SyncFence>& fence, 275 BufferFlushConfigWithDamages &config) 276 { 277 (void)buffer; 278 (void)fence; 279 (void)config; 280 return GSERROR_NOT_SUPPORT; 281 } FlushBuffers(const std::vector<sptr<SurfaceBuffer>> & buffers,const std::vector<sptr<SyncFence>> & fences,const std::vector<BufferFlushConfigWithDamages> & configs)282 virtual GSError FlushBuffers(const std::vector<sptr<SurfaceBuffer>> &buffers, 283 const std::vector<sptr<SyncFence>> &fences, const std::vector<BufferFlushConfigWithDamages> &configs) 284 { 285 (void)buffers; 286 (void)fences; 287 (void)configs; 288 return GSERROR_NOT_SUPPORT; 289 } UnRegisterReleaseListener()290 virtual GSError UnRegisterReleaseListener() 291 { 292 return GSERROR_NOT_SUPPORT; 293 } UnRegisterReleaseListenerBackup()294 virtual GSError UnRegisterReleaseListenerBackup() 295 { 296 return GSERROR_NOT_SUPPORT; 297 } SetWptrNativeWindowToPSurface(void * nativeWindow)298 virtual GSError SetWptrNativeWindowToPSurface(void* nativeWindow) 299 { 300 (void)nativeWindow; 301 return GSERROR_NOT_SUPPORT; 302 } 303 virtual GSError GetLastFlushedBuffer(sptr<SurfaceBuffer>& buffer, 304 sptr<SyncFence>& fence, float matrix[16], bool isUseNewMatrix = false) 305 { 306 (void)buffer; 307 (void)fence; 308 (void)matrix; 309 (void)isUseNewMatrix; 310 return GSERROR_NOT_SUPPORT; 311 } 312 virtual GSError AttachBuffer(sptr<SurfaceBuffer>& buffer, int32_t timeOut) = 0; 313 virtual GSError RegisterSurfaceDelegator(sptr<IRemoteObject> client) = 0; 314 virtual GSError RegisterReleaseListener(OnReleaseFuncWithFence func) = 0; RegisterReleaseListenerBackup(OnReleaseFuncWithFence func)315 virtual GSError RegisterReleaseListenerBackup(OnReleaseFuncWithFence func) 316 { 317 (void)func; 318 return GSERROR_NOT_SUPPORT; 319 } 320 virtual GSError RegisterUserDataChangeListener(const std::string &funcName, OnUserDataChangeFunc func) = 0; 321 virtual GSError UnRegisterUserDataChangeListener(const std::string &funcName) = 0; 322 virtual GSError ClearUserDataChangeListener() = 0; 323 324 virtual GSError AttachBufferToQueue(sptr<SurfaceBuffer> buffer) = 0; 325 virtual GSError DetachBufferFromQueue(sptr<SurfaceBuffer> buffer, bool isReserveSlot = false) = 0; 326 327 virtual GraphicTransformType GetTransformHint() const = 0; 328 virtual GSError SetTransformHint(GraphicTransformType transformHint) = 0; SetBufferName(const std::string & name)329 virtual GSError SetBufferName(const std::string &name) 330 { 331 (void)name; 332 return GSERROR_NOT_SUPPORT; 333 } 334 SetRequestWidthAndHeight(int32_t width,int32_t height)335 virtual void SetRequestWidthAndHeight(int32_t width, int32_t height) 336 { 337 (void)width; 338 (void)height; 339 } GetRequestWidth()340 virtual int32_t GetRequestWidth() 341 { 342 return 0; 343 } GetRequestHeight()344 virtual int32_t GetRequestHeight() 345 { 346 return 0; 347 } 348 349 virtual void SetBufferHold(bool hold) = 0; SetWindowConfig(const BufferRequestConfig & config)350 virtual void SetWindowConfig(const BufferRequestConfig& config) 351 { 352 (void)config; 353 } SetWindowConfigWidthAndHeight(int32_t width,int32_t height)354 virtual void SetWindowConfigWidthAndHeight(int32_t width, int32_t height) 355 { 356 (void)width; 357 (void)height; 358 } SetWindowConfigStride(int32_t stride)359 virtual void SetWindowConfigStride(int32_t stride) 360 { 361 (void)stride; 362 } SetWindowConfigFormat(int32_t format)363 virtual void SetWindowConfigFormat(int32_t format) 364 { 365 (void)format; 366 } SetWindowConfigUsage(uint64_t usage)367 virtual void SetWindowConfigUsage(uint64_t usage) 368 { 369 (void)usage; 370 } SetWindowConfigTimeout(int32_t timeout)371 virtual void SetWindowConfigTimeout(int32_t timeout) 372 { 373 (void)timeout; 374 } SetWindowConfigColorGamut(GraphicColorGamut colorGamut)375 virtual void SetWindowConfigColorGamut(GraphicColorGamut colorGamut) 376 { 377 (void)colorGamut; 378 } SetWindowConfigTransform(GraphicTransformType transform)379 virtual void SetWindowConfigTransform(GraphicTransformType transform) 380 { 381 (void)transform; 382 } GetWindowConfig()383 virtual BufferRequestConfig GetWindowConfig() 384 { 385 BufferRequestConfig config; 386 return config; 387 } 388 virtual GSError SetScalingMode(ScalingMode scalingMode) = 0; 389 virtual GSError SetSurfaceSourceType(OHSurfaceSource sourceType) = 0; 390 virtual OHSurfaceSource GetSurfaceSourceType() const = 0; 391 virtual GSError SetSurfaceAppFrameworkType(std::string appFrameworkType) = 0; 392 virtual std::string GetSurfaceAppFrameworkType() const = 0; SetHdrWhitePointBrightness(float brightness)393 virtual GSError SetHdrWhitePointBrightness(float brightness) 394 { 395 (void)brightness; 396 return GSERROR_NOT_SUPPORT; 397 } SetSdrWhitePointBrightness(float brightness)398 virtual GSError SetSdrWhitePointBrightness(float brightness) 399 { 400 (void)brightness; 401 return GSERROR_NOT_SUPPORT; 402 } AcquireLastFlushedBuffer(sptr<SurfaceBuffer> & buffer,sptr<SyncFence> & fence,float matrix[16],uint32_t matrixSize,bool isUseNewMatrix)403 virtual GSError AcquireLastFlushedBuffer(sptr<SurfaceBuffer> &buffer, sptr<SyncFence> &fence, 404 float matrix[16], uint32_t matrixSize, bool isUseNewMatrix) 405 { 406 (void)buffer; 407 (void)fence; 408 (void)matrix; 409 (void)matrixSize; 410 (void)isUseNewMatrix; 411 return GSERROR_NOT_SUPPORT; 412 } ReleaseLastFlushedBuffer(sptr<SurfaceBuffer> buffer)413 virtual GSError ReleaseLastFlushedBuffer(sptr<SurfaceBuffer> buffer) 414 { 415 (void)buffer; 416 return GSERROR_NOT_SUPPORT; 417 } SetGlobalAlpha(int32_t alpha)418 virtual GSError SetGlobalAlpha(int32_t alpha) 419 { 420 (void)alpha; 421 return GSERROR_NOT_SUPPORT; 422 } IsInHebcList()423 virtual bool IsInHebcList() 424 { 425 return false; 426 } 427 /** 428 * @brief Merge RequestBuffer and DetachBufferFromQueue function to reduce once ipc. 429 */ RequestAndDetachBuffer(sptr<SurfaceBuffer> & buffer,sptr<SyncFence> & fence,BufferRequestConfig & config)430 virtual GSError RequestAndDetachBuffer(sptr<SurfaceBuffer>& buffer, sptr<SyncFence>& fence, 431 BufferRequestConfig& config) 432 { 433 (void)buffer; 434 (void)fence; 435 (void)config; 436 return GSERROR_NOT_SUPPORT; 437 } 438 439 /** 440 * @brief Merge AttachBufferToQueue And FlushBuffer function to reduce once ipc. 441 */ AttachAndFlushBuffer(sptr<SurfaceBuffer> & buffer,const sptr<SyncFence> & fence,BufferFlushConfig & config,bool needMap)442 virtual GSError AttachAndFlushBuffer(sptr<SurfaceBuffer>& buffer, const sptr<SyncFence>& fence, 443 BufferFlushConfig& config, bool needMap) 444 { 445 (void)buffer; 446 (void)fence; 447 (void)config; 448 (void)needMap; 449 return GSERROR_NOT_SUPPORT; 450 } 451 /** 452 * @brief Avoidance plan, which can be deleted later. 453 */ GetBufferCacheConfig(const sptr<SurfaceBuffer> & buffer,BufferRequestConfig & config)454 virtual GSError GetBufferCacheConfig(const sptr<SurfaceBuffer>& buffer, BufferRequestConfig& config) 455 { 456 (void)buffer; 457 (void)config; 458 return GSERROR_NOT_SUPPORT; 459 } GetCycleBuffersNumber(uint32_t & cycleBuffersNumber)460 virtual GSError GetCycleBuffersNumber(uint32_t& cycleBuffersNumber) 461 { 462 (void)cycleBuffersNumber; 463 return SURFACE_ERROR_NOT_SUPPORT; 464 } 465 /** 466 * @brief Set the Rotating Buffers Number object for hdi create layer max cache count. 467 * @param cycleBuffersNumber scope : (0, 2 * maxQueueSize], and it should be actual number of cycle buffers. 468 */ SetCycleBuffersNumber(uint32_t cycleBuffersNumber)469 virtual GSError SetCycleBuffersNumber(uint32_t cycleBuffersNumber) 470 { 471 (void)cycleBuffersNumber; 472 return SURFACE_ERROR_NOT_SUPPORT; 473 } 474 475 /** 476 * @brief In the strictly disconnected state, the producer must call the ConnectStrictly() interface before request 477 * buffer. Unlike Connect(), ConnectStrictly() does not distinguish between process IDs (PIDs) and is 478 * suitable for stricter connection management scenarios. 479 */ ConnectStrictly()480 virtual GSError ConnectStrictly() 481 { 482 return SURFACE_ERROR_NOT_SUPPORT; 483 } 484 485 /** 486 * @brief After calling DisconnectStrictly(), the consumer (server) enter the strictly disconnected state. 487 * In this state, any attempt by the producer (client) to request buffer will fail and return the error code 488 * GSERROR_CONSUMER_DISCONNECTED. 489 */ DisconnectStrictly()490 virtual GSError DisconnectStrictly() 491 { 492 return SURFACE_ERROR_NOT_SUPPORT; 493 } 494 protected: 495 Surface() = default; 496 }; 497 } // namespace OHOS 498 499 #endif // INTERFACES_INNERKITS_SURFACE_SURFACE_H 500