Files
graphic_graphic_surface/surface/include/surface_buffer_impl.h
T
李辉 3262831cd9 add GetSurfaceBufferScalingMode interface
Signed-off-by: 李辉 <lihui359@huawei.com>
Change-Id: I7ffd9e3a141b7f0b056205f417355724963154d2
2024-11-02 06:06:47 +00:00

116 lines
4.6 KiB
C++

/*
* 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 <buffer_extra_data.h>
#include <buffer_handle_parcel.h>
#include <buffer_handle_utils.h>
#include <surface_buffer.h>
#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;
void SetExtraData(sptr<BufferExtraData> bedata) override;
sptr<BufferExtraData> 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);
// metadata
GSError SetMetadata(uint32_t key, const std::vector<uint8_t>& value) override;
GSError GetMetadata(uint32_t key, std::vector<uint8_t>& value) override;
GSError ListMetadataKeys(std::vector<uint32_t>& 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<uint8_t>& value);
GSError GetImageLayout(void *layout);
BufferHandle *handle_ = nullptr;
uint32_t sequenceNumber_ = UINT32_MAX;
sptr<BufferExtraData> bedata_ = nullptr;
sptr<EglData> 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<uint32_t, std::vector<uint8_t>> metaDataCache_;
};
} // namespace OHOS
#endif // FRAMEWORKS_SURFACE_INCLUDE_SURFACE_BUFFER_IMPL_H