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) = 0; 83 virtual GSError GoBackground() = 0; 84 85 virtual GSError RegisterReleaseListener(sptr<IProducerListener> listener) = 0; 86 87 virtual GSError SetTransform(GraphicTransformType transform) = 0; 88 89 virtual GSError IsSupportedAlloc(const std::vector<BufferVerifyAllocInfo> &infos, 90 std::vector<bool> &supporteds) = 0; 91 92 virtual GSError Connect() = 0; 93 virtual GSError Disconnect() = 0; 94 95 virtual GSError SetScalingMode(uint32_t sequence, ScalingMode scalingMode) = 0; 96 virtual GSError SetBufferHold(bool hold) = 0; 97 virtual GSError SetMetaData(uint32_t sequence, const std::vector<GraphicHDRMetaData> &metaData) = 0; 98 virtual GSError SetMetaDataSet(uint32_t sequence, GraphicHDRMetadataKey key, 99 const std::vector<uint8_t> &metaData) = 0; 100 virtual GSError SetTunnelHandle(const GraphicExtDataHandle *handle) = 0; 101 virtual GSError GetPresentTimestamp(uint32_t sequence, GraphicPresentTimestampType type, int64_t &time) = 0; 102 103 virtual sptr<NativeSurface> GetNativeSurface() = 0; 104 virtual GSError UnRegisterReleaseListener() = 0; 105 virtual GSError GetLastFlushedBuffer(sptr<SurfaceBuffer>& buffer, 106 sptr<SyncFence>& fence, float matrix[16], bool isUseNewMatrix) = 0; 107 virtual GSError AttachBuffer(sptr<SurfaceBuffer>& buffer, int32_t timeOut) = 0; 108 109 virtual GSError GetTransform(GraphicTransformType &transform) = 0; 110 111 virtual GSError AttachBufferToQueue(sptr<SurfaceBuffer> buffer) = 0; 112 virtual GSError DetachBufferFromQueue(sptr<SurfaceBuffer> buffer) = 0; 113 virtual GSError GetTransformHint(GraphicTransformType &transformHint) = 0; 114 virtual GSError SetTransformHint(GraphicTransformType transformHint) = 0; 115 virtual GSError SetScalingMode(ScalingMode scalingMode) = 0; 116 117 virtual GSError SetSurfaceSourceType(OHSurfaceSource sourceType) = 0; 118 virtual GSError GetSurfaceSourceType(OHSurfaceSource &sourceType) = 0; 119 120 virtual GSError SetSurfaceAppFrameworkType(std::string appFrameworkType) = 0; 121 virtual GSError GetSurfaceAppFrameworkType(std::string &appFrameworkType) = 0; 122 123 virtual GSError SetHdrWhitePointBrightness(float brightness) = 0; 124 virtual GSError SetSdrWhitePointBrightness(float brightness) = 0; AcquireLastFlushedBuffer(sptr<SurfaceBuffer> & buffer,sptr<SyncFence> & fence,float matrix[16],uint32_t matrixSize,bool isUseNewMatrix)125 virtual GSError AcquireLastFlushedBuffer(sptr<SurfaceBuffer> &buffer, sptr<SyncFence> &fence, 126 float matrix[16], uint32_t matrixSize, bool isUseNewMatrix) 127 { 128 (void)buffer; 129 (void)fence; 130 (void)matrix; 131 (void)matrixSize; 132 (void)isUseNewMatrix; 133 return SURFACE_ERROR_NOT_SUPPORT; 134 }; ReleaseLastFlushedBuffer(uint32_t sequence)135 virtual GSError ReleaseLastFlushedBuffer(uint32_t sequence) 136 { 137 (void)sequence; 138 return SURFACE_ERROR_NOT_SUPPORT; 139 }; RequestAndDetachBuffer(const BufferRequestConfig & config,sptr<BufferExtraData> & bedata,RequestBufferReturnValue & retval)140 virtual GSError RequestAndDetachBuffer(const BufferRequestConfig& config, sptr<BufferExtraData>& bedata, 141 RequestBufferReturnValue& retval) 142 { 143 (void)config; 144 (void)bedata; 145 (void)retval; 146 return SURFACE_ERROR_NOT_SUPPORT; 147 } AttachAndFlushBuffer(sptr<SurfaceBuffer> & buffer,sptr<BufferExtraData> & bedata,const sptr<SyncFence> & fence,BufferFlushConfigWithDamages & config,bool needMap)148 virtual GSError AttachAndFlushBuffer(sptr<SurfaceBuffer>& buffer, sptr<BufferExtraData>& bedata, 149 const sptr<SyncFence>& fence, BufferFlushConfigWithDamages& config, bool needMap) 150 { 151 (void)buffer; 152 (void)bedata; 153 (void)fence; 154 (void)config; 155 (void)needMap; 156 return SURFACE_ERROR_NOT_SUPPORT; 157 } 158 DECLARE_INTERFACE_DESCRIPTOR(u"surf.IBufferProducer"); 159 160 protected: 161 enum { 162 BUFFER_PRODUCER_REQUEST_BUFFER = 0, 163 BUFFER_PRODUCER_CANCEL_BUFFER, 164 BUFFER_PRODUCER_FLUSH_BUFFER, 165 BUFFER_PRODUCER_GET_QUEUE_SIZE, 166 BUFFER_PRODUCER_SET_QUEUE_SIZE, 167 BUFFER_PRODUCER_GET_NAME, 168 BUFFER_PRODUCER_GET_DEFAULT_WIDTH, 169 BUFFER_PRODUCER_GET_DEFAULT_HEIGHT, 170 BUFFER_PRODUCER_GET_DEFAULT_USAGE, 171 BUFFER_PRODUCER_CLEAN_CACHE, 172 BUFFER_PRODUCER_ATTACH_BUFFER, 173 BUFFER_PRODUCER_DETACH_BUFFER, 174 BUFFER_PRODUCER_REGISTER_RELEASE_LISTENER, 175 BUFFER_PRODUCER_GET_UNIQUE_ID, 176 BUFFER_PRODUCER_SET_TRANSFORM, 177 BUFFER_PRODUCER_IS_SUPPORTED_ALLOC, 178 BUFFER_PRODUCER_GET_NAMEANDUNIQUEDID, 179 BUFFER_PRODUCER_DISCONNECT, 180 BUFFER_PRODUCER_SET_SCALING_MODE, 181 BUFFER_PRODUCER_SET_METADATA, 182 BUFFER_PRODUCER_SET_METADATASET, 183 BUFFER_PRODUCER_SET_TUNNEL_HANDLE, 184 BUFFER_PRODUCER_GO_BACKGROUND, 185 BUFFER_PRODUCER_GET_PRESENT_TIMESTAMP, 186 BUFFER_PRODUCER_UNREGISTER_RELEASE_LISTENER, 187 BUFFER_PRODUCER_GET_LAST_FLUSHED_BUFFER, 188 BUFFER_PRODUCER_GET_TRANSFORM, 189 BUFFER_PRODUCER_ATTACH_BUFFER_TO_QUEUE, 190 BUFFER_PRODUCER_DETACH_BUFFER_FROM_QUEUE, 191 BUFFER_PRODUCER_SET_DEFAULT_USAGE, 192 BUFFER_PRODUCER_GET_TRANSFORMHINT, 193 BUFFER_PRODUCER_SET_TRANSFORMHINT, 194 BUFFER_PRODUCER_SET_BUFFER_HOLD, 195 BUFFER_PRODUCER_SET_SOURCE_TYPE, 196 BUFFER_PRODUCER_GET_SOURCE_TYPE, 197 BUFFER_PRODUCER_SET_APP_FRAMEWORK_TYPE, 198 BUFFER_PRODUCER_GET_APP_FRAMEWORK_TYPE, 199 BUFFER_PRODUCER_SET_SCALING_MODEV2, 200 BUFFER_PRODUCER_SET_HDRWHITEPOINTBRIGHTNESS, 201 BUFFER_PRODUCER_SET_SDRWHITEPOINTBRIGHTNESS, 202 BUFFER_PRODUCER_REQUEST_BUFFERS, 203 BUFFER_PRODUCER_FLUSH_BUFFERS, 204 BUFFER_PRODUCER_GET_INIT_INFO, 205 BUFFER_PRODUCER_CONNECT, 206 BUFFER_PRODUCER_ACQUIRE_LAST_FLUSHED_BUFFER, 207 BUFFER_PRODUCER_RELEASE_LAST_FLUSHED_BUFFER, 208 BUFFER_PRODUCER_REQUEST_AND_DETACH_BUFFER, 209 BUFFER_PRODUCER_ATTACH_AND_FLUSH_BUFFER, 210 }; 211 }; 212 } // namespace OHOS 213 214 #endif // INTERFACES_INNERKITS_SURFACE_IBUFFER_PRODUCER_H 215