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_ICONSUMER_SURFACE_H 17 #define INTERFACES_INNERKITS_SURFACE_ICONSUMER_SURFACE_H 18 19 #include <refbase.h> 20 21 #include "ibuffer_consumer_listener.h" 22 #include "ibuffer_producer.h" 23 #include "surface.h" 24 #include "surface_buffer.h" 25 #include "surface_type.h" 26 #include "surface_tunnel_handle.h" 27 28 namespace OHOS { 29 class IConsumerSurface : public Surface { 30 public: 31 using AcquireBufferReturnValue = struct { 32 sptr<SurfaceBuffer> buffer; 33 sptr<SyncFence> fence; 34 int64_t timestamp; 35 std::vector<Rect> damages; 36 int64_t desiredPresentTimestamp; 37 int64_t requestTimeNs; 38 int64_t flushTimeNs; 39 bool isAutoTimestamp; 40 }; 41 42 static sptr<IConsumerSurface> Create(std::string name = "noname"); 43 44 virtual ~IConsumerSurface() = default; 45 IsConsumer()46 virtual bool IsConsumer() const 47 { 48 return true; 49 } GetProducer()50 virtual sptr<IBufferProducer> GetProducer() const 51 { 52 return nullptr; 53 } AcquireBuffer(sptr<SurfaceBuffer> & buffer,int32_t & fence,int64_t & timestamp,Rect & damage)54 virtual GSError AcquireBuffer(sptr<SurfaceBuffer>& buffer, int32_t &fence, 55 int64_t ×tamp, Rect &damage) 56 { 57 (void)buffer; 58 (void)fence; 59 (void)timestamp; 60 (void)damage; 61 return SURFACE_ERROR_NOT_SUPPORT; 62 } ReleaseBuffer(sptr<SurfaceBuffer> & buffer,int32_t fence)63 virtual GSError ReleaseBuffer(sptr<SurfaceBuffer>& buffer, int32_t fence) 64 { 65 (void)buffer; 66 (void)fence; 67 return SURFACE_ERROR_NOT_SUPPORT; 68 } AcquireBuffer(sptr<SurfaceBuffer> & buffer,sptr<SyncFence> & fence,int64_t & timestamp,Rect & damage)69 virtual GSError AcquireBuffer(sptr<SurfaceBuffer>& buffer, sptr<SyncFence>& fence, 70 int64_t ×tamp, Rect &damage) 71 { 72 (void)buffer; 73 (void)fence; 74 (void)timestamp; 75 (void)damage; 76 return SURFACE_ERROR_NOT_SUPPORT; 77 } ReleaseBuffer(sptr<SurfaceBuffer> & buffer,const sptr<SyncFence> & fence)78 virtual GSError ReleaseBuffer(sptr<SurfaceBuffer>& buffer, const sptr<SyncFence>& fence) 79 { 80 (void)buffer; 81 (void)fence; 82 return SURFACE_ERROR_NOT_SUPPORT; 83 } AttachBuffer(sptr<SurfaceBuffer> & buffer)84 virtual GSError AttachBuffer(sptr<SurfaceBuffer>& buffer) 85 { 86 (void)buffer; 87 return SURFACE_ERROR_NOT_SUPPORT; 88 } DetachBuffer(sptr<SurfaceBuffer> & buffer)89 virtual GSError DetachBuffer(sptr<SurfaceBuffer>& buffer) 90 { 91 (void)buffer; 92 return SURFACE_ERROR_NOT_SUPPORT; 93 } GetQueueSize()94 virtual uint32_t GetQueueSize() 95 { 96 return 0; 97 } SetQueueSize(uint32_t queueSize)98 virtual GSError SetQueueSize(uint32_t queueSize) 99 { 100 (void)queueSize; 101 return SURFACE_ERROR_NOT_SUPPORT; 102 } SetDefaultWidthAndHeight(int32_t width,int32_t height)103 virtual GSError SetDefaultWidthAndHeight(int32_t width, int32_t height) 104 { 105 (void)width; 106 (void)height; 107 return SURFACE_ERROR_NOT_SUPPORT; 108 } GetDefaultWidth()109 virtual int32_t GetDefaultWidth() 110 { 111 return 0; 112 } GetDefaultHeight()113 virtual int32_t GetDefaultHeight() 114 { 115 return 0; 116 } SetDefaultUsage(uint64_t usage)117 virtual GSError SetDefaultUsage(uint64_t usage) 118 { 119 (void)usage; 120 return SURFACE_ERROR_NOT_SUPPORT; 121 } GetDefaultUsage()122 virtual uint64_t GetDefaultUsage() 123 { 124 return 0; 125 } SetUserData(const std::string & key,const std::string & val)126 virtual GSError SetUserData(const std::string &key, const std::string &val) 127 { 128 (void)key; 129 (void)val; 130 return SURFACE_ERROR_NOT_SUPPORT; 131 } GetUserData(const std::string & key)132 virtual std::string GetUserData(const std::string &key) 133 { 134 (void)key; 135 return ""; 136 } 137 virtual const std::string& GetName() = 0; GetUniqueId()138 virtual uint64_t GetUniqueId() const 139 { 140 return 0; 141 } RegisterConsumerListener(sptr<IBufferConsumerListener> & listener)142 virtual GSError RegisterConsumerListener(sptr<IBufferConsumerListener>& listener) 143 { 144 (void)listener; 145 return SURFACE_ERROR_NOT_SUPPORT; 146 } RegisterConsumerListener(IBufferConsumerListenerClazz * listener)147 virtual GSError RegisterConsumerListener(IBufferConsumerListenerClazz *listener) 148 { 149 (void)listener; 150 return SURFACE_ERROR_NOT_SUPPORT; 151 } UnregisterConsumerListener()152 virtual GSError UnregisterConsumerListener() 153 { 154 return SURFACE_ERROR_NOT_SUPPORT; 155 } GoBackground()156 virtual GSError GoBackground() 157 { 158 return SURFACE_ERROR_NOT_SUPPORT; 159 } SetTransform(GraphicTransformType transform)160 virtual GSError SetTransform(GraphicTransformType transform) 161 { 162 (void)transform; 163 return SURFACE_ERROR_NOT_SUPPORT; 164 } GetTransform()165 virtual GraphicTransformType GetTransform() const 166 { 167 return GraphicTransformType::GRAPHIC_ROTATE_NONE; 168 } SetScalingMode(uint32_t sequence,ScalingMode scalingMode)169 virtual GSError SetScalingMode(uint32_t sequence, ScalingMode scalingMode) 170 { 171 (void)sequence; 172 (void)scalingMode; 173 return SURFACE_ERROR_NOT_SUPPORT; 174 } GetScalingMode(uint32_t sequence,ScalingMode & scalingMode)175 virtual GSError GetScalingMode(uint32_t sequence, ScalingMode &scalingMode) 176 { 177 (void)sequence; 178 (void)scalingMode; 179 return SURFACE_ERROR_NOT_SUPPORT; 180 } SetMetaData(uint32_t sequence,const std::vector<GraphicHDRMetaData> & metaData)181 virtual GSError SetMetaData(uint32_t sequence, const std::vector<GraphicHDRMetaData> &metaData) 182 { 183 (void)sequence; 184 (void)metaData; 185 return SURFACE_ERROR_NOT_SUPPORT; 186 } SetMetaDataSet(uint32_t sequence,GraphicHDRMetadataKey key,const std::vector<uint8_t> & metaData)187 virtual GSError SetMetaDataSet(uint32_t sequence, GraphicHDRMetadataKey key, 188 const std::vector<uint8_t> &metaData) 189 { 190 (void)sequence; 191 (void)key; 192 (void)metaData; 193 return SURFACE_ERROR_NOT_SUPPORT; 194 } QueryMetaDataType(uint32_t sequence,HDRMetaDataType & type)195 virtual GSError QueryMetaDataType(uint32_t sequence, HDRMetaDataType &type) const 196 { 197 (void)sequence; 198 (void)type; 199 return SURFACE_ERROR_NOT_SUPPORT; 200 } GetMetaData(uint32_t sequence,std::vector<GraphicHDRMetaData> & metaData)201 virtual GSError GetMetaData(uint32_t sequence, std::vector<GraphicHDRMetaData> &metaData) const 202 { 203 (void)sequence; 204 (void)metaData; 205 return SURFACE_ERROR_NOT_SUPPORT; 206 } GetMetaDataSet(uint32_t sequence,GraphicHDRMetadataKey & key,std::vector<uint8_t> & metaData)207 virtual GSError GetMetaDataSet(uint32_t sequence, GraphicHDRMetadataKey &key, 208 std::vector<uint8_t> &metaData) const 209 { 210 (void)sequence; 211 (void)key; 212 (void)metaData; 213 return SURFACE_ERROR_NOT_SUPPORT; 214 } SetTunnelHandle(const GraphicExtDataHandle * handle)215 virtual GSError SetTunnelHandle(const GraphicExtDataHandle *handle) 216 { 217 (void)handle; 218 return SURFACE_ERROR_NOT_SUPPORT; 219 } GetTunnelHandle()220 virtual sptr<SurfaceTunnelHandle> GetTunnelHandle() const 221 { 222 return nullptr; 223 } SetPresentTimestamp(uint32_t sequence,const GraphicPresentTimestamp & timestamp)224 virtual GSError SetPresentTimestamp(uint32_t sequence, const GraphicPresentTimestamp ×tamp) 225 { 226 (void)sequence; 227 (void)timestamp; 228 return SURFACE_ERROR_NOT_SUPPORT; 229 } Dump(std::string & result)230 virtual void Dump(std::string &result) const 231 { 232 (void)result; 233 return; 234 } DumpCurrentFrameLayer()235 virtual void DumpCurrentFrameLayer() const 236 { 237 return; 238 } 239 virtual GSError AcquireBuffer(sptr<SurfaceBuffer>& buffer, sptr<SyncFence>& fence, 240 int64_t ×tamp, std::vector<Rect> &damages, bool isLppMode = false) 241 { 242 (void)buffer; 243 (void)fence; 244 (void)timestamp; 245 (void)damages; 246 (void)isLppMode; 247 return SURFACE_ERROR_NOT_SUPPORT; 248 } AcquireBuffer(AcquireBufferReturnValue & returnValue,int64_t expectPresentTimestamp,bool isUsingAutoTimestamp)249 virtual GSError AcquireBuffer(AcquireBufferReturnValue &returnValue, int64_t expectPresentTimestamp, 250 bool isUsingAutoTimestamp) 251 { 252 (void)returnValue; 253 (void)expectPresentTimestamp; 254 (void)isUsingAutoTimestamp; 255 return SURFACE_ERROR_NOT_SUPPORT; 256 } AttachBuffer(sptr<SurfaceBuffer> & buffer,int32_t timeOut)257 virtual GSError AttachBuffer(sptr<SurfaceBuffer>& buffer, int32_t timeOut) 258 { 259 (void)buffer; 260 (void)timeOut; 261 return SURFACE_ERROR_NOT_SUPPORT; 262 } RegisterSurfaceDelegator(sptr<IRemoteObject> client)263 virtual GSError RegisterSurfaceDelegator(sptr<IRemoteObject> client) 264 { 265 (void)client; 266 return SURFACE_ERROR_NOT_SUPPORT; 267 } ConsumerRequestCpuAccess(bool on)268 virtual void ConsumerRequestCpuAccess(bool on) 269 { 270 (void)on; 271 } AttachBufferToQueue(sptr<SurfaceBuffer> buffer)272 virtual GSError AttachBufferToQueue(sptr<SurfaceBuffer> buffer) 273 { 274 (void)buffer; 275 return SURFACE_ERROR_NOT_SUPPORT; 276 } 277 virtual GSError DetachBufferFromQueue(sptr<SurfaceBuffer> buffer, bool isReserveSlot = false) 278 { 279 (void)buffer; 280 (void)isReserveSlot; 281 return SURFACE_ERROR_NOT_SUPPORT; 282 } IsBufferHold()283 virtual bool IsBufferHold() 284 { 285 return false; 286 } SetScalingMode(ScalingMode scalingMode)287 virtual GSError SetScalingMode(ScalingMode scalingMode) 288 { 289 (void)scalingMode; 290 return SURFACE_ERROR_NOT_SUPPORT; 291 } GetHdrWhitePointBrightness()292 virtual float GetHdrWhitePointBrightness() const 293 { 294 return 0; 295 } GetSdrWhitePointBrightness()296 virtual float GetSdrWhitePointBrightness() const 297 { 298 return 0; 299 } GetSurfaceBufferTransformType(sptr<SurfaceBuffer> buffer,GraphicTransformType * transformType)300 virtual GSError GetSurfaceBufferTransformType(sptr<SurfaceBuffer> buffer, GraphicTransformType *transformType) 301 { 302 (void)buffer; 303 (void)transformType; 304 return SURFACE_ERROR_NOT_SUPPORT; 305 } IsSurfaceBufferInCache(uint32_t seqNum,bool & isInCache)306 virtual GSError IsSurfaceBufferInCache(uint32_t seqNum, bool &isInCache) 307 { 308 (void)seqNum; 309 (void)isInCache; 310 return SURFACE_ERROR_NOT_SUPPORT; 311 } GetGlobalAlpha(int32_t & alpha)312 virtual GSError GetGlobalAlpha(int32_t &alpha) 313 { 314 (void)alpha; 315 return SURFACE_ERROR_NOT_SUPPORT; 316 } GetAvailableBufferCount()317 virtual uint32_t GetAvailableBufferCount() const 318 { 319 return SURFACE_ERROR_NOT_SUPPORT; 320 } GetLastFlushedDesiredPresentTimeStamp(int64_t & lastFlushedDesiredPresentTimeStamp)321 virtual GSError GetLastFlushedDesiredPresentTimeStamp( 322 [[maybe_unused]] int64_t &lastFlushedDesiredPresentTimeStamp) const 323 { 324 return SURFACE_ERROR_NOT_SUPPORT; 325 } GetBufferSupportFastCompose(bool & bufferSupportFastCompose)326 virtual GSError GetBufferSupportFastCompose([[maybe_unused]] bool &bufferSupportFastCompose) 327 { 328 return SURFACE_ERROR_NOT_SUPPORT; 329 } SetBufferName(const std::string & name)330 virtual GSError SetBufferName(const std::string &name) 331 { 332 (void)name; 333 return GSERROR_NOT_SUPPORT; 334 } PreAllocBuffers(const BufferRequestConfig & config,uint32_t allocBufferCount)335 virtual GSError PreAllocBuffers(const BufferRequestConfig &config, uint32_t allocBufferCount) 336 { 337 (void)config; 338 (void)allocBufferCount; 339 return SURFACE_ERROR_NOT_SUPPORT; 340 } GetLastConsumeTime(int64_t & lastConsumeTime)341 virtual GSError GetLastConsumeTime(int64_t &lastConsumeTime) const 342 { 343 (void)lastConsumeTime; 344 return GSERROR_NOT_SUPPORT; 345 } SetMaxQueueSize(uint32_t queueSize)346 virtual GSError SetMaxQueueSize(uint32_t queueSize) 347 { 348 (void)queueSize; 349 return SURFACE_ERROR_NOT_SUPPORT; 350 } GetMaxQueueSize(uint32_t & queueSize)351 virtual GSError GetMaxQueueSize(uint32_t &queueSize) const 352 { 353 (void)queueSize; 354 return SURFACE_ERROR_NOT_SUPPORT; 355 } GetFrontDesiredPresentTimeStamp(int64_t & desiredPresentTimeStamp,bool & isAutoTimeStamp)356 virtual GSError GetFrontDesiredPresentTimeStamp( 357 int64_t &desiredPresentTimeStamp, bool &isAutoTimeStamp) const 358 { 359 (void)desiredPresentTimeStamp; 360 (void)isAutoTimeStamp; 361 return SURFACE_ERROR_NOT_SUPPORT; 362 } AcquireBuffer(AcquireBufferReturnValue & returnValue)363 virtual GSError AcquireBuffer(AcquireBufferReturnValue &returnValue) 364 { 365 (void)returnValue; 366 return SURFACE_ERROR_NOT_SUPPORT; 367 } ReleaseBuffer(uint32_t sequence,const sptr<SyncFence> & fence)368 virtual GSError ReleaseBuffer(uint32_t sequence, const sptr<SyncFence>& fence) 369 { 370 (void)sequence; 371 (void)fence; 372 return SURFACE_ERROR_NOT_SUPPORT; 373 } SetIsActiveGame(bool isActiveGame)374 virtual GSError SetIsActiveGame(bool isActiveGame) 375 { 376 (void)isActiveGame; 377 return SURFACE_ERROR_NOT_SUPPORT; 378 } SetLppDrawSource(bool isShbSource,bool isRsSource)379 virtual GSError SetLppDrawSource(bool isShbSource, bool isRsSource) 380 { 381 (void)isShbSource; 382 (void)isRsSource; 383 return SURFACE_ERROR_NOT_SUPPORT; 384 } SetIsPriorityAlloc(bool isPriorityAlloc)385 virtual GSError SetIsPriorityAlloc(bool isPriorityAlloc) 386 { 387 (void)isPriorityAlloc; 388 return SURFACE_ERROR_NOT_SUPPORT; 389 } 390 protected: 391 IConsumerSurface() = default; 392 }; 393 } // namespace OHOS 394 395 #endif // INTERFACES_INNERKITS_SURFACE_SURFACE_H 396