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 "stdint.h" 25 26 struct BufferWrapper {}; 27 28 namespace OHOS { 29 class SurfaceBufferImpl : public SurfaceBuffer { 30 public: 31 static void DisplayBufferDeathCallback(void* data); 32 33 SurfaceBufferImpl(); 34 SurfaceBufferImpl(uint32_t seqNum); 35 virtual ~SurfaceBufferImpl(); 36 37 static SurfaceBufferImpl *FromBase(const sptr<SurfaceBuffer>& buffer); 38 39 GSError Alloc(const BufferRequestConfig &config) override; 40 GSError Map() override; 41 GSError Unmap() override; 42 GSError FlushCache() override; 43 GSError InvalidateCache() override; 44 45 BufferHandle *GetBufferHandle() const override; 46 int32_t GetWidth() const override; 47 int32_t GetHeight() const override; 48 int32_t GetStride() const override; 49 int32_t GetFormat() const override; 50 uint64_t GetUsage() const override; 51 uint64_t GetPhyAddr() const override; 52 void *GetVirAddr() override; 53 int32_t GetFileDescriptor() const override; 54 uint32_t GetSize() const override; 55 56 const GraphicColorGamut& GetSurfaceBufferColorGamut() const override; 57 const GraphicTransformType& GetSurfaceBufferTransform() const override; 58 void SetSurfaceBufferColorGamut(const GraphicColorGamut& colorGamut) override; 59 void SetSurfaceBufferTransform(const GraphicTransformType& transform) override; 60 61 int32_t GetSurfaceBufferWidth() const override; 62 int32_t GetSurfaceBufferHeight() const override; 63 void SetSurfaceBufferWidth(int32_t width) override; 64 void SetSurfaceBufferHeight(int32_t width) override; 65 66 uint32_t GetSeqNum() const override; 67 68 sptr<EglData> GetEglData() const override; 69 void SetEglData(const sptr<EglData>& data) override; 70 71 void SetExtraData(const sptr<BufferExtraData> &bedata) override; 72 const sptr<BufferExtraData>& GetExtraData() const override; 73 74 void SetBufferHandle(BufferHandle *handle) override; 75 GSError WriteToMessageParcel(MessageParcel &parcel) override; 76 GSError ReadFromMessageParcel(MessageParcel &parcel) override; 77 78 OH_NativeBuffer* SurfaceBufferToNativeBuffer() override; 79 80 static GSError CheckBufferConfig(int32_t width, int32_t height, 81 int32_t format, uint64_t usage); 82 83 BufferWrapper GetBufferWrapper() override; 84 void SetBufferWrapper(BufferWrapper wrapper) override; 85 86 // metadata 87 GSError SetMetadata(uint32_t key, const std::vector<uint8_t>& value) override; 88 GSError GetMetadata(uint32_t key, std::vector<uint8_t>& value) override; 89 GSError ListMetadataKeys(std::vector<uint32_t>& keys) override; 90 GSError EraseMetadataKey(uint32_t key) override; 91 92 private: 93 void FreeBufferHandleLocked(); 94 95 BufferHandle *handle_ = nullptr; 96 uint32_t sequenceNumber_ = UINT32_MAX; 97 sptr<BufferExtraData> bedata_ = nullptr; 98 sptr<EglData> eglData_ = nullptr; 99 GraphicColorGamut surfaceBufferColorGamut_ = GraphicColorGamut::GRAPHIC_COLOR_GAMUT_SRGB; 100 GraphicTransformType transform_ = GraphicTransformType::GRAPHIC_ROTATE_NONE; 101 int32_t surfaceBufferWidth_ = 0; 102 int32_t surfaceBufferHeight_ = 0; 103 mutable std::mutex mutex_; 104 }; 105 } // namespace OHOS 106 107 #endif // FRAMEWORKS_SURFACE_INCLUDE_SURFACE_BUFFER_IMPL_H 108