• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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