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 }; 37 static sptr<IConsumerSurface> Create(std::string name = "noname"); 38 39 virtual ~IConsumerSurface() = default; 40 41 virtual bool IsConsumer() const = 0; 42 virtual sptr<IBufferProducer> GetProducer() const = 0; 43 44 virtual GSError AcquireBuffer(sptr<SurfaceBuffer>& buffer, int32_t &fence, 45 int64_t ×tamp, Rect &damage) = 0; 46 virtual GSError ReleaseBuffer(sptr<SurfaceBuffer>& buffer, int32_t fence) = 0; 47 48 virtual GSError AcquireBuffer(sptr<SurfaceBuffer>& buffer, sptr<SyncFence>& fence, 49 int64_t ×tamp, Rect &damage) = 0; 50 virtual GSError ReleaseBuffer(sptr<SurfaceBuffer>& buffer, const sptr<SyncFence>& fence) = 0; 51 52 virtual GSError AttachBuffer(sptr<SurfaceBuffer>& buffer) = 0; 53 54 virtual GSError DetachBuffer(sptr<SurfaceBuffer>& buffer) = 0; 55 56 virtual uint32_t GetQueueSize() = 0; 57 virtual GSError SetQueueSize(uint32_t queueSize) = 0; 58 59 virtual GSError SetDefaultWidthAndHeight(int32_t width, int32_t height) = 0; 60 virtual int32_t GetDefaultWidth() = 0; 61 virtual int32_t GetDefaultHeight() = 0; 62 63 virtual GSError SetDefaultUsage(uint64_t usage) = 0; 64 virtual uint64_t GetDefaultUsage() = 0; 65 66 virtual GSError SetUserData(const std::string &key, const std::string &val) = 0; 67 virtual std::string GetUserData(const std::string &key) = 0; 68 69 virtual const std::string& GetName() = 0; 70 virtual uint64_t GetUniqueId() const = 0; 71 72 virtual GSError RegisterConsumerListener(sptr<IBufferConsumerListener>& listener) = 0; 73 virtual GSError RegisterConsumerListener(IBufferConsumerListenerClazz *listener) = 0; 74 virtual GSError UnregisterConsumerListener() = 0; 75 76 virtual GSError GoBackground() = 0; 77 78 virtual GSError SetTransform(GraphicTransformType transform) = 0; 79 virtual GraphicTransformType GetTransform() const = 0; 80 81 virtual GSError SetScalingMode(uint32_t sequence, ScalingMode scalingMode) = 0; 82 virtual GSError GetScalingMode(uint32_t sequence, ScalingMode &scalingMode) = 0; 83 virtual GSError SetMetaData(uint32_t sequence, const std::vector<GraphicHDRMetaData> &metaData) = 0; 84 virtual GSError SetMetaDataSet(uint32_t sequence, GraphicHDRMetadataKey key, 85 const std::vector<uint8_t> &metaData) = 0; 86 virtual GSError QueryMetaDataType(uint32_t sequence, HDRMetaDataType &type) const = 0; 87 virtual GSError GetMetaData(uint32_t sequence, std::vector<GraphicHDRMetaData> &metaData) const = 0; 88 virtual GSError GetMetaDataSet(uint32_t sequence, GraphicHDRMetadataKey &key, 89 std::vector<uint8_t> &metaData) const = 0; 90 virtual GSError SetTunnelHandle(const GraphicExtDataHandle *handle) = 0; 91 virtual sptr<SurfaceTunnelHandle> GetTunnelHandle() const = 0; 92 virtual GSError SetPresentTimestamp(uint32_t sequence, const GraphicPresentTimestamp ×tamp) = 0; 93 virtual void Dump(std::string &result) const = 0; 94 virtual GSError AcquireBuffer(sptr<SurfaceBuffer>& buffer, sptr<SyncFence>& fence, 95 int64_t ×tamp, std::vector<Rect> &damages) = 0; AcquireBuffer(AcquireBufferReturnValue & returnValue,int64_t expectPresentTimestamp,bool isUsingAutoTimestamp)96 virtual GSError AcquireBuffer(AcquireBufferReturnValue &returnValue, int64_t expectPresentTimestamp, 97 bool isUsingAutoTimestamp) 98 { 99 (void)returnValue; 100 (void)expectPresentTimestamp; 101 (void)isUsingAutoTimestamp; 102 return SURFACE_ERROR_NOT_SUPPORT; 103 }; 104 virtual GSError AttachBuffer(sptr<SurfaceBuffer>& buffer, int32_t timeOut) = 0; 105 virtual GSError RegisterSurfaceDelegator(sptr<IRemoteObject> client) = 0; 106 virtual void ConsumerRequestCpuAccess(bool on) = 0; 107 virtual GSError AttachBufferToQueue(sptr<SurfaceBuffer> buffer) = 0; 108 virtual GSError DetachBufferFromQueue(sptr<SurfaceBuffer> buffer, bool isReserveSlot = false) = 0; 109 virtual bool IsBufferHold() = 0; 110 virtual GSError SetScalingMode(ScalingMode scalingMode) = 0; 111 virtual float GetHdrWhitePointBrightness() const = 0; 112 virtual float GetSdrWhitePointBrightness() const = 0; 113 114 virtual GSError GetSurfaceBufferTransformType(sptr<SurfaceBuffer> buffer, GraphicTransformType *transformType) = 0; 115 116 virtual GSError IsSurfaceBufferInCache(uint32_t seqNum, bool &isInCache) = 0; GetGlobalAlpha(int32_t & alpha)117 virtual GSError GetGlobalAlpha(int32_t &alpha) 118 { 119 (void)alpha; 120 return SURFACE_ERROR_NOT_SUPPORT; 121 } GetAvailableBufferCount()122 virtual uint32_t GetAvailableBufferCount() const 123 { 124 return SURFACE_ERROR_NOT_SUPPORT; 125 }; GetLastFlushedDesiredPresentTimeStamp(int64_t & lastFlushedDesiredPresentTimeStamp)126 virtual GSError GetLastFlushedDesiredPresentTimeStamp( 127 [[maybe_unused]] int64_t &lastFlushedDesiredPresentTimeStamp) const 128 { 129 return SURFACE_ERROR_NOT_SUPPORT; 130 }; GetBufferSupportFastCompose(bool & bufferSupportFastCompose)131 virtual GSError GetBufferSupportFastCompose([[maybe_unused]] bool &bufferSupportFastCompose) 132 { 133 return SURFACE_ERROR_NOT_SUPPORT; 134 }; SetBufferName(const std::string & name)135 virtual GSError SetBufferName(const std::string &name) 136 { 137 (void)name; 138 return GSERROR_NOT_SUPPORT; 139 } GetLastConsumeTime(int64_t & lastConsumeTime)140 virtual GSError GetLastConsumeTime(int64_t &lastConsumeTime) const 141 { 142 (void)lastConsumeTime; 143 return GSERROR_NOT_SUPPORT; 144 } 145 protected: 146 IConsumerSurface() = default; 147 }; 148 } // namespace OHOS 149 150 #endif // INTERFACES_INNERKITS_SURFACE_SURFACE_H 151