/* * Copyright (c) 2021-2023 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef FRAMEWORKS_SURFACE_INCLUDE_SURFACE_BUFFER_IMPL_H #define FRAMEWORKS_SURFACE_INCLUDE_SURFACE_BUFFER_IMPL_H #include #include #include #include #include "egl_data.h" #include "native_buffer.h" #include "stdint.h" struct BufferWrapper {}; namespace OHOS { class SurfaceBufferImpl : public SurfaceBuffer { public: SurfaceBufferImpl(); SurfaceBufferImpl(uint32_t seqNum); virtual ~SurfaceBufferImpl(); GSError Alloc(const BufferRequestConfig &config) override; GSError Map() override; GSError Unmap() override; GSError FlushCache() override; GSError InvalidateCache() override; BufferHandle *GetBufferHandle() const override; int32_t GetWidth() const override; int32_t GetHeight() const override; int32_t GetStride() const override; int32_t GetFormat() const override; uint64_t GetUsage() const override; uint64_t GetPhyAddr() const override; void* GetVirAddr() override; int32_t GetFileDescriptor() const override; uint32_t GetSize() const override; GraphicColorGamut GetSurfaceBufferColorGamut() const override; GraphicTransformType GetSurfaceBufferTransform() const override; void SetSurfaceBufferColorGamut(const GraphicColorGamut& colorGamut) override; void SetSurfaceBufferTransform(const GraphicTransformType& transform) override; int32_t GetSurfaceBufferWidth() const override; int32_t GetSurfaceBufferHeight() const override; void SetSurfaceBufferWidth(int32_t width) override; void SetSurfaceBufferHeight(int32_t width) override; uint32_t GetSeqNum() const override; sptr GetEglData() const override; void SetEglData(const sptr& data) override; void SetExtraData(sptr bedata) override; sptr GetExtraData() const override; void SetBufferHandle(BufferHandle *handle) override; GSError WriteToMessageParcel(MessageParcel &parcel) override; GSError ReadFromMessageParcel(MessageParcel &parcel) override; OH_NativeBuffer* SurfaceBufferToNativeBuffer() override; static GSError CheckBufferConfig(int32_t width, int32_t height, int32_t format, uint64_t usage); BufferWrapper GetBufferWrapper() override; void SetBufferWrapper(BufferWrapper wrapper) override; // metadata GSError SetMetadata(uint32_t key, const std::vector& value, bool enableCache = true) override; GSError GetMetadata(uint32_t key, std::vector& value) override; GSError ListMetadataKeys(std::vector& keys) override; GSError EraseMetadataKey(uint32_t key) override; GSError WriteBufferRequestConfig(MessageParcel &parcel) override; GSError ReadBufferRequestConfig(MessageParcel &parcel) override; BufferRequestConfig GetBufferRequestConfig() const override; void SetBufferRequestConfig(const BufferRequestConfig &config) override; void SetConsumerAttachBufferFlag(bool value) override; bool GetConsumerAttachBufferFlag() override; GSError GetPlanesInfo(void **planesInfo) override; void SetSurfaceBufferScalingMode(const ScalingMode &scalingMode) override; ScalingMode GetSurfaceBufferScalingMode() const override; private: void FreeBufferHandleLocked(); bool MetaDataCachedLocked(const uint32_t key, const std::vector& value); GSError GetImageLayout(void *layout); BufferHandle *handle_ = nullptr; uint32_t sequenceNumber_ = UINT32_MAX; sptr bedata_ = nullptr; sptr eglData_ = nullptr; GraphicColorGamut surfaceBufferColorGamut_ = GraphicColorGamut::GRAPHIC_COLOR_GAMUT_SRGB; GraphicTransformType transform_ = GraphicTransformType::GRAPHIC_ROTATE_NONE; ScalingMode scalingMode_ = ScalingMode::SCALING_MODE_SCALE_TO_WINDOW; int32_t surfaceBufferWidth_ = 0; int32_t surfaceBufferHeight_ = 0; mutable std::mutex mutex_; OH_NativeBuffer_Planes planesInfo_ = {0, {}}; BufferRequestConfig bufferRequestConfig_ = {0, 0, 0, 0, 0, 0}; bool isConsumerAttachBufferFlag_ = false; std::map> metaDataCache_; }; } // namespace OHOS #endif // FRAMEWORKS_SURFACE_INCLUDE_SURFACE_BUFFER_IMPL_H