132a6e48fSopenharmony_ci/* 232a6e48fSopenharmony_ci * Copyright (c) 2021-2023 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 FRAMEWORKS_SURFACE_INCLUDE_SURFACE_BUFFER_IMPL_H 1732a6e48fSopenharmony_ci#define FRAMEWORKS_SURFACE_INCLUDE_SURFACE_BUFFER_IMPL_H 1832a6e48fSopenharmony_ci 1932a6e48fSopenharmony_ci#include <buffer_extra_data.h> 2032a6e48fSopenharmony_ci#include <buffer_handle_parcel.h> 2132a6e48fSopenharmony_ci#include <buffer_handle_utils.h> 2232a6e48fSopenharmony_ci#include <surface_buffer.h> 2332a6e48fSopenharmony_ci#include "egl_data.h" 2432a6e48fSopenharmony_ci#include "native_buffer.h" 2532a6e48fSopenharmony_ci#include "stdint.h" 2632a6e48fSopenharmony_ci 2732a6e48fSopenharmony_cistruct BufferWrapper {}; 2832a6e48fSopenharmony_ci 2932a6e48fSopenharmony_cinamespace OHOS { 3032a6e48fSopenharmony_ciclass SurfaceBufferImpl : public SurfaceBuffer { 3132a6e48fSopenharmony_cipublic: 3232a6e48fSopenharmony_ci SurfaceBufferImpl(); 3332a6e48fSopenharmony_ci SurfaceBufferImpl(uint32_t seqNum); 3432a6e48fSopenharmony_ci virtual ~SurfaceBufferImpl(); 3532a6e48fSopenharmony_ci 3632a6e48fSopenharmony_ci GSError Alloc(const BufferRequestConfig &config) override; 3732a6e48fSopenharmony_ci GSError Map() override; 3832a6e48fSopenharmony_ci GSError Unmap() override; 3932a6e48fSopenharmony_ci GSError FlushCache() override; 4032a6e48fSopenharmony_ci GSError InvalidateCache() override; 4132a6e48fSopenharmony_ci 4232a6e48fSopenharmony_ci BufferHandle *GetBufferHandle() const override; 4332a6e48fSopenharmony_ci int32_t GetWidth() const override; 4432a6e48fSopenharmony_ci int32_t GetHeight() const override; 4532a6e48fSopenharmony_ci int32_t GetStride() const override; 4632a6e48fSopenharmony_ci int32_t GetFormat() const override; 4732a6e48fSopenharmony_ci uint64_t GetUsage() const override; 4832a6e48fSopenharmony_ci uint64_t GetPhyAddr() const override; 4932a6e48fSopenharmony_ci void* GetVirAddr() override; 5032a6e48fSopenharmony_ci int32_t GetFileDescriptor() const override; 5132a6e48fSopenharmony_ci uint32_t GetSize() const override; 5232a6e48fSopenharmony_ci 5332a6e48fSopenharmony_ci GraphicColorGamut GetSurfaceBufferColorGamut() const override; 5432a6e48fSopenharmony_ci GraphicTransformType GetSurfaceBufferTransform() const override; 5532a6e48fSopenharmony_ci void SetSurfaceBufferColorGamut(const GraphicColorGamut& colorGamut) override; 5632a6e48fSopenharmony_ci void SetSurfaceBufferTransform(const GraphicTransformType& transform) override; 5732a6e48fSopenharmony_ci 5832a6e48fSopenharmony_ci int32_t GetSurfaceBufferWidth() const override; 5932a6e48fSopenharmony_ci int32_t GetSurfaceBufferHeight() const override; 6032a6e48fSopenharmony_ci void SetSurfaceBufferWidth(int32_t width) override; 6132a6e48fSopenharmony_ci void SetSurfaceBufferHeight(int32_t width) override; 6232a6e48fSopenharmony_ci 6332a6e48fSopenharmony_ci uint32_t GetSeqNum() const override; 6432a6e48fSopenharmony_ci 6532a6e48fSopenharmony_ci void SetExtraData(sptr<BufferExtraData> bedata) override; 6632a6e48fSopenharmony_ci sptr<BufferExtraData> GetExtraData() const override; 6732a6e48fSopenharmony_ci 6832a6e48fSopenharmony_ci void SetBufferHandle(BufferHandle *handle) override; 6932a6e48fSopenharmony_ci GSError WriteToMessageParcel(MessageParcel &parcel) override; 7032a6e48fSopenharmony_ci GSError ReadFromMessageParcel(MessageParcel &parcel) override; 7132a6e48fSopenharmony_ci 7232a6e48fSopenharmony_ci OH_NativeBuffer* SurfaceBufferToNativeBuffer() override; 7332a6e48fSopenharmony_ci 7432a6e48fSopenharmony_ci static GSError CheckBufferConfig(int32_t width, int32_t height, 7532a6e48fSopenharmony_ci int32_t format, uint64_t usage); 7632a6e48fSopenharmony_ci 7732a6e48fSopenharmony_ci BufferWrapper GetBufferWrapper() override; 7832a6e48fSopenharmony_ci void SetBufferWrapper(BufferWrapper wrapper) override; 7932a6e48fSopenharmony_ci 8032a6e48fSopenharmony_ci // metadata 8132a6e48fSopenharmony_ci GSError SetMetadata(uint32_t key, const std::vector<uint8_t>& value) override; 8232a6e48fSopenharmony_ci GSError GetMetadata(uint32_t key, std::vector<uint8_t>& value) override; 8332a6e48fSopenharmony_ci GSError ListMetadataKeys(std::vector<uint32_t>& keys) override; 8432a6e48fSopenharmony_ci GSError EraseMetadataKey(uint32_t key) override; 8532a6e48fSopenharmony_ci 8632a6e48fSopenharmony_ci GSError WriteBufferRequestConfig(MessageParcel &parcel) override; 8732a6e48fSopenharmony_ci GSError ReadBufferRequestConfig(MessageParcel &parcel) override; 8832a6e48fSopenharmony_ci BufferRequestConfig GetBufferRequestConfig() const override; 8932a6e48fSopenharmony_ci void SetBufferRequestConfig(const BufferRequestConfig &config) override; 9032a6e48fSopenharmony_ci void SetConsumerAttachBufferFlag(bool value) override; 9132a6e48fSopenharmony_ci bool GetConsumerAttachBufferFlag() override; 9232a6e48fSopenharmony_ci GSError GetPlanesInfo(void **planesInfo) override; 9332a6e48fSopenharmony_ci 9432a6e48fSopenharmony_ciprivate: 9532a6e48fSopenharmony_ci void FreeBufferHandleLocked(); 9632a6e48fSopenharmony_ci bool MetaDataCachedLocked(const uint32_t key, const std::vector<uint8_t>& value); 9732a6e48fSopenharmony_ci GSError GetImageLayout(void *layout); 9832a6e48fSopenharmony_ci 9932a6e48fSopenharmony_ci BufferHandle *handle_ = nullptr; 10032a6e48fSopenharmony_ci uint32_t sequenceNumber_ = UINT32_MAX; 10132a6e48fSopenharmony_ci sptr<BufferExtraData> bedata_ = nullptr; 10232a6e48fSopenharmony_ci sptr<EglData> eglData_ = nullptr; 10332a6e48fSopenharmony_ci GraphicColorGamut surfaceBufferColorGamut_ = GraphicColorGamut::GRAPHIC_COLOR_GAMUT_SRGB; 10432a6e48fSopenharmony_ci GraphicTransformType transform_ = GraphicTransformType::GRAPHIC_ROTATE_NONE; 10532a6e48fSopenharmony_ci int32_t surfaceBufferWidth_ = 0; 10632a6e48fSopenharmony_ci int32_t surfaceBufferHeight_ = 0; 10732a6e48fSopenharmony_ci mutable std::mutex mutex_; 10832a6e48fSopenharmony_ci OH_NativeBuffer_Planes planesInfo_ = {0, {}}; 10932a6e48fSopenharmony_ci BufferRequestConfig bufferRequestConfig_ = {0, 0, 0, 0, 0, 0}; 11032a6e48fSopenharmony_ci bool isConsumerAttachBufferFlag_ = false; 11132a6e48fSopenharmony_ci std::map<uint32_t, std::vector<uint8_t>> metaDataCache_; 11232a6e48fSopenharmony_ci}; 11332a6e48fSopenharmony_ci} // namespace OHOS 11432a6e48fSopenharmony_ci 11532a6e48fSopenharmony_ci#endif // FRAMEWORKS_SURFACE_INCLUDE_SURFACE_BUFFER_IMPL_H 116