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_IBUFFER_PRODUCER_H 17 #define INTERFACES_INNERKITS_SURFACE_IBUFFER_PRODUCER_H 18 19 #include <string> 20 #include <vector> 21 22 #include "iremote_broker.h" 23 24 #include "buffer_extra_data.h" 25 #include "ibuffer_producer_listener.h" 26 #include "native_surface.h" 27 #include "surface_buffer.h" 28 #include "surface_type.h" 29 #include "external_window.h" 30 31 namespace OHOS { 32 class SyncFence; 33 class IBufferProducerToken : public IRemoteBroker { 34 public: 35 DECLARE_INTERFACE_DESCRIPTOR(u"surf.IBufferProducerToken"); 36 37 IBufferProducerToken() = default; 38 virtual ~IBufferProducerToken() noexcept = default; 39 }; 40 class IBufferProducer : public IRemoteBroker { 41 public: 42 struct RequestBufferReturnValue { 43 uint32_t sequence; 44 sptr<SurfaceBuffer> buffer; 45 sptr<SyncFence> fence; 46 std::vector<uint32_t> deletingBuffers; 47 bool isConnected; 48 }; 49 virtual GSError GetProducerInitInfo(ProducerInitInfo &info) = 0; 50 51 virtual GSError RequestBuffer(const BufferRequestConfig &config, sptr<BufferExtraData> &bedata, 52 RequestBufferReturnValue &retval) = 0; 53 54 virtual GSError RequestBuffers(const BufferRequestConfig &config, std::vector<sptr<BufferExtraData>> &bedata, 55 std::vector<RequestBufferReturnValue> &retvalues) = 0; 56 57 virtual GSError CancelBuffer(uint32_t sequence, sptr<BufferExtraData> bedata) = 0; 58 59 virtual GSError FlushBuffer(uint32_t sequence, sptr<BufferExtraData> bedata, 60 sptr<SyncFence> fence, BufferFlushConfigWithDamages &config) = 0; 61 62 virtual GSError FlushBuffers(const std::vector<uint32_t> &sequences, 63 const std::vector<sptr<BufferExtraData>> &bedata, 64 const std::vector<sptr<SyncFence>> &fences, 65 const std::vector<BufferFlushConfigWithDamages> &configs) = 0; 66 67 virtual GSError AttachBuffer(sptr<SurfaceBuffer>& buffer) = 0; 68 virtual GSError DetachBuffer(sptr<SurfaceBuffer>& buffer) = 0; 69 70 virtual uint32_t GetQueueSize() = 0; 71 virtual GSError SetQueueSize(uint32_t queueSize) = 0; 72 73 virtual GSError GetName(std::string &name) = 0; 74 virtual uint64_t GetUniqueId() = 0; 75 virtual GSError GetNameAndUniqueId(std::string& name, uint64_t& uniqueId) = 0; 76 77 virtual int32_t GetDefaultWidth() = 0; 78 virtual int32_t GetDefaultHeight() = 0; 79 virtual GSError SetDefaultUsage(uint64_t usage) = 0; 80 virtual uint64_t GetDefaultUsage() = 0; 81 82 virtual GSError CleanCache(bool cleanAll = false, uint32_t *bufSeqNum = nullptr) = 0; 83 virtual GSError GoBackground() = 0; 84 85 virtual GSError RegisterReleaseListener(sptr<IProducerListener> listener) = 0; RegisterReleaseListenerBackup(sptr<IProducerListener> listener)86 virtual GSError RegisterReleaseListenerBackup(sptr<IProducerListener> listener) 87 { 88 (void)listener; 89 return GSERROR_OK; 90 } 91 92 virtual GSError RegisterPropertyListener(sptr<IProducerListener> listener, uint64_t producerId) =0; 93 virtual GSError UnRegisterPropertyListener(uint64_t producerId) = 0; 94 95 virtual GSError SetTransform(GraphicTransformType transform) = 0; 96 97 virtual GSError Connect() = 0; 98 virtual GSError Disconnect(uint32_t *bufSeqNum = nullptr) = 0; 99 100 virtual GSError SetScalingMode(uint32_t sequence, ScalingMode scalingMode) = 0; 101 virtual GSError SetBufferHold(bool hold) = 0; SetBufferName(const std::string & bufferName)102 virtual GSError SetBufferName(const std::string &bufferName) 103 { 104 (void)bufferName; 105 return GSERROR_NOT_SUPPORT; 106 } 107 virtual GSError SetMetaData(uint32_t sequence, const std::vector<GraphicHDRMetaData> &metaData) = 0; 108 virtual GSError SetMetaDataSet(uint32_t sequence, GraphicHDRMetadataKey key, 109 const std::vector<uint8_t> &metaData) = 0; 110 virtual GSError SetTunnelHandle(const GraphicExtDataHandle *handle) = 0; 111 virtual GSError GetPresentTimestamp(uint32_t sequence, GraphicPresentTimestampType type, int64_t &time) = 0; 112 113 virtual sptr<NativeSurface> GetNativeSurface() = 0; 114 virtual GSError UnRegisterReleaseListener() = 0; UnRegisterReleaseListenerBackup()115 virtual GSError UnRegisterReleaseListenerBackup() 116 { 117 return GSERROR_OK; 118 } 119 virtual GSError GetLastFlushedBuffer(sptr<SurfaceBuffer>& buffer, 120 sptr<SyncFence>& fence, float matrix[16], bool isUseNewMatrix) = 0; 121 virtual GSError AttachBuffer(sptr<SurfaceBuffer>& buffer, int32_t timeOut) = 0; 122 123 virtual GSError GetTransform(GraphicTransformType &transform) = 0; 124 125 virtual GSError AttachBufferToQueue(sptr<SurfaceBuffer> buffer) = 0; 126 virtual GSError DetachBufferFromQueue(sptr<SurfaceBuffer> buffer) = 0; 127 virtual GSError GetTransformHint(GraphicTransformType &transformHint) = 0; 128 virtual GSError SetTransformHint(GraphicTransformType transformHint, uint64_t fromId) = 0; 129 virtual GSError SetScalingMode(ScalingMode scalingMode) = 0; 130 131 virtual GSError SetSurfaceSourceType(OHSurfaceSource sourceType) = 0; 132 virtual GSError GetSurfaceSourceType(OHSurfaceSource &sourceType) = 0; 133 134 virtual GSError SetSurfaceAppFrameworkType(std::string appFrameworkType) = 0; 135 virtual GSError GetSurfaceAppFrameworkType(std::string &appFrameworkType) = 0; 136 137 virtual GSError SetHdrWhitePointBrightness(float brightness) = 0; 138 virtual GSError SetSdrWhitePointBrightness(float brightness) = 0; AcquireLastFlushedBuffer(sptr<SurfaceBuffer> & buffer,sptr<SyncFence> & fence,float matrix[16],uint32_t matrixSize,bool isUseNewMatrix)139 virtual GSError AcquireLastFlushedBuffer(sptr<SurfaceBuffer> &buffer, sptr<SyncFence> &fence, 140 float matrix[16], uint32_t matrixSize, bool isUseNewMatrix) 141 { 142 (void)buffer; 143 (void)fence; 144 (void)matrix; 145 (void)matrixSize; 146 (void)isUseNewMatrix; 147 return SURFACE_ERROR_NOT_SUPPORT; 148 }; ReleaseLastFlushedBuffer(uint32_t sequence)149 virtual GSError ReleaseLastFlushedBuffer(uint32_t sequence) 150 { 151 (void)sequence; 152 return SURFACE_ERROR_NOT_SUPPORT; 153 }; SetGlobalAlpha(int32_t alpha)154 virtual GSError SetGlobalAlpha(int32_t alpha) 155 { 156 (void)alpha; 157 return SURFACE_ERROR_NOT_SUPPORT; 158 }; RequestAndDetachBuffer(const BufferRequestConfig & config,sptr<BufferExtraData> & bedata,RequestBufferReturnValue & retval)159 virtual GSError RequestAndDetachBuffer(const BufferRequestConfig& config, sptr<BufferExtraData>& bedata, 160 RequestBufferReturnValue& retval) 161 { 162 (void)config; 163 (void)bedata; 164 (void)retval; 165 return SURFACE_ERROR_NOT_SUPPORT; 166 } AttachAndFlushBuffer(sptr<SurfaceBuffer> & buffer,sptr<BufferExtraData> & bedata,const sptr<SyncFence> & fence,BufferFlushConfigWithDamages & config,bool needMap)167 virtual GSError AttachAndFlushBuffer(sptr<SurfaceBuffer>& buffer, sptr<BufferExtraData>& bedata, 168 const sptr<SyncFence>& fence, BufferFlushConfigWithDamages& config, bool needMap) 169 { 170 (void)buffer; 171 (void)bedata; 172 (void)fence; 173 (void)config; 174 (void)needMap; 175 return SURFACE_ERROR_NOT_SUPPORT; 176 } GetCycleBuffersNumber(uint32_t & cycleBuffersNumber)177 virtual GSError GetCycleBuffersNumber(uint32_t& cycleBuffersNumber) 178 { 179 (void)cycleBuffersNumber; 180 return SURFACE_ERROR_NOT_SUPPORT; 181 } SetCycleBuffersNumber(uint32_t cycleBuffersNumber)182 virtual GSError SetCycleBuffersNumber(uint32_t cycleBuffersNumber) 183 { 184 (void)cycleBuffersNumber; 185 return SURFACE_ERROR_NOT_SUPPORT; 186 } 187 188 /** 189 * @brief In the strictly disconnected state, the producer must call the ConnectStrictly() interface before request 190 * buffer. Unlike Connect(), ConnectStrictly() does not distinguish between process IDs (PIDs) and is 191 * suitable for stricter connection management scenarios. 192 */ ConnectStrictly()193 virtual GSError ConnectStrictly() 194 { 195 return SURFACE_ERROR_NOT_SUPPORT; 196 } 197 198 /** 199 * @brief After calling DisconnectStrictly(), the consumer (server) enter the strictly disconnected state. 200 * In this state, any attempt by the producer (client) to request buffer will fail and return the error code 201 * GSERROR_CONSUMER_DISCONNECTED. 202 */ DisconnectStrictly()203 virtual GSError DisconnectStrictly() 204 { 205 return SURFACE_ERROR_NOT_SUPPORT; 206 } 207 DECLARE_INTERFACE_DESCRIPTOR(u"surf.IBufferProducer"); 208 209 protected: 210 enum { 211 BUFFER_PRODUCER_REQUEST_BUFFER = 0, 212 BUFFER_PRODUCER_CANCEL_BUFFER, 213 BUFFER_PRODUCER_FLUSH_BUFFER, 214 BUFFER_PRODUCER_GET_QUEUE_SIZE, 215 BUFFER_PRODUCER_SET_QUEUE_SIZE, 216 BUFFER_PRODUCER_GET_NAME, 217 BUFFER_PRODUCER_GET_DEFAULT_WIDTH, 218 BUFFER_PRODUCER_GET_DEFAULT_HEIGHT, 219 BUFFER_PRODUCER_GET_DEFAULT_USAGE, 220 BUFFER_PRODUCER_CLEAN_CACHE, 221 BUFFER_PRODUCER_ATTACH_BUFFER, 222 BUFFER_PRODUCER_DETACH_BUFFER, 223 BUFFER_PRODUCER_REGISTER_RELEASE_LISTENER, 224 BUFFER_PRODUCER_GET_UNIQUE_ID, 225 BUFFER_PRODUCER_SET_TRANSFORM, 226 BUFFER_PRODUCER_GET_NAMEANDUNIQUEDID, 227 BUFFER_PRODUCER_DISCONNECT, 228 BUFFER_PRODUCER_SET_SCALING_MODE, 229 BUFFER_PRODUCER_SET_METADATA, 230 BUFFER_PRODUCER_SET_METADATASET, 231 BUFFER_PRODUCER_SET_TUNNEL_HANDLE, 232 BUFFER_PRODUCER_GO_BACKGROUND, 233 BUFFER_PRODUCER_GET_PRESENT_TIMESTAMP, 234 BUFFER_PRODUCER_UNREGISTER_RELEASE_LISTENER, 235 BUFFER_PRODUCER_GET_LAST_FLUSHED_BUFFER, 236 BUFFER_PRODUCER_GET_TRANSFORM, 237 BUFFER_PRODUCER_ATTACH_BUFFER_TO_QUEUE, 238 BUFFER_PRODUCER_DETACH_BUFFER_FROM_QUEUE, 239 BUFFER_PRODUCER_SET_DEFAULT_USAGE, 240 BUFFER_PRODUCER_GET_TRANSFORMHINT, 241 BUFFER_PRODUCER_SET_TRANSFORMHINT, 242 BUFFER_PRODUCER_SET_BUFFER_HOLD, 243 BUFFER_PRODUCER_SET_SOURCE_TYPE, 244 BUFFER_PRODUCER_GET_SOURCE_TYPE, 245 BUFFER_PRODUCER_SET_APP_FRAMEWORK_TYPE, 246 BUFFER_PRODUCER_GET_APP_FRAMEWORK_TYPE, 247 BUFFER_PRODUCER_SET_SCALING_MODEV2, 248 BUFFER_PRODUCER_SET_HDRWHITEPOINTBRIGHTNESS, 249 BUFFER_PRODUCER_SET_SDRWHITEPOINTBRIGHTNESS, 250 BUFFER_PRODUCER_REQUEST_BUFFERS, 251 BUFFER_PRODUCER_FLUSH_BUFFERS, 252 BUFFER_PRODUCER_GET_INIT_INFO, 253 BUFFER_PRODUCER_CONNECT, 254 BUFFER_PRODUCER_ACQUIRE_LAST_FLUSHED_BUFFER, 255 BUFFER_PRODUCER_RELEASE_LAST_FLUSHED_BUFFER, 256 BUFFER_PRODUCER_SET_GLOBALALPHA, 257 BUFFER_PRODUCER_REGISTER_RELEASE_LISTENER_BACKUP, 258 BUFFER_PRODUCER_UNREGISTER_RELEASE_LISTENER_BACKUP, 259 BUFFER_PRODUCER_REQUEST_AND_DETACH_BUFFER, 260 BUFFER_PRODUCER_ATTACH_AND_FLUSH_BUFFER, 261 BUFFER_PRODUCER_SET_BUFFER_NAME, 262 BUFFER_PRODUCER_GET_ROTATING_BUFFERS_NUMBER, 263 BUFFER_PRODUCER_SET_ROTATING_BUFFERS_NUMBER, 264 BUFFER_PRODUCER_CONNECT_STRICTLY, 265 BUFFER_PRODUCER_DISCONNECT_STRICTLY, 266 BUFFER_PRODUCER_REGISTER_PROPERTY_LISTENER, 267 BUFFER_PRODUCER_UNREGISTER_PROPERTY_LISTENER, 268 }; 269 }; 270 } // namespace OHOS 271 272 #endif // INTERFACES_INNERKITS_SURFACE_IBUFFER_PRODUCER_H 273