From 60a985bda9296ec2932346cbc9924420f08019f6 Mon Sep 17 00:00:00 2001 From: Podlesny Viktor Date: Mon, 18 Nov 2024 17:50:47 +0300 Subject: [PATCH] Pixelmap Signed-off-by: Podlesny Viktor --- .../innerkitsimpl/common/src/pixel_map.cpp | 30 ++++++++++++++----- interfaces/innerkits/include/pixel_map.h | 12 ++++++++ 2 files changed, 34 insertions(+), 8 deletions(-) diff --git a/frameworks/innerkitsimpl/common/src/pixel_map.cpp b/frameworks/innerkitsimpl/common/src/pixel_map.cpp index b3b13130e..1500148bc 100644 --- a/frameworks/innerkitsimpl/common/src/pixel_map.cpp +++ b/frameworks/innerkitsimpl/common/src/pixel_map.cpp @@ -2739,12 +2739,10 @@ PixelMap *PixelMap::Unmarshalling(Parcel &parcel) return dstPixelMap; } -PixelMap *PixelMap::Unmarshalling(Parcel &parcel, PIXEL_MAP_ERR &error) +PixelMap *PixelMap::StartUnmarshalling(Parcel &parcel, ImageInfo &imgInfo, + PixelMemInfo& pixelMemInfo, PIXEL_MAP_ERR &error) { - ImageInfo imgInfo; PixelMap* pixelMap = nullptr; - PixelMemInfo pixelMemInfo; - if (!ReadPropertiesFromParcel(parcel, pixelMap, imgInfo, pixelMemInfo)) { if (pixelMap == nullptr) { PixelMap::ConstructPixelMapError(error, ERR_IMAGE_PIXELMAP_CREATE_FAILED, "PixelMap creation failed"); @@ -2761,9 +2759,13 @@ PixelMap *PixelMap::Unmarshalling(Parcel &parcel, PIXEL_MAP_ERR &error) delete pixelMap; return nullptr; } - if (!ReadMemInfoFromParcel(parcel, pixelMemInfo, error)) { - IMAGE_LOGE("Unmarshalling: read memInfo failed"); - delete pixelMap; + return pixelMap; +} + +PixelMap *PixelMap::FinishUnmarshalling(PixelMap *pixelMap, Parcel &parcel, + ImageInfo &imgInfo, PixelMemInfo &pixelMemInfo, PIXEL_MAP_ERR &error) +{ + if (!pixelMap) { return nullptr; } if (!UpdatePixelMapMemInfo(pixelMap, imgInfo, pixelMemInfo)) { @@ -2781,10 +2783,22 @@ PixelMap *PixelMap::Unmarshalling(Parcel &parcel, PIXEL_MAP_ERR &error) delete pixelMap; return nullptr; } - return pixelMap; } +PixelMap *PixelMap::Unmarshalling(Parcel &parcel, PIXEL_MAP_ERR &error) +{ + ImageInfo imgInfo; + PixelMemInfo pixelMemInfo; + PixelMap* pixelMap = StartUnmarshalling(parcel, imgInfo, pixelMemInfo, error); + if (pixelMap && !ReadMemInfoFromParcel(parcel, pixelMemInfo, error)) { + IMAGE_LOGE("Unmarshalling: read memInfo failed"); + delete pixelMap; + return nullptr; + } + return FinishUnmarshalling(pixelMap, parcel, imgInfo, pixelMemInfo, error); +} + void PixelMap::WriteUint8(std::vector &buff, uint8_t value) const { buff.push_back(value); diff --git a/interfaces/innerkits/include/pixel_map.h b/interfaces/innerkits/include/pixel_map.h index ac23513ca..dfa4a6047 100644 --- a/interfaces/innerkits/include/pixel_map.h +++ b/interfaces/innerkits/include/pixel_map.h @@ -31,6 +31,11 @@ #include "purgeable_mem_builder.h" #endif +namespace OHOS::Rosen { +class PixelMapStorage; +class RSProfiler; +}; + namespace OHOS { namespace Media { struct HdrMetadata; @@ -389,6 +394,8 @@ protected: static constexpr size_t MAX_IMAGEDATA_SIZE = 128 * 1024 * 1024; // 128M static constexpr size_t MIN_IMAGEDATA_SIZE = 32 * 1024; // 32k friend class ImageSource; + friend class OHOS::Rosen::PixelMapStorage; + friend class OHOS::Rosen::RSProfiler; static bool ALPHA8ToARGB(const uint8_t *in, uint32_t inCount, uint32_t *out, uint32_t outCount); static bool RGB565ToARGB(const uint8_t *in, uint32_t inCount, uint32_t *out, uint32_t outCount); static bool ARGB8888ToARGB(const uint8_t *in, uint32_t inCount, uint32_t *out, uint32_t outCount); @@ -452,6 +459,11 @@ protected: : true; } + static PixelMap *StartUnmarshalling(Parcel &parcel, ImageInfo &imgInfo, + PixelMemInfo &pixelMemInfo, PIXEL_MAP_ERR &error); + static PixelMap *FinishUnmarshalling(PixelMap* pixelMap, Parcel &parcel, + ImageInfo &imgInfo, PixelMemInfo &pixelMemInfo, PIXEL_MAP_ERR &error); + static void ReleaseMemory(AllocatorType allocType, void *addr, void *context, uint32_t size); static bool UpdatePixelMapMemInfo(PixelMap *pixelMap, ImageInfo &imgInfo, PixelMemInfo &pixelMemInfo); bool WriteImageData(Parcel &parcel, size_t size) const; -- Gitee