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_BUFFER_H
1732a6e48fSopenharmony_ci#define INTERFACES_INNERKITS_SURFACE_SURFACE_BUFFER_H
1832a6e48fSopenharmony_ci
1932a6e48fSopenharmony_ci#include <functional>
2032a6e48fSopenharmony_ci
2132a6e48fSopenharmony_ci#include <memory>
2232a6e48fSopenharmony_ci#include <refbase.h>
2332a6e48fSopenharmony_ci
2432a6e48fSopenharmony_ci#include "buffer_handle_utils.h"
2532a6e48fSopenharmony_ci#include "surface_type.h"
2632a6e48fSopenharmony_ci#include "egl_data.h"
2732a6e48fSopenharmony_ci#include "buffer_extra_data.h"
2832a6e48fSopenharmony_ci#include "native_buffer.h"
2932a6e48fSopenharmony_ci
3032a6e48fSopenharmony_cistruct BufferWrapper;
3132a6e48fSopenharmony_ci
3232a6e48fSopenharmony_cinamespace OHOS {
3332a6e48fSopenharmony_ciclass MessageParcel;
3432a6e48fSopenharmony_ciclass SyncFence;
3532a6e48fSopenharmony_ciclass SurfaceBuffer : public RefBase {
3632a6e48fSopenharmony_cipublic:
3732a6e48fSopenharmony_ci    virtual BufferHandle *GetBufferHandle() const = 0;
3832a6e48fSopenharmony_ci    virtual int32_t GetWidth() const = 0;
3932a6e48fSopenharmony_ci    virtual int32_t GetHeight() const = 0;
4032a6e48fSopenharmony_ci    virtual int32_t GetStride() const = 0;
4132a6e48fSopenharmony_ci    virtual int32_t GetFormat() const = 0;
4232a6e48fSopenharmony_ci    virtual uint64_t GetUsage() const = 0;
4332a6e48fSopenharmony_ci    virtual uint64_t GetPhyAddr() const = 0;
4432a6e48fSopenharmony_ci    virtual void* GetVirAddr() = 0;
4532a6e48fSopenharmony_ci    virtual int32_t GetFileDescriptor() const = 0;
4632a6e48fSopenharmony_ci    virtual uint32_t GetSize() const = 0;
4732a6e48fSopenharmony_ci
4832a6e48fSopenharmony_ci    virtual GraphicColorGamut GetSurfaceBufferColorGamut() const = 0;
4932a6e48fSopenharmony_ci    virtual GraphicTransformType GetSurfaceBufferTransform() const = 0;
5032a6e48fSopenharmony_ci    virtual void SetSurfaceBufferColorGamut(const GraphicColorGamut& colorGamut) = 0;
5132a6e48fSopenharmony_ci    virtual void SetSurfaceBufferTransform(const GraphicTransformType& transform) = 0;
5232a6e48fSopenharmony_ci
5332a6e48fSopenharmony_ci    virtual int32_t GetSurfaceBufferWidth() const = 0;
5432a6e48fSopenharmony_ci    virtual int32_t GetSurfaceBufferHeight() const = 0;
5532a6e48fSopenharmony_ci    virtual void SetSurfaceBufferWidth(int32_t width) = 0;
5632a6e48fSopenharmony_ci    virtual void SetSurfaceBufferHeight(int32_t width) = 0;
5732a6e48fSopenharmony_ci
5832a6e48fSopenharmony_ci    virtual uint32_t GetSeqNum() const = 0;
5932a6e48fSopenharmony_ci
6032a6e48fSopenharmony_ci    virtual void SetExtraData(sptr<BufferExtraData> bedata) = 0;
6132a6e48fSopenharmony_ci    virtual sptr<BufferExtraData> GetExtraData() const = 0;
6232a6e48fSopenharmony_ci    virtual GSError WriteToMessageParcel(MessageParcel &parcel) = 0;
6332a6e48fSopenharmony_ci    virtual GSError ReadFromMessageParcel(MessageParcel &parcel) = 0;
6432a6e48fSopenharmony_ci    virtual void SetBufferHandle(BufferHandle *handle) = 0;
6532a6e48fSopenharmony_ci
6632a6e48fSopenharmony_ci    virtual BufferWrapper GetBufferWrapper() = 0;
6732a6e48fSopenharmony_ci    virtual void SetBufferWrapper(BufferWrapper wrapper) = 0;
6832a6e48fSopenharmony_ci
6932a6e48fSopenharmony_ci    // gralloc
7032a6e48fSopenharmony_ci    virtual GSError Alloc(const BufferRequestConfig &config) = 0;
7132a6e48fSopenharmony_ci    virtual GSError Map() = 0;
7232a6e48fSopenharmony_ci    virtual GSError Unmap() = 0;
7332a6e48fSopenharmony_ci    virtual GSError FlushCache() = 0;
7432a6e48fSopenharmony_ci    virtual GSError InvalidateCache() = 0;
7532a6e48fSopenharmony_ci
7632a6e48fSopenharmony_ci    // metadata
7732a6e48fSopenharmony_ci    virtual GSError SetMetadata(uint32_t key, const std::vector<uint8_t>& value) = 0;
7832a6e48fSopenharmony_ci    virtual GSError GetMetadata(uint32_t key, std::vector<uint8_t>& value) = 0;
7932a6e48fSopenharmony_ci    virtual GSError ListMetadataKeys(std::vector<uint32_t>& keys) = 0;
8032a6e48fSopenharmony_ci    virtual GSError EraseMetadataKey(uint32_t key) = 0;
8132a6e48fSopenharmony_ci
8232a6e48fSopenharmony_ci    static SurfaceBuffer* NativeBufferToSurfaceBuffer(OH_NativeBuffer* buffer)
8332a6e48fSopenharmony_ci    {
8432a6e48fSopenharmony_ci        return reinterpret_cast<SurfaceBuffer *>(buffer);
8532a6e48fSopenharmony_ci    };
8632a6e48fSopenharmony_ci
8732a6e48fSopenharmony_ci    static const SurfaceBuffer* NativeBufferToSurfaceBuffer(OH_NativeBuffer const* buffer)
8832a6e48fSopenharmony_ci    {
8932a6e48fSopenharmony_ci        return reinterpret_cast<SurfaceBuffer const*>(buffer);
9032a6e48fSopenharmony_ci    };
9132a6e48fSopenharmony_ci
9232a6e48fSopenharmony_ci    virtual OH_NativeBuffer* SurfaceBufferToNativeBuffer() = 0;
9332a6e48fSopenharmony_ci
9432a6e48fSopenharmony_ci    static sptr<SurfaceBuffer> Create();
9532a6e48fSopenharmony_ci
9632a6e48fSopenharmony_ci    virtual GSError WriteBufferRequestConfig(MessageParcel &parcel)
9732a6e48fSopenharmony_ci    {
9832a6e48fSopenharmony_ci        (void)parcel;
9932a6e48fSopenharmony_ci        return GSERROR_OK;
10032a6e48fSopenharmony_ci    };
10132a6e48fSopenharmony_ci    virtual GSError ReadBufferRequestConfig(MessageParcel &parcel)
10232a6e48fSopenharmony_ci    {
10332a6e48fSopenharmony_ci        (void)parcel;
10432a6e48fSopenharmony_ci        return GSERROR_OK;
10532a6e48fSopenharmony_ci    };
10632a6e48fSopenharmony_ci    virtual BufferRequestConfig GetBufferRequestConfig() const = 0;
10732a6e48fSopenharmony_ci    virtual void SetBufferRequestConfig(const BufferRequestConfig &config)
10832a6e48fSopenharmony_ci    {
10932a6e48fSopenharmony_ci        (void)config;
11032a6e48fSopenharmony_ci    };
11132a6e48fSopenharmony_ci    virtual void SetConsumerAttachBufferFlag(bool value)
11232a6e48fSopenharmony_ci    {
11332a6e48fSopenharmony_ci        (void)value;
11432a6e48fSopenharmony_ci    };
11532a6e48fSopenharmony_ci    virtual bool GetConsumerAttachBufferFlag()
11632a6e48fSopenharmony_ci    {
11732a6e48fSopenharmony_ci        return false;
11832a6e48fSopenharmony_ci    };
11932a6e48fSopenharmony_ci    virtual GSError GetPlanesInfo(void **planesInfo)
12032a6e48fSopenharmony_ci    {
12132a6e48fSopenharmony_ci        (void)planesInfo;
12232a6e48fSopenharmony_ci        return GSERROR_OK;
12332a6e48fSopenharmony_ci    };
12432a6e48fSopenharmony_ci
12532a6e48fSopenharmony_ciprotected:
12632a6e48fSopenharmony_ci    SurfaceBuffer() {}
12732a6e48fSopenharmony_ci    SurfaceBuffer(const SurfaceBuffer&) = delete;
12832a6e48fSopenharmony_ci    SurfaceBuffer& operator=(const SurfaceBuffer&) = delete;
12932a6e48fSopenharmony_ci    virtual ~SurfaceBuffer() {}
13032a6e48fSopenharmony_ci};
13132a6e48fSopenharmony_ci
13232a6e48fSopenharmony_ciusing OnReleaseFunc = std::function<GSError(sptr<SurfaceBuffer> &)>;
13332a6e48fSopenharmony_ciusing OnDeleteBufferFunc = std::function<void(int32_t)>;
13432a6e48fSopenharmony_ciusing OnReleaseFuncWithFence = std::function<GSError(const sptr<SurfaceBuffer>&, const sptr<SyncFence>&)>;
13532a6e48fSopenharmony_ciusing OnUserDataChangeFunc = std::function<void(const std::string& key, const std::string& value)>;
13632a6e48fSopenharmony_ci} // namespace OHOS
13732a6e48fSopenharmony_ci
13832a6e48fSopenharmony_ci#endif // INTERFACES_INNERKITS_SURFACE_SURFACE_BUFFER_H
139