1 /* 2 * Copyright (c) 2021-2023 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef FRAMEWORKS_SURFACE_INCLUDE_SURFACE_BUFFER_IMPL_H 17 #define FRAMEWORKS_SURFACE_INCLUDE_SURFACE_BUFFER_IMPL_H 18 19 #include <buffer_extra_data.h> 20 #include <buffer_handle_parcel.h> 21 #include <buffer_handle_utils.h> 22 #include <surface_buffer.h> 23 #include "egl_data.h" 24 #include "native_buffer.h" 25 #include "stdint.h" 26 27 struct BufferWrapper {}; 28 29 namespace OHOS { 30 class SurfaceBufferImpl : public SurfaceBuffer { 31 public: 32 SurfaceBufferImpl(); 33 SurfaceBufferImpl(uint32_t seqNum); 34 virtual ~SurfaceBufferImpl(); 35 36 GSError Alloc(const BufferRequestConfig &config) override; 37 GSError Map() override; 38 GSError Unmap() override; 39 GSError FlushCache() override; 40 GSError InvalidateCache() override; 41 42 BufferHandle *GetBufferHandle() const override; 43 int32_t GetWidth() const override; 44 int32_t GetHeight() const override; 45 int32_t GetStride() const override; 46 int32_t GetFormat() const override; 47 uint64_t GetUsage() const override; 48 uint64_t GetPhyAddr() const override; 49 void* GetVirAddr() override; 50 int32_t GetFileDescriptor() const override; 51 uint32_t GetSize() const override; 52 53 GraphicColorGamut GetSurfaceBufferColorGamut() const override; 54 GraphicTransformType GetSurfaceBufferTransform() const override; 55 void SetSurfaceBufferColorGamut(const GraphicColorGamut& colorGamut) override; 56 void SetSurfaceBufferTransform(const GraphicTransformType& transform) override; 57 58 int32_t GetSurfaceBufferWidth() const override; 59 int32_t GetSurfaceBufferHeight() const override; 60 void SetSurfaceBufferWidth(int32_t width) override; 61 void SetSurfaceBufferHeight(int32_t width) override; 62 63 uint32_t GetSeqNum() const override; 64 65 void SetExtraData(sptr<BufferExtraData> bedata) override; 66 sptr<BufferExtraData> GetExtraData() const override; 67 68 void SetBufferHandle(BufferHandle *handle) override; 69 GSError WriteToMessageParcel(MessageParcel &parcel) override; 70 GSError ReadFromMessageParcel(MessageParcel &parcel, 71 std::function<int(MessageParcel &parcel, 72 std::function<int(Parcel &)>readFdDefaultFunc)>readSafeFdFunc = nullptr) override; 73 74 OH_NativeBuffer* SurfaceBufferToNativeBuffer() override; 75 76 static GSError CheckBufferConfig(int32_t width, int32_t height, 77 int32_t format, uint64_t usage); 78 79 // metadata 80 GSError SetMetadata(uint32_t key, const std::vector<uint8_t>& value, bool enableCache = true) override; 81 GSError GetMetadata(uint32_t key, std::vector<uint8_t>& value) override; 82 GSError ListMetadataKeys(std::vector<uint32_t>& keys) override; 83 GSError EraseMetadataKey(uint32_t key) override; 84 85 void SetCropMetadata(const Rect& crop) override; 86 bool GetCropMetadata(Rect& crop) override; 87 88 GSError WriteBufferRequestConfig(MessageParcel &parcel) override; 89 GSError ReadBufferRequestConfig(MessageParcel &parcel) override; 90 BufferRequestConfig GetBufferRequestConfig() const override; 91 void SetBufferRequestConfig(const BufferRequestConfig &config) override; 92 void SetConsumerAttachBufferFlag(bool value) override; 93 bool GetConsumerAttachBufferFlag() override; 94 GSError GetPlanesInfo(void **planesInfo) override; 95 void SetSurfaceBufferScalingMode(const ScalingMode &scalingMode) override; 96 ScalingMode GetSurfaceBufferScalingMode() const override; 97 void SetBufferDeleteFromCacheFlag(const bool &flag) override; 98 bool GetBufferDeleteFromCacheFlag() const override; 99 100 private: 101 void FreeBufferHandleLocked(); 102 bool MetaDataCachedLocked(const uint32_t key, const std::vector<uint8_t>& value); 103 GSError GetImageLayout(void *layout); 104 105 BufferHandle *handle_ = nullptr; 106 uint32_t sequenceNumber_ = UINT32_MAX; 107 sptr<BufferExtraData> bedata_ = nullptr; 108 sptr<EglData> eglData_ = nullptr; 109 GraphicColorGamut surfaceBufferColorGamut_ = GraphicColorGamut::GRAPHIC_COLOR_GAMUT_SRGB; 110 GraphicTransformType transform_ = GraphicTransformType::GRAPHIC_ROTATE_NONE; 111 ScalingMode scalingMode_ = ScalingMode::SCALING_MODE_SCALE_TO_WINDOW; 112 int32_t surfaceBufferWidth_ = 0; 113 int32_t surfaceBufferHeight_ = 0; 114 mutable std::mutex mutex_; 115 OH_NativeBuffer_Planes planesInfo_ = {0, {}}; 116 BufferRequestConfig bufferRequestConfig_ = {0, 0, 0, 0, 0, 0}; 117 bool isConsumerAttachBufferFlag_ = false; 118 std::map<uint32_t, std::vector<uint8_t>> metaDataCache_; 119 Rect crop_ = {0, 0, 0, 0}; 120 std::atomic<bool> isBufferDeleteFromCache = false; 121 }; 122 } // namespace OHOS 123 124 #endif // FRAMEWORKS_SURFACE_INCLUDE_SURFACE_BUFFER_IMPL_H 125