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", bool isShared = false); 38 39 virtual ~IConsumerSurface() = default; 40 41 virtual bool IsConsumer() const = 0; 42 virtual sptr<IBufferProducer> GetProducer() const = 0; 43 44 virtual GSError RequestBuffer(sptr<SurfaceBuffer>& buffer, 45 int32_t &fence, BufferRequestConfig &config) = 0; 46 47 virtual GSError CancelBuffer(sptr<SurfaceBuffer>& buffer) = 0; 48 49 virtual GSError FlushBuffer(sptr<SurfaceBuffer>& buffer, 50 int32_t fence, BufferFlushConfig &config) = 0; 51 52 virtual GSError AcquireBuffer(sptr<SurfaceBuffer>& buffer, int32_t &fence, 53 int64_t ×tamp, Rect &damage) = 0; 54 virtual GSError ReleaseBuffer(sptr<SurfaceBuffer>& buffer, int32_t fence) = 0; 55 56 virtual GSError RequestBuffer(sptr<SurfaceBuffer>& buffer, 57 sptr<SyncFence>& fence, BufferRequestConfig &config) = 0; 58 virtual GSError FlushBuffer(sptr<SurfaceBuffer>& buffer, 59 const sptr<SyncFence>& fence, BufferFlushConfig &config) = 0; 60 virtual GSError AcquireBuffer(sptr<SurfaceBuffer>& buffer, sptr<SyncFence>& fence, 61 int64_t ×tamp, Rect &damage) = 0; 62 virtual GSError ReleaseBuffer(sptr<SurfaceBuffer>& buffer, const sptr<SyncFence>& fence) = 0; 63 64 virtual GSError AttachBuffer(sptr<SurfaceBuffer>& buffer) = 0; 65 66 virtual GSError DetachBuffer(sptr<SurfaceBuffer>& buffer) = 0; 67 68 virtual uint32_t GetQueueSize() = 0; 69 virtual GSError SetQueueSize(uint32_t queueSize) = 0; 70 71 virtual GSError SetDefaultWidthAndHeight(int32_t width, int32_t height) = 0; 72 virtual int32_t GetDefaultWidth() = 0; 73 virtual int32_t GetDefaultHeight() = 0; 74 75 virtual GSError SetDefaultUsage(uint64_t usage) = 0; 76 virtual uint64_t GetDefaultUsage() = 0; 77 78 virtual GSError SetUserData(const std::string &key, const std::string &val) = 0; 79 virtual std::string GetUserData(const std::string &key) = 0; 80 81 virtual const std::string& GetName() = 0; 82 virtual uint64_t GetUniqueId() const = 0; 83 84 virtual GSError RegisterConsumerListener(sptr<IBufferConsumerListener>& listener) = 0; 85 virtual GSError RegisterConsumerListener(IBufferConsumerListenerClazz *listener) = 0; 86 virtual GSError RegisterReleaseListener(OnReleaseFunc func) = 0; 87 virtual GSError RegisterDeleteBufferListener(OnDeleteBufferFunc func, bool isForUniRedraw = false) = 0; 88 virtual GSError UnregisterConsumerListener() = 0; 89 90 // Call carefully. This interface will empty all caches of the current process 91 virtual GSError CleanCache(bool cleanAll = false) = 0; 92 virtual GSError GoBackground() = 0; 93 94 virtual GSError SetTransform(GraphicTransformType transform) = 0; 95 virtual GraphicTransformType GetTransform() const = 0; 96 97 virtual GSError IsSupportedAlloc(const std::vector<BufferVerifyAllocInfo> &infos, 98 std::vector<bool> &supporteds) = 0; 99 virtual GSError Connect() = 0; 100 virtual GSError Disconnect() = 0; 101 virtual GSError SetScalingMode(uint32_t sequence, ScalingMode scalingMode) = 0; 102 virtual GSError GetScalingMode(uint32_t sequence, ScalingMode &scalingMode) = 0; 103 virtual GSError SetMetaData(uint32_t sequence, const std::vector<GraphicHDRMetaData> &metaData) = 0; 104 virtual GSError SetMetaDataSet(uint32_t sequence, GraphicHDRMetadataKey key, 105 const std::vector<uint8_t> &metaData) = 0; 106 virtual GSError QueryMetaDataType(uint32_t sequence, HDRMetaDataType &type) const = 0; 107 virtual GSError GetMetaData(uint32_t sequence, std::vector<GraphicHDRMetaData> &metaData) const = 0; 108 virtual GSError GetMetaDataSet(uint32_t sequence, GraphicHDRMetadataKey &key, 109 std::vector<uint8_t> &metaData) const = 0; 110 virtual GSError SetTunnelHandle(const GraphicExtDataHandle *handle) = 0; 111 virtual sptr<SurfaceTunnelHandle> GetTunnelHandle() const = 0; 112 virtual GSError SetPresentTimestamp(uint32_t sequence, const GraphicPresentTimestamp ×tamp) = 0; 113 virtual GSError GetPresentTimestamp(uint32_t sequence, GraphicPresentTimestampType type, 114 int64_t &time) const = 0; 115 virtual void Dump(std::string &result) const = 0; 116 117 virtual int32_t GetDefaultFormat() = 0; 118 virtual GSError SetDefaultFormat(int32_t format) = 0; 119 virtual int32_t GetDefaultColorGamut() = 0; 120 virtual GSError SetDefaultColorGamut(int32_t colorGamut) = 0; 121 122 virtual sptr<NativeSurface> GetNativeSurface() = 0; 123 124 virtual bool QueryIfBufferAvailable() = 0; 125 126 virtual GSError AcquireBuffer(sptr<SurfaceBuffer>& buffer, sptr<SyncFence>& fence, 127 int64_t ×tamp, std::vector<Rect> &damages) = 0; AcquireBuffer(AcquireBufferReturnValue & returnValue,int64_t expectPresentTimestamp,bool isUsingAutoTimestamp)128 virtual GSError AcquireBuffer(AcquireBufferReturnValue &returnValue, int64_t expectPresentTimestamp, 129 bool isUsingAutoTimestamp) 130 { 131 (void)returnValue; 132 (void)expectPresentTimestamp; 133 (void)isUsingAutoTimestamp; 134 return SURFACE_ERROR_NOT_SUPPORT; 135 }; 136 virtual GSError FlushBuffer(sptr<SurfaceBuffer>& buffer, const sptr<SyncFence>& fence, 137 BufferFlushConfigWithDamages &config) = 0; 138 virtual GSError SetWptrNativeWindowToPSurface(void* nativeWindow) = 0; 139 virtual GSError GetLastFlushedBuffer(sptr<SurfaceBuffer>& buffer, 140 sptr<SyncFence>& fence, float matrix[16], bool isUseNewMatrix) = 0; 141 virtual GSError AttachBuffer(sptr<SurfaceBuffer>& buffer, int32_t timeOut) = 0; 142 virtual GSError RegisterSurfaceDelegator(sptr<IRemoteObject> client) = 0; 143 virtual GSError RegisterReleaseListener(OnReleaseFuncWithFence func) = 0; 144 virtual void ConsumerRequestCpuAccess(bool on) = 0; 145 virtual GSError AttachBufferToQueue(sptr<SurfaceBuffer> buffer) = 0; 146 virtual GSError DetachBufferFromQueue(sptr<SurfaceBuffer> buffer) = 0; 147 virtual bool IsBufferHold() = 0; 148 virtual GSError SetScalingMode(ScalingMode scalingMode) = 0; 149 virtual float GetHdrWhitePointBrightness() const = 0; 150 virtual float GetSdrWhitePointBrightness() const = 0; 151 152 virtual GSError GetSurfaceBufferTransformType(sptr<SurfaceBuffer> buffer, GraphicTransformType *transformType) = 0; 153 154 virtual GSError IsSurfaceBufferInCache(uint32_t seqNum, bool &isInCache) = 0; AcquireLastFlushedBuffer(sptr<SurfaceBuffer> & buffer,sptr<SyncFence> & fence,float matrix[16],uint32_t matrixSize,bool isUseNewMatrix)155 virtual GSError AcquireLastFlushedBuffer(sptr<SurfaceBuffer> &buffer, sptr<SyncFence> &fence, 156 float matrix[16], uint32_t matrixSize, bool isUseNewMatrix) 157 { 158 (void)buffer; 159 (void)fence; 160 (void)matrix; 161 (void)matrixSize; 162 (void)isUseNewMatrix; 163 return SURFACE_ERROR_NOT_SUPPORT; 164 }; ReleaseLastFlushedBuffer(sptr<SurfaceBuffer> buffer)165 virtual GSError ReleaseLastFlushedBuffer(sptr<SurfaceBuffer> buffer) 166 { 167 (void)buffer; 168 return SURFACE_ERROR_NOT_SUPPORT; 169 }; GetAvailableBufferCount()170 virtual uint32_t GetAvailableBufferCount() const 171 { 172 return SURFACE_ERROR_NOT_SUPPORT; 173 }; 174 protected: 175 IConsumerSurface() = default; 176 }; 177 } // namespace OHOS 178 179 #endif // INTERFACES_INNERKITS_SURFACE_SURFACE_H 180