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 &timestamp, 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 &timestamp, 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 &timestamp) = 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