132a6e48fSopenharmony_ci/* 232a6e48fSopenharmony_ci * Copyright (c) 2021 Huawei Device Co., Ltd. 332a6e48fSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 432a6e48fSopenharmony_ci * you may not use this file except in compliance with the License. 532a6e48fSopenharmony_ci * You may obtain a copy of the License at 632a6e48fSopenharmony_ci * 732a6e48fSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 832a6e48fSopenharmony_ci * 932a6e48fSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 1032a6e48fSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 1132a6e48fSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1232a6e48fSopenharmony_ci * See the License for the specific language governing permissions and 1332a6e48fSopenharmony_ci * limitations under the License. 1432a6e48fSopenharmony_ci */ 1532a6e48fSopenharmony_ci 1632a6e48fSopenharmony_ci#ifndef INTERFACES_INNERKITS_SURFACE_SURFACE_H 1732a6e48fSopenharmony_ci#define INTERFACES_INNERKITS_SURFACE_SURFACE_H 1832a6e48fSopenharmony_ci 1932a6e48fSopenharmony_ci#include <refbase.h> 2032a6e48fSopenharmony_ci 2132a6e48fSopenharmony_ci#include "ibuffer_consumer_listener.h" 2232a6e48fSopenharmony_ci#include "ibuffer_producer.h" 2332a6e48fSopenharmony_ci#include "surface_buffer.h" 2432a6e48fSopenharmony_ci#include "surface_type.h" 2532a6e48fSopenharmony_ci#include "surface_tunnel_handle.h" 2632a6e48fSopenharmony_ci 2732a6e48fSopenharmony_cinamespace OHOS { 2832a6e48fSopenharmony_ciclass Surface : public RefBase { 2932a6e48fSopenharmony_cipublic: 3032a6e48fSopenharmony_ci static sptr<Surface> CreateSurfaceAsConsumer(std::string name = "noname", bool isShared = false); 3132a6e48fSopenharmony_ci static sptr<Surface> CreateSurfaceAsProducer(sptr<IBufferProducer>& producer); 3232a6e48fSopenharmony_ci 3332a6e48fSopenharmony_ci virtual ~Surface() = default; 3432a6e48fSopenharmony_ci 3532a6e48fSopenharmony_ci virtual GSError GetProducerInitInfo(ProducerInitInfo &info) = 0; 3632a6e48fSopenharmony_ci virtual bool IsConsumer() const = 0; 3732a6e48fSopenharmony_ci virtual sptr<IBufferProducer> GetProducer() const = 0; 3832a6e48fSopenharmony_ci 3932a6e48fSopenharmony_ci virtual GSError RequestBuffer(sptr<SurfaceBuffer>& buffer, 4032a6e48fSopenharmony_ci int32_t &fence, BufferRequestConfig &config) = 0; 4132a6e48fSopenharmony_ci 4232a6e48fSopenharmony_ci virtual GSError RequestBuffers(std::vector<sptr<SurfaceBuffer>> &buffers, 4332a6e48fSopenharmony_ci std::vector<sptr<SyncFence>> &fences, BufferRequestConfig &config) = 0; 4432a6e48fSopenharmony_ci 4532a6e48fSopenharmony_ci virtual GSError CancelBuffer(sptr<SurfaceBuffer>& buffer) = 0; 4632a6e48fSopenharmony_ci 4732a6e48fSopenharmony_ci virtual GSError FlushBuffer(sptr<SurfaceBuffer>& buffer, 4832a6e48fSopenharmony_ci int32_t fence, BufferFlushConfig &config) = 0; 4932a6e48fSopenharmony_ci 5032a6e48fSopenharmony_ci virtual GSError AcquireBuffer(sptr<SurfaceBuffer>& buffer, int32_t &fence, 5132a6e48fSopenharmony_ci int64_t ×tamp, Rect &damage) = 0; 5232a6e48fSopenharmony_ci virtual GSError ReleaseBuffer(sptr<SurfaceBuffer>& buffer, int32_t fence) = 0; 5332a6e48fSopenharmony_ci 5432a6e48fSopenharmony_ci virtual GSError RequestBuffer(sptr<SurfaceBuffer>& buffer, 5532a6e48fSopenharmony_ci sptr<SyncFence>& fence, BufferRequestConfig &config) = 0; 5632a6e48fSopenharmony_ci virtual GSError FlushBuffer(sptr<SurfaceBuffer>& buffer, 5732a6e48fSopenharmony_ci const sptr<SyncFence>& fence, BufferFlushConfig &config) = 0; 5832a6e48fSopenharmony_ci virtual GSError AcquireBuffer(sptr<SurfaceBuffer>& buffer, sptr<SyncFence>& fence, 5932a6e48fSopenharmony_ci int64_t ×tamp, Rect &damage) = 0; 6032a6e48fSopenharmony_ci virtual GSError ReleaseBuffer(sptr<SurfaceBuffer>& buffer, const sptr<SyncFence>& fence) = 0; 6132a6e48fSopenharmony_ci 6232a6e48fSopenharmony_ci virtual GSError AttachBuffer(sptr<SurfaceBuffer>& buffer) = 0; 6332a6e48fSopenharmony_ci 6432a6e48fSopenharmony_ci virtual GSError DetachBuffer(sptr<SurfaceBuffer>& buffer) = 0; 6532a6e48fSopenharmony_ci 6632a6e48fSopenharmony_ci virtual uint32_t GetQueueSize() = 0; 6732a6e48fSopenharmony_ci virtual GSError SetQueueSize(uint32_t queueSize) = 0; 6832a6e48fSopenharmony_ci 6932a6e48fSopenharmony_ci virtual GSError SetDefaultWidthAndHeight(int32_t width, int32_t height) = 0; 7032a6e48fSopenharmony_ci virtual int32_t GetDefaultWidth() = 0; 7132a6e48fSopenharmony_ci virtual int32_t GetDefaultHeight() = 0; 7232a6e48fSopenharmony_ci 7332a6e48fSopenharmony_ci virtual GSError SetDefaultUsage(uint64_t usage) = 0; 7432a6e48fSopenharmony_ci virtual uint64_t GetDefaultUsage() = 0; 7532a6e48fSopenharmony_ci 7632a6e48fSopenharmony_ci virtual GSError SetUserData(const std::string &key, const std::string &val) = 0; 7732a6e48fSopenharmony_ci virtual std::string GetUserData(const std::string &key) = 0; 7832a6e48fSopenharmony_ci 7932a6e48fSopenharmony_ci virtual const std::string& GetName() = 0; 8032a6e48fSopenharmony_ci virtual uint64_t GetUniqueId() const = 0; 8132a6e48fSopenharmony_ci 8232a6e48fSopenharmony_ci virtual GSError RegisterConsumerListener(sptr<IBufferConsumerListener>& listener) = 0; 8332a6e48fSopenharmony_ci virtual GSError RegisterConsumerListener(IBufferConsumerListenerClazz *listener) = 0; 8432a6e48fSopenharmony_ci virtual GSError RegisterReleaseListener(OnReleaseFunc func) = 0; 8532a6e48fSopenharmony_ci virtual GSError RegisterDeleteBufferListener(OnDeleteBufferFunc func, bool isForUniRedraw = false) = 0; 8632a6e48fSopenharmony_ci virtual GSError UnregisterConsumerListener() = 0; 8732a6e48fSopenharmony_ci 8832a6e48fSopenharmony_ci // Call carefully. This interface will empty all caches of the current process 8932a6e48fSopenharmony_ci virtual GSError CleanCache(bool cleanAll = false) = 0; 9032a6e48fSopenharmony_ci virtual GSError GoBackground() = 0; 9132a6e48fSopenharmony_ci 9232a6e48fSopenharmony_ci virtual GSError SetTransform(GraphicTransformType transform) = 0; 9332a6e48fSopenharmony_ci virtual GraphicTransformType GetTransform() const = 0; 9432a6e48fSopenharmony_ci 9532a6e48fSopenharmony_ci virtual GSError IsSupportedAlloc(const std::vector<BufferVerifyAllocInfo> &infos, 9632a6e48fSopenharmony_ci std::vector<bool> &supporteds) = 0; 9732a6e48fSopenharmony_ci virtual GSError Connect() = 0; 9832a6e48fSopenharmony_ci virtual GSError Disconnect() = 0; 9932a6e48fSopenharmony_ci virtual GSError SetScalingMode(uint32_t sequence, ScalingMode scalingMode) = 0; 10032a6e48fSopenharmony_ci virtual GSError GetScalingMode(uint32_t sequence, ScalingMode &scalingMode) = 0; 10132a6e48fSopenharmony_ci virtual GSError SetMetaData(uint32_t sequence, const std::vector<GraphicHDRMetaData> &metaData) = 0; 10232a6e48fSopenharmony_ci virtual GSError SetMetaDataSet(uint32_t sequence, GraphicHDRMetadataKey key, 10332a6e48fSopenharmony_ci const std::vector<uint8_t> &metaData) = 0; 10432a6e48fSopenharmony_ci virtual GSError QueryMetaDataType(uint32_t sequence, HDRMetaDataType &type) const = 0; 10532a6e48fSopenharmony_ci virtual GSError GetMetaData(uint32_t sequence, std::vector<GraphicHDRMetaData> &metaData) const = 0; 10632a6e48fSopenharmony_ci virtual GSError GetMetaDataSet(uint32_t sequence, GraphicHDRMetadataKey &key, 10732a6e48fSopenharmony_ci std::vector<uint8_t> &metaData) const = 0; 10832a6e48fSopenharmony_ci virtual GSError SetTunnelHandle(const GraphicExtDataHandle *handle) = 0; 10932a6e48fSopenharmony_ci virtual sptr<SurfaceTunnelHandle> GetTunnelHandle() const = 0; 11032a6e48fSopenharmony_ci virtual GSError SetPresentTimestamp(uint32_t sequence, const GraphicPresentTimestamp ×tamp) = 0; 11132a6e48fSopenharmony_ci virtual GSError GetPresentTimestamp(uint32_t sequence, GraphicPresentTimestampType type, 11232a6e48fSopenharmony_ci int64_t &time) const = 0; 11332a6e48fSopenharmony_ci 11432a6e48fSopenharmony_ci virtual void Dump(std::string &result) const = 0; 11532a6e48fSopenharmony_ci 11632a6e48fSopenharmony_ci virtual int32_t GetDefaultFormat() = 0; 11732a6e48fSopenharmony_ci virtual GSError SetDefaultFormat(int32_t format) = 0; 11832a6e48fSopenharmony_ci virtual int32_t GetDefaultColorGamut() = 0; 11932a6e48fSopenharmony_ci virtual GSError SetDefaultColorGamut(int32_t colorGamut) = 0; 12032a6e48fSopenharmony_ci 12132a6e48fSopenharmony_ci virtual sptr<NativeSurface> GetNativeSurface() = 0; 12232a6e48fSopenharmony_ci 12332a6e48fSopenharmony_ci virtual bool QueryIfBufferAvailable() = 0; 12432a6e48fSopenharmony_ci virtual GSError FlushBuffer(sptr<SurfaceBuffer>& buffer, const sptr<SyncFence>& fence, 12532a6e48fSopenharmony_ci BufferFlushConfigWithDamages &config) = 0; 12632a6e48fSopenharmony_ci virtual GSError FlushBuffers(const std::vector<sptr<SurfaceBuffer>> &buffers, 12732a6e48fSopenharmony_ci const std::vector<sptr<SyncFence>> &fences, const std::vector<BufferFlushConfigWithDamages> &configs) = 0; 12832a6e48fSopenharmony_ci virtual GSError UnRegisterReleaseListener() = 0; 12932a6e48fSopenharmony_ci virtual GSError SetWptrNativeWindowToPSurface(void* nativeWindow) = 0; 13032a6e48fSopenharmony_ci virtual GSError GetLastFlushedBuffer(sptr<SurfaceBuffer>& buffer, 13132a6e48fSopenharmony_ci sptr<SyncFence>& fence, float matrix[16], bool isUseNewMatrix = false) = 0; 13232a6e48fSopenharmony_ci virtual GSError AttachBuffer(sptr<SurfaceBuffer>& buffer, int32_t timeOut) = 0; 13332a6e48fSopenharmony_ci virtual GSError RegisterSurfaceDelegator(sptr<IRemoteObject> client) = 0; 13432a6e48fSopenharmony_ci virtual GSError RegisterReleaseListener(OnReleaseFuncWithFence func) = 0; 13532a6e48fSopenharmony_ci virtual GSError RegisterUserDataChangeListener(const std::string &funcName, OnUserDataChangeFunc func) = 0; 13632a6e48fSopenharmony_ci virtual GSError UnRegisterUserDataChangeListener(const std::string &funcName) = 0; 13732a6e48fSopenharmony_ci virtual GSError ClearUserDataChangeListener() = 0; 13832a6e48fSopenharmony_ci 13932a6e48fSopenharmony_ci virtual GSError AttachBufferToQueue(sptr<SurfaceBuffer> buffer) = 0; 14032a6e48fSopenharmony_ci virtual GSError DetachBufferFromQueue(sptr<SurfaceBuffer> buffer) = 0; 14132a6e48fSopenharmony_ci 14232a6e48fSopenharmony_ci virtual GraphicTransformType GetTransformHint() const = 0; 14332a6e48fSopenharmony_ci virtual GSError SetTransformHint(GraphicTransformType transformHint) = 0; 14432a6e48fSopenharmony_ci 14532a6e48fSopenharmony_ci virtual void SetRequestWidthAndHeight(int32_t width, int32_t height) = 0; 14632a6e48fSopenharmony_ci virtual int32_t GetRequestWidth() = 0; 14732a6e48fSopenharmony_ci virtual int32_t GetRequestHeight() = 0; 14832a6e48fSopenharmony_ci 14932a6e48fSopenharmony_ci virtual void SetBufferHold(bool hold) = 0; 15032a6e48fSopenharmony_ci virtual void SetWindowConfig(const BufferRequestConfig& config) 15132a6e48fSopenharmony_ci { 15232a6e48fSopenharmony_ci (void)config; 15332a6e48fSopenharmony_ci } 15432a6e48fSopenharmony_ci virtual void SetWindowConfigWidthAndHeight(int32_t width, int32_t height) 15532a6e48fSopenharmony_ci { 15632a6e48fSopenharmony_ci (void)width; 15732a6e48fSopenharmony_ci (void)height; 15832a6e48fSopenharmony_ci } 15932a6e48fSopenharmony_ci virtual void SetWindowConfigStride(int32_t stride) 16032a6e48fSopenharmony_ci { 16132a6e48fSopenharmony_ci (void)stride; 16232a6e48fSopenharmony_ci } 16332a6e48fSopenharmony_ci virtual void SetWindowConfigFormat(int32_t format) 16432a6e48fSopenharmony_ci { 16532a6e48fSopenharmony_ci (void)format; 16632a6e48fSopenharmony_ci } 16732a6e48fSopenharmony_ci virtual void SetWindowConfigUsage(uint64_t usage) 16832a6e48fSopenharmony_ci { 16932a6e48fSopenharmony_ci (void)usage; 17032a6e48fSopenharmony_ci } 17132a6e48fSopenharmony_ci virtual void SetWindowConfigTimeout(int32_t timeout) 17232a6e48fSopenharmony_ci { 17332a6e48fSopenharmony_ci (void)timeout; 17432a6e48fSopenharmony_ci } 17532a6e48fSopenharmony_ci virtual void SetWindowConfigColorGamut(GraphicColorGamut colorGamut) 17632a6e48fSopenharmony_ci { 17732a6e48fSopenharmony_ci (void)colorGamut; 17832a6e48fSopenharmony_ci } 17932a6e48fSopenharmony_ci virtual void SetWindowConfigTransform(GraphicTransformType transform) 18032a6e48fSopenharmony_ci { 18132a6e48fSopenharmony_ci (void)transform; 18232a6e48fSopenharmony_ci } 18332a6e48fSopenharmony_ci virtual BufferRequestConfig GetWindowConfig() 18432a6e48fSopenharmony_ci { 18532a6e48fSopenharmony_ci BufferRequestConfig config; 18632a6e48fSopenharmony_ci return config; 18732a6e48fSopenharmony_ci } 18832a6e48fSopenharmony_ci virtual GSError SetScalingMode(ScalingMode scalingMode) = 0; 18932a6e48fSopenharmony_ci virtual GSError SetSurfaceSourceType(OHSurfaceSource sourceType) = 0; 19032a6e48fSopenharmony_ci virtual OHSurfaceSource GetSurfaceSourceType() const = 0; 19132a6e48fSopenharmony_ci virtual GSError SetSurfaceAppFrameworkType(std::string appFrameworkType) = 0; 19232a6e48fSopenharmony_ci virtual std::string GetSurfaceAppFrameworkType() const = 0; 19332a6e48fSopenharmony_ci virtual GSError SetHdrWhitePointBrightness(float brightness) = 0; 19432a6e48fSopenharmony_ci virtual GSError SetSdrWhitePointBrightness(float brightness) = 0; 19532a6e48fSopenharmony_ci virtual GSError AcquireLastFlushedBuffer(sptr<SurfaceBuffer> &buffer, sptr<SyncFence> &fence, 19632a6e48fSopenharmony_ci float matrix[16], uint32_t matrixSize, bool isUseNewMatrix) 19732a6e48fSopenharmony_ci { 19832a6e48fSopenharmony_ci (void)buffer; 19932a6e48fSopenharmony_ci (void)fence; 20032a6e48fSopenharmony_ci (void)matrix; 20132a6e48fSopenharmony_ci (void)matrixSize; 20232a6e48fSopenharmony_ci (void)isUseNewMatrix; 20332a6e48fSopenharmony_ci return SURFACE_ERROR_NOT_SUPPORT; 20432a6e48fSopenharmony_ci }; 20532a6e48fSopenharmony_ci virtual GSError ReleaseLastFlushedBuffer(sptr<SurfaceBuffer> buffer) 20632a6e48fSopenharmony_ci { 20732a6e48fSopenharmony_ci (void)buffer; 20832a6e48fSopenharmony_ci return SURFACE_ERROR_NOT_SUPPORT; 20932a6e48fSopenharmony_ci }; 21032a6e48fSopenharmony_ci virtual GSError SetGlobalAlpha(int32_t alpha) = 0; 21132a6e48fSopenharmony_ci virtual bool IsInHebcList() 21232a6e48fSopenharmony_ci { 21332a6e48fSopenharmony_ci return false; 21432a6e48fSopenharmony_ci } 21532a6e48fSopenharmony_ciprotected: 21632a6e48fSopenharmony_ci Surface() = default; 21732a6e48fSopenharmony_ci}; 21832a6e48fSopenharmony_ci} // namespace OHOS 21932a6e48fSopenharmony_ci 22032a6e48fSopenharmony_ci#endif // INTERFACES_INNERKITS_SURFACE_SURFACE_H 221