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