1 /* 2 * Copyright (c) 2021 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 <idisplay_gralloc.h> 24 #include "egl_data.h" 25 #include "stdint.h" 26 27 struct BufferWrapper {}; 28 29 namespace OHOS { 30 class SurfaceBufferImpl : public SurfaceBuffer { 31 public: 32 using IDisplayGrallocSptr = std::shared_ptr<::OHOS::HDI::Display::V1_0::IDisplayGralloc>; 33 static IDisplayGrallocSptr GetDisplayGralloc(); 34 static void DisplayGrallocDeathCallback(void* data); 35 36 SurfaceBufferImpl(); 37 SurfaceBufferImpl(uint32_t seqNum); 38 virtual ~SurfaceBufferImpl(); 39 40 static SurfaceBufferImpl *FromBase(const sptr<SurfaceBuffer>& buffer); 41 42 GSError Alloc(const BufferRequestConfig &config) override; 43 GSError Map() override; 44 GSError Unmap() override; 45 GSError FlushCache() override; 46 GSError InvalidateCache() override; 47 48 BufferHandle *GetBufferHandle() const override; 49 int32_t GetWidth() const override; 50 int32_t GetHeight() const override; 51 int32_t GetStride() const override; 52 int32_t GetFormat() const override; 53 uint64_t GetUsage() const override; 54 uint64_t GetPhyAddr() const override; 55 int32_t GetKey() const override; 56 void *GetVirAddr() override; 57 int32_t GetFileDescriptor() const override; 58 uint32_t GetSize() const override; 59 60 const GraphicColorGamut& GetSurfaceBufferColorGamut() const override; 61 const GraphicTransformType& GetSurfaceBufferTransform() const override; 62 void SetSurfaceBufferColorGamut(const GraphicColorGamut& colorGamut) override; 63 void SetSurfaceBufferTransform(const GraphicTransformType& transform) override; 64 65 int32_t GetSurfaceBufferWidth() const override; 66 int32_t GetSurfaceBufferHeight() const override; 67 void SetSurfaceBufferWidth(int32_t width) override; 68 void SetSurfaceBufferHeight(int32_t width) override; 69 70 uint32_t GetSeqNum() const override; 71 72 sptr<EglData> GetEglData() const override; 73 void SetEglData(const sptr<EglData>& data) override; 74 75 void SetExtraData(const sptr<BufferExtraData> &bedata) override; 76 const sptr<BufferExtraData>& GetExtraData() const override; 77 78 void SetBufferHandle(BufferHandle *handle) override; 79 GSError WriteToMessageParcel(MessageParcel &parcel) override; 80 GSError ReadFromMessageParcel(MessageParcel &parcel) override; 81 82 OH_NativeBuffer* SurfaceBufferToNativeBuffer() override; 83 84 static GSError CheckBufferConfig(int32_t width, int32_t height, 85 int32_t format, uint64_t usage); 86 87 uint64_t BufferUsageToGrallocUsage(uint64_t bufferUsage); 88 89 BufferWrapper GetBufferWrapper() override; 90 void SetBufferWrapper(BufferWrapper wrapper) 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 static IDisplayGrallocSptr displayGralloc_; 106 static std::mutex displayGrallocMutex_; 107 }; 108 } // namespace OHOS 109 110 #endif // FRAMEWORKS_SURFACE_INCLUDE_SURFACE_BUFFER_IMPL_H 111