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 27namespace OHOS { 28class Surface : public RefBase { 29public: 30 static sptr<Surface> CreateSurfaceAsConsumer(std::string name = "noname", bool isShared = false); 31 static sptr<Surface> CreateSurfaceAsProducer(sptr<IBufferProducer>& producer); 32 33 virtual ~Surface() = default; 34 35 virtual GSError GetProducerInitInfo(ProducerInitInfo &info) = 0; 36 virtual bool IsConsumer() const = 0; 37 virtual sptr<IBufferProducer> GetProducer() const = 0; 38 39 virtual GSError RequestBuffer(sptr<SurfaceBuffer>& buffer, 40 int32_t &fence, BufferRequestConfig &config) = 0; 41 42 virtual GSError RequestBuffers(std::vector<sptr<SurfaceBuffer>> &buffers, 43 std::vector<sptr<SyncFence>> &fences, BufferRequestConfig &config) = 0; 44 45 virtual GSError CancelBuffer(sptr<SurfaceBuffer>& buffer) = 0; 46 47 virtual GSError FlushBuffer(sptr<SurfaceBuffer>& buffer, 48 int32_t fence, BufferFlushConfig &config) = 0; 49 50 virtual GSError AcquireBuffer(sptr<SurfaceBuffer>& buffer, int32_t &fence, 51 int64_t ×tamp, Rect &damage) = 0; 52 virtual GSError ReleaseBuffer(sptr<SurfaceBuffer>& buffer, int32_t fence) = 0; 53 54 virtual GSError RequestBuffer(sptr<SurfaceBuffer>& buffer, 55 sptr<SyncFence>& fence, BufferRequestConfig &config) = 0; 56 virtual GSError FlushBuffer(sptr<SurfaceBuffer>& buffer, 57 const sptr<SyncFence>& fence, BufferFlushConfig &config) = 0; 58 virtual GSError AcquireBuffer(sptr<SurfaceBuffer>& buffer, sptr<SyncFence>& fence, 59 int64_t ×tamp, Rect &damage) = 0; 60 virtual GSError ReleaseBuffer(sptr<SurfaceBuffer>& buffer, const sptr<SyncFence>& fence) = 0; 61 62 virtual GSError AttachBuffer(sptr<SurfaceBuffer>& buffer) = 0; 63 64 virtual GSError DetachBuffer(sptr<SurfaceBuffer>& buffer) = 0; 65 66 virtual uint32_t GetQueueSize() = 0; 67 virtual GSError SetQueueSize(uint32_t queueSize) = 0; 68 69 virtual GSError SetDefaultWidthAndHeight(int32_t width, int32_t height) = 0; 70 virtual int32_t GetDefaultWidth() = 0; 71 virtual int32_t GetDefaultHeight() = 0; 72 73 virtual GSError SetDefaultUsage(uint64_t usage) = 0; 74 virtual uint64_t GetDefaultUsage() = 0; 75 76 virtual GSError SetUserData(const std::string &key, const std::string &val) = 0; 77 virtual std::string GetUserData(const std::string &key) = 0; 78 79 virtual const std::string& GetName() = 0; 80 virtual uint64_t GetUniqueId() const = 0; 81 82 virtual GSError RegisterConsumerListener(sptr<IBufferConsumerListener>& listener) = 0; 83 virtual GSError RegisterConsumerListener(IBufferConsumerListenerClazz *listener) = 0; 84 virtual GSError RegisterReleaseListener(OnReleaseFunc func) = 0; 85 virtual GSError RegisterDeleteBufferListener(OnDeleteBufferFunc func, bool isForUniRedraw = false) = 0; 86 virtual GSError UnregisterConsumerListener() = 0; 87 88 // Call carefully. This interface will empty all caches of the current process 89 virtual GSError CleanCache(bool cleanAll = false) = 0; 90 virtual GSError GoBackground() = 0; 91 92 virtual GSError SetTransform(GraphicTransformType transform) = 0; 93 virtual GraphicTransformType GetTransform() const = 0; 94 95 virtual GSError IsSupportedAlloc(const std::vector<BufferVerifyAllocInfo> &infos, 96 std::vector<bool> &supporteds) = 0; 97 virtual GSError Connect() = 0; 98 virtual GSError Disconnect() = 0; 99 virtual GSError SetScalingMode(uint32_t sequence, ScalingMode scalingMode) = 0; 100 virtual GSError GetScalingMode(uint32_t sequence, ScalingMode &scalingMode) = 0; 101 virtual GSError SetMetaData(uint32_t sequence, const std::vector<GraphicHDRMetaData> &metaData) = 0; 102 virtual GSError SetMetaDataSet(uint32_t sequence, GraphicHDRMetadataKey key, 103 const std::vector<uint8_t> &metaData) = 0; 104 virtual GSError QueryMetaDataType(uint32_t sequence, HDRMetaDataType &type) const = 0; 105 virtual GSError GetMetaData(uint32_t sequence, std::vector<GraphicHDRMetaData> &metaData) const = 0; 106 virtual GSError GetMetaDataSet(uint32_t sequence, GraphicHDRMetadataKey &key, 107 std::vector<uint8_t> &metaData) const = 0; 108 virtual GSError SetTunnelHandle(const GraphicExtDataHandle *handle) = 0; 109 virtual sptr<SurfaceTunnelHandle> GetTunnelHandle() const = 0; 110 virtual GSError SetPresentTimestamp(uint32_t sequence, const GraphicPresentTimestamp ×tamp) = 0; 111 virtual GSError GetPresentTimestamp(uint32_t sequence, GraphicPresentTimestampType type, 112 int64_t &time) const = 0; 113 114 virtual void Dump(std::string &result) const = 0; 115 116 virtual int32_t GetDefaultFormat() = 0; 117 virtual GSError SetDefaultFormat(int32_t format) = 0; 118 virtual int32_t GetDefaultColorGamut() = 0; 119 virtual GSError SetDefaultColorGamut(int32_t colorGamut) = 0; 120 121 virtual sptr<NativeSurface> GetNativeSurface() = 0; 122 123 virtual bool QueryIfBufferAvailable() = 0; 124 virtual GSError FlushBuffer(sptr<SurfaceBuffer>& buffer, const sptr<SyncFence>& fence, 125 BufferFlushConfigWithDamages &config) = 0; 126 virtual GSError FlushBuffers(const std::vector<sptr<SurfaceBuffer>> &buffers, 127 const std::vector<sptr<SyncFence>> &fences, const std::vector<BufferFlushConfigWithDamages> &configs) = 0; 128 virtual GSError UnRegisterReleaseListener() = 0; 129 virtual GSError SetWptrNativeWindowToPSurface(void* nativeWindow) = 0; 130 virtual GSError GetLastFlushedBuffer(sptr<SurfaceBuffer>& buffer, 131 sptr<SyncFence>& fence, float matrix[16], bool isUseNewMatrix = false) = 0; 132 virtual GSError AttachBuffer(sptr<SurfaceBuffer>& buffer, int32_t timeOut) = 0; 133 virtual GSError RegisterSurfaceDelegator(sptr<IRemoteObject> client) = 0; 134 virtual GSError RegisterReleaseListener(OnReleaseFuncWithFence func) = 0; 135 virtual GSError RegisterUserDataChangeListener(const std::string &funcName, OnUserDataChangeFunc func) = 0; 136 virtual GSError UnRegisterUserDataChangeListener(const std::string &funcName) = 0; 137 virtual GSError ClearUserDataChangeListener() = 0; 138 139 virtual GSError AttachBufferToQueue(sptr<SurfaceBuffer> buffer) = 0; 140 virtual GSError DetachBufferFromQueue(sptr<SurfaceBuffer> buffer) = 0; 141 142 virtual GraphicTransformType GetTransformHint() const = 0; 143 virtual GSError SetTransformHint(GraphicTransformType transformHint) = 0; 144 145 virtual void SetRequestWidthAndHeight(int32_t width, int32_t height) = 0; 146 virtual int32_t GetRequestWidth() = 0; 147 virtual int32_t GetRequestHeight() = 0; 148 149 virtual void SetBufferHold(bool hold) = 0; 150 virtual void SetWindowConfig(const BufferRequestConfig& config) 151 { 152 (void)config; 153 } 154 virtual void SetWindowConfigWidthAndHeight(int32_t width, int32_t height) 155 { 156 (void)width; 157 (void)height; 158 } 159 virtual void SetWindowConfigStride(int32_t stride) 160 { 161 (void)stride; 162 } 163 virtual void SetWindowConfigFormat(int32_t format) 164 { 165 (void)format; 166 } 167 virtual void SetWindowConfigUsage(uint64_t usage) 168 { 169 (void)usage; 170 } 171 virtual void SetWindowConfigTimeout(int32_t timeout) 172 { 173 (void)timeout; 174 } 175 virtual void SetWindowConfigColorGamut(GraphicColorGamut colorGamut) 176 { 177 (void)colorGamut; 178 } 179 virtual void SetWindowConfigTransform(GraphicTransformType transform) 180 { 181 (void)transform; 182 } 183 virtual BufferRequestConfig GetWindowConfig() 184 { 185 BufferRequestConfig config; 186 return config; 187 } 188 virtual GSError SetScalingMode(ScalingMode scalingMode) = 0; 189 virtual GSError SetSurfaceSourceType(OHSurfaceSource sourceType) = 0; 190 virtual OHSurfaceSource GetSurfaceSourceType() const = 0; 191 virtual GSError SetSurfaceAppFrameworkType(std::string appFrameworkType) = 0; 192 virtual std::string GetSurfaceAppFrameworkType() const = 0; 193 virtual GSError SetHdrWhitePointBrightness(float brightness) = 0; 194 virtual GSError SetSdrWhitePointBrightness(float brightness) = 0; 195 virtual GSError AcquireLastFlushedBuffer(sptr<SurfaceBuffer> &buffer, sptr<SyncFence> &fence, 196 float matrix[16], uint32_t matrixSize, bool isUseNewMatrix) 197 { 198 (void)buffer; 199 (void)fence; 200 (void)matrix; 201 (void)matrixSize; 202 (void)isUseNewMatrix; 203 return SURFACE_ERROR_NOT_SUPPORT; 204 }; 205 virtual GSError ReleaseLastFlushedBuffer(sptr<SurfaceBuffer> buffer) 206 { 207 (void)buffer; 208 return SURFACE_ERROR_NOT_SUPPORT; 209 }; 210 virtual GSError SetGlobalAlpha(int32_t alpha) = 0; 211 virtual bool IsInHebcList() 212 { 213 return false; 214 } 215protected: 216 Surface() = default; 217}; 218} // namespace OHOS 219 220#endif // INTERFACES_INNERKITS_SURFACE_SURFACE_H 221