From 729851922f9a274b830706ea24c9cd6cc40503c9 Mon Sep 17 00:00:00 2001 From: fanzhihao8 Date: Fri, 8 Aug 2025 17:52:48 +0800 Subject: [PATCH 1/5] fix before into ffmpeg Signed-off-by: fanzhihao8 --- .../src/image_format_convert_utils.cpp | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/frameworks/innerkitsimpl/converter/src/image_format_convert_utils.cpp b/frameworks/innerkitsimpl/converter/src/image_format_convert_utils.cpp index 57433e31f..c0cdb0a11 100644 --- a/frameworks/innerkitsimpl/converter/src/image_format_convert_utils.cpp +++ b/frameworks/innerkitsimpl/converter/src/image_format_convert_utils.cpp @@ -1132,6 +1132,54 @@ static bool YuvToYuvParam(const YUVDataInfo &yDInfo, SrcConvertParam &srcParam, return true; } +static bool AlignBufferCore(const ImageInfo& srcImageInfo, const uint8_t* buffer, + SrcConvertParam& srcParam, std::unique_ptr& copySrcBuffer) +{ + if (srcImageInfo.size.width <= 0 || srcImageInfo.size.height <= 0) { + IMAGE_LOGE("Invalid src width(%{public}d) or height(%{public}d)", + srcImageInfo.size.width, srcImageInfo.size.height); + return false; + } + int32_t copyWidth = srcImageInfo.size.width; + int32_t copyHeight = srcImageInfo.size.height; + + if (srcImageInfo.size.width % EVEN_ALIGNMENT != 0 || srcImageInfo.size.height % EVEN_ALIGNMENT != 0) { + if (!ImageUtils::GetAlignedNumber(copyWidth, EVEN_ALIGNMENT) || + !ImageUtils::GetAlignedNumber(copyHeight, EVEN_ALIGNMENT)) { + IMAGE_LOGE("Failed to get aligned width/height"); + return false; + } + + ImageInfo copyImageInfo = srcImageInfo; + copyImageInfo.size.width = copyWidth; + copyImageInfo.size.height = copyHeight; + int32_t copySrcLen = ImageUtils::GetByteCount(copyImageInfo); + int32_t srcDataLen = ImageUtils::GetByteCount(srcImageInfo); + if (srcDataLen <= 0 || copySrcLen <= 0) { + IMAGE_LOGE("Invalid data length: srcLen(%{public}d), copyLen(%{public}d)", srcDataLen, copySrcLen); + return false; + } + + copySrcBuffer = std::make_unique(copySrcLen); + if (copySrcBuffer == nullptr || EOK != memcpy_s(copySrcBuffer.get(), copySrcLen, buffer, srcDataLen)) { + IMAGE_LOGE("alloc memory or memcpy_s failed!"); + return false; + } + srcParam.buffer = copySrcBuffer.get(); + } + return true; +} + +static bool AlignSrcBuffer(const YUVDataInfo& yDInfo, PixelFormat srcFormat, const uint8_t* srcBuffer, + SrcConvertParam& srcParam, std::unique_ptr& copySrcBuffer) +{ + ImageInfo srcImageInfo = { + .size = {static_cast(yDInfo.yWidth), static_cast(yDInfo.yHeight)}, + .pixelFormat = srcFormat + }; + return AlignBufferCore(srcImageInfo, srcBuffer, srcParam, copySrcBuffer); +} + static bool YuvToYuv(const uint8_t *srcBuffer, const YUVDataInfo &yDInfo, PixelFormat srcFormat, DestConvertInfo &destInfo, PixelFormat destFormat) { @@ -1167,6 +1215,11 @@ static bool YuvToRGB(const uint8_t *srcBuffer, const YUVDataInfo &yDInfo, PixelF SrcConvertParam srcParam = {yDInfo.yWidth, yDInfo.yHeight}; srcParam.format = srcFormat; srcParam.buffer = srcBuffer; + std::unique_ptr copySrcBuffer; + if (!AlignSrcBuffer(yDInfo, srcFormat, srcBuffer, srcParam, copySrcBuffer)) { + IMAGE_LOGE("Failed to prepare aligned src buffer for YuvToRGB"); + return false; + } DestConvertParam destParam = {destInfo.width, destInfo.height}; destParam.format = destFormat; -- Gitee From 564766fa084ba1c2c87ae5faddc09479a86c5346 Mon Sep 17 00:00:00 2001 From: fanzhihao8 Date: Fri, 8 Aug 2025 17:58:08 +0800 Subject: [PATCH 2/5] fix before into ffmpeg Signed-off-by: fanzhihao8 --- .../innerkitsimpl/converter/src/image_format_convert_utils.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/frameworks/innerkitsimpl/converter/src/image_format_convert_utils.cpp b/frameworks/innerkitsimpl/converter/src/image_format_convert_utils.cpp index c0cdb0a11..bb1f8374a 100644 --- a/frameworks/innerkitsimpl/converter/src/image_format_convert_utils.cpp +++ b/frameworks/innerkitsimpl/converter/src/image_format_convert_utils.cpp @@ -1215,6 +1215,7 @@ static bool YuvToRGB(const uint8_t *srcBuffer, const YUVDataInfo &yDInfo, PixelF SrcConvertParam srcParam = {yDInfo.yWidth, yDInfo.yHeight}; srcParam.format = srcFormat; srcParam.buffer = srcBuffer; + std::unique_ptr copySrcBuffer; if (!AlignSrcBuffer(yDInfo, srcFormat, srcBuffer, srcParam, copySrcBuffer)) { IMAGE_LOGE("Failed to prepare aligned src buffer for YuvToRGB"); -- Gitee From 01e9cb628f678746e6c4266bc21f692c0b0be828 Mon Sep 17 00:00:00 2001 From: fanzhihao8 Date: Fri, 8 Aug 2025 18:27:48 +0800 Subject: [PATCH 3/5] fix before into ffmpeg Signed-off-by: fanzhihao8 --- .../converter/src/image_format_convert_utils.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/frameworks/innerkitsimpl/converter/src/image_format_convert_utils.cpp b/frameworks/innerkitsimpl/converter/src/image_format_convert_utils.cpp index bb1f8374a..df0fc5a02 100644 --- a/frameworks/innerkitsimpl/converter/src/image_format_convert_utils.cpp +++ b/frameworks/innerkitsimpl/converter/src/image_format_convert_utils.cpp @@ -1133,11 +1133,11 @@ static bool YuvToYuvParam(const YUVDataInfo &yDInfo, SrcConvertParam &srcParam, } static bool AlignBufferCore(const ImageInfo& srcImageInfo, const uint8_t* buffer, - SrcConvertParam& srcParam, std::unique_ptr& copySrcBuffer) + SrcConvertParam& srcParam, std::unique_ptr& copySrcBuffer) { if (srcImageInfo.size.width <= 0 || srcImageInfo.size.height <= 0) { - IMAGE_LOGE("Invalid src width(%{public}d) or height(%{public}d)", - srcImageInfo.size.width, srcImageInfo.size.height); + IMAGE_LOGE("Invalid src width(%{public}d) or height(%{public}d)", + srcImageInfo.size.width, srcImageInfo.size.height); return false; } int32_t copyWidth = srcImageInfo.size.width; @@ -1171,7 +1171,7 @@ static bool AlignBufferCore(const ImageInfo& srcImageInfo, const uint8_t* buffer } static bool AlignSrcBuffer(const YUVDataInfo& yDInfo, PixelFormat srcFormat, const uint8_t* srcBuffer, - SrcConvertParam& srcParam, std::unique_ptr& copySrcBuffer) + SrcConvertParam& srcParam, std::unique_ptr& copySrcBuffer) { ImageInfo srcImageInfo = { .size = {static_cast(yDInfo.yWidth), static_cast(yDInfo.yHeight)}, -- Gitee From 95aee6fea19fe5e35cbf76654068a6b1fce5dcfe Mon Sep 17 00:00:00 2001 From: fanzhihao8 Date: Fri, 8 Aug 2025 18:35:16 +0800 Subject: [PATCH 4/5] fix before into ffmpeg Signed-off-by: fanzhihao8 --- .../converter/src/image_format_convert_utils.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frameworks/innerkitsimpl/converter/src/image_format_convert_utils.cpp b/frameworks/innerkitsimpl/converter/src/image_format_convert_utils.cpp index df0fc5a02..67f169f75 100644 --- a/frameworks/innerkitsimpl/converter/src/image_format_convert_utils.cpp +++ b/frameworks/innerkitsimpl/converter/src/image_format_convert_utils.cpp @@ -1137,7 +1137,7 @@ static bool AlignBufferCore(const ImageInfo& srcImageInfo, const uint8_t* buffer { if (srcImageInfo.size.width <= 0 || srcImageInfo.size.height <= 0) { IMAGE_LOGE("Invalid src width(%{public}d) or height(%{public}d)", - srcImageInfo.size.width, srcImageInfo.size.height); + srcImageInfo.size.width, srcImageInfo.size.height); return false; } int32_t copyWidth = srcImageInfo.size.width; @@ -1171,7 +1171,7 @@ static bool AlignBufferCore(const ImageInfo& srcImageInfo, const uint8_t* buffer } static bool AlignSrcBuffer(const YUVDataInfo& yDInfo, PixelFormat srcFormat, const uint8_t* srcBuffer, - SrcConvertParam& srcParam, std::unique_ptr& copySrcBuffer) + SrcConvertParam& srcParam, std::unique_ptr& copySrcBuffer) { ImageInfo srcImageInfo = { .size = {static_cast(yDInfo.yWidth), static_cast(yDInfo.yHeight)}, -- Gitee From 68931545cd6d0cf066285837d4296ed8306bf8f1 Mon Sep 17 00:00:00 2001 From: fanzhihao8 Date: Fri, 8 Aug 2025 18:44:40 +0800 Subject: [PATCH 5/5] fix before into ffmpeg Signed-off-by: fanzhihao8 --- .../innerkitsimpl/converter/src/image_format_convert_utils.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frameworks/innerkitsimpl/converter/src/image_format_convert_utils.cpp b/frameworks/innerkitsimpl/converter/src/image_format_convert_utils.cpp index 67f169f75..b76d9b353 100644 --- a/frameworks/innerkitsimpl/converter/src/image_format_convert_utils.cpp +++ b/frameworks/innerkitsimpl/converter/src/image_format_convert_utils.cpp @@ -1137,7 +1137,7 @@ static bool AlignBufferCore(const ImageInfo& srcImageInfo, const uint8_t* buffer { if (srcImageInfo.size.width <= 0 || srcImageInfo.size.height <= 0) { IMAGE_LOGE("Invalid src width(%{public}d) or height(%{public}d)", - srcImageInfo.size.width, srcImageInfo.size.height); + srcImageInfo.size.width, srcImageInfo.size.height); return false; } int32_t copyWidth = srcImageInfo.size.width; -- Gitee