!2585 PixelMap 代码安全整改

Merge pull request !2585 from 陈乔异/cqy/icsl-fix
This commit is contained in:
openharmony_ci 2024-09-30 04:28:51 +00:00 committed by Gitee
commit 9d336f9df1
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
3 changed files with 26 additions and 24 deletions

View File

@ -178,6 +178,10 @@ uint32_t DmaMemory::Create()
return ERR_IMAGE_DATA_UNSUPPORT;
#else
sptr<SurfaceBuffer> sb = SurfaceBuffer::Create();
if (sb == nullptr) {
IMAGE_LOGE("SurfaceBuffer failed to be created");
return ERR_DMA_DATA_ABNORMAL;
}
GraphicPixelFormat format = GetRequestBufferFormatWithPixelFormat(data.format);
BufferRequestConfig requestConfig = {
.width = data.desiredSize.width,

View File

@ -39,7 +39,7 @@ struct ProcFuncExtension {
struct BufferInfo {
void *pixels;
int32_t rowStride;
const ImageInfo &imageInfo;
ImageInfo imageInfo;
};
// These values SHOULD be sync with image_type.h PixelFormat
@ -188,7 +188,7 @@ public:
static std::unique_ptr<PixelConvert> Create(const ImageInfo &srcInfo, const ImageInfo &dstInfo);
void Convert(void *destinationPixels, const uint8_t *sourcePixels, uint32_t sourcePixelsNum);
static int32_t PixelsConvert(const BufferInfo &srcInfo, BufferInfo &dstInfo, int32_t srcLength, bool useDMA);
static int32_t PixelsConvert(const BufferInfo &src, BufferInfo &dst, int32_t srcLength, bool useDMA);
private:
static AlphaConvertType GetAlphaConvertType(const AlphaType &srcType, const AlphaType &dstType);

View File

@ -1533,42 +1533,40 @@ static bool IsInterYUVConvert(PixelFormat srcPixelFormat, PixelFormat dstPixelFo
(dstPixelFormat == PixelFormat::NV12 || dstPixelFormat == PixelFormat::NV21);
}
int32_t PixelConvert::PixelsConvert(const BufferInfo &srcInfo, BufferInfo &dstInfo, int32_t srcLength, bool useDMA)
int32_t PixelConvert::PixelsConvert(const BufferInfo &src, BufferInfo &dst, int32_t srcLength, bool useDMA)
{
if (!IsValidBufferInfo(srcInfo) || !IsValidBufferInfo(dstInfo) || srcLength <= 0) {
if (!IsValidBufferInfo(src) || !IsValidBufferInfo(dst) || srcLength <= 0) {
IMAGE_LOGE("[PixelMap]Convert: pixels or image info or row stride or src pixels length invalid.");
return -1;
}
const ImageInfo srcImageInfo = srcInfo.imageInfo;
const ImageInfo dstImageInfo = dstInfo.imageInfo;
if (dstImageInfo.pixelFormat == PixelFormat::ARGB_8888) {
return ConvertAndCollapseByFFMpeg(srcInfo.pixels, srcImageInfo, dstInfo.pixels, dstImageInfo, useDMA) ?
PixelMap::GetRGBxByteCount(dstImageInfo) : -1;
if (dst.imageInfo.pixelFormat == PixelFormat::ARGB_8888) {
return ConvertAndCollapseByFFMpeg(src.pixels, src.imageInfo, dst.pixels, dst.imageInfo, useDMA) ?
PixelMap::GetRGBxByteCount(dst.imageInfo) : -1;
}
if (IsInterYUVConvert(srcImageInfo.pixelFormat, dstImageInfo.pixelFormat) ||
(IsYUVP010Format(srcImageInfo.pixelFormat) && IsYUVP010Format(dstImageInfo.pixelFormat))) {
return YUVConvert(srcInfo.pixels, srcLength, srcImageInfo, dstInfo.pixels, dstImageInfo);
if (IsInterYUVConvert(src.imageInfo.pixelFormat, dst.imageInfo.pixelFormat) ||
(IsYUVP010Format(src.imageInfo.pixelFormat) && IsYUVP010Format(dst.imageInfo.pixelFormat))) {
return YUVConvert(src.pixels, srcLength, src.imageInfo, dst.pixels, dst.imageInfo);
}
if (srcImageInfo.pixelFormat == PixelFormat::NV12 || srcImageInfo.pixelFormat == PixelFormat::NV21) {
return ConvertFromYUV(srcInfo.pixels, srcLength, srcImageInfo, dstInfo.pixels, dstImageInfo);
} else if (dstImageInfo.pixelFormat == PixelFormat::NV12 || dstImageInfo.pixelFormat == PixelFormat::NV21) {
return ConvertToYUV(srcInfo.pixels, srcLength, srcImageInfo, dstInfo.pixels, dstImageInfo);
} else if (IsYUVP010Format(srcImageInfo.pixelFormat)) {
return ConvertFromP010(srcInfo.pixels, srcLength, srcImageInfo, dstInfo.pixels, dstImageInfo);
} else if (IsYUVP010Format(dstImageInfo.pixelFormat)) {
return ConvertToP010(srcInfo.pixels, srcLength, srcImageInfo, dstInfo.pixels, dstImageInfo);
if (src.imageInfo.pixelFormat == PixelFormat::NV12 || src.imageInfo.pixelFormat == PixelFormat::NV21) {
return ConvertFromYUV(src.pixels, srcLength, src.imageInfo, dst.pixels, dst.imageInfo);
} else if (dst.imageInfo.pixelFormat == PixelFormat::NV12 || dst.imageInfo.pixelFormat == PixelFormat::NV21) {
return ConvertToYUV(src.pixels, srcLength, src.imageInfo, dst.pixels, dst.imageInfo);
} else if (IsYUVP010Format(src.imageInfo.pixelFormat)) {
return ConvertFromP010(src.pixels, srcLength, src.imageInfo, dst.pixels, dst.imageInfo);
} else if (IsYUVP010Format(dst.imageInfo.pixelFormat)) {
return ConvertToP010(src.pixels, srcLength, src.imageInfo, dst.pixels, dst.imageInfo);
}
Position pos;
if (!PixelConvertAdapter::WritePixelsConvert(srcInfo.pixels,
srcInfo.rowStride == 0 ? PixelMap::GetRGBxRowDataSize(srcImageInfo) : srcInfo.rowStride, srcImageInfo,
dstInfo.pixels, pos, useDMA ? dstInfo.rowStride : PixelMap::GetRGBxRowDataSize(dstImageInfo), dstImageInfo)) {
if (!PixelConvertAdapter::WritePixelsConvert(src.pixels,
src.rowStride == 0 ? PixelMap::GetRGBxRowDataSize(src.imageInfo) : src.rowStride, src.imageInfo,
dst.pixels, pos, useDMA ? dst.rowStride : PixelMap::GetRGBxRowDataSize(dst.imageInfo), dst.imageInfo)) {
IMAGE_LOGE("[PixelMap]Convert: PixelsConvert: pixel convert in adapter failed.");
return -1;
}
return PixelMap::GetRGBxByteCount(dstImageInfo);
return PixelMap::GetRGBxByteCount(dst.imageInfo);
}
PixelConvert::PixelConvert(ProcFuncType funcPtr, ProcFuncExtension extension, bool isNeedConvert)