/*
- * Copyright (c) 2023 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2024 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
#include <dali/internal/imaging/common/pixel-buffer-impl.h>
// EXTERNAL INCLUDES
+#include <dali/integration-api/pixel-data-integ.h>
#include <stdlib.h>
#include <cstring>
if(bufferSize > 0)
{
buffer = static_cast<uint8_t*>(malloc(bufferSize));
+ if(DALI_UNLIKELY(!buffer))
+ {
+ DALI_LOG_ERROR("malloc is failed. request malloc size : %u\n", bufferSize);
+ }
#if defined(DEBUG_ENABLED)
gPixelBufferAllocationTotal += bufferSize;
#endif
return new PixelBuffer(buffer, bufferSize, width, height, stride, pixelFormat);
}
-Dali::PixelData PixelBuffer::Convert(PixelBuffer& pixelBuffer)
+Dali::PixelData PixelBuffer::Convert(PixelBuffer& pixelBuffer, bool releaseAfterUpload)
{
#if defined(DEBUG_ENABLED)
gPixelBufferAllocationTotal -= pixelBuffer.mBufferSize;
#endif
- Dali::PixelData pixelData = Dali::PixelData::New(pixelBuffer.mBuffer,
- pixelBuffer.mBufferSize,
- pixelBuffer.mWidth,
- pixelBuffer.mHeight,
- pixelBuffer.mStride,
- pixelBuffer.mPixelFormat,
- Dali::PixelData::FREE);
- pixelBuffer.mBuffer = NULL;
- pixelBuffer.mWidth = 0;
- pixelBuffer.mHeight = 0;
- pixelBuffer.mBufferSize = 0;
- pixelBuffer.mStride = 0;
+ Dali::PixelData pixelData;
+ if(releaseAfterUpload)
+ {
+ pixelData = Dali::Integration::NewPixelDataWithReleaseAfterUpload(pixelBuffer.mBuffer,
+ pixelBuffer.mBufferSize,
+ pixelBuffer.mWidth,
+ pixelBuffer.mHeight,
+ pixelBuffer.mStride,
+ pixelBuffer.mPixelFormat,
+ Dali::PixelData::FREE);
+ }
+ else
+ {
+ pixelData = Dali::PixelData::New(pixelBuffer.mBuffer,
+ pixelBuffer.mBufferSize,
+ pixelBuffer.mWidth,
+ pixelBuffer.mHeight,
+ pixelBuffer.mStride,
+ pixelBuffer.mPixelFormat,
+ Dali::PixelData::FREE);
+ }
+ pixelBuffer.mBuffer = NULL;
+ pixelBuffer.mWidth = 0;
+ pixelBuffer.mHeight = 0;
+ pixelBuffer.mBufferSize = 0;
+ pixelBuffer.mStride = 0;
return pixelData;
}
if(mBufferSize > 0)
{
destBuffer = static_cast<uint8_t*>(malloc(mBufferSize));
+ if(DALI_UNLIKELY(!destBuffer))
+ {
+ DALI_LOG_ERROR("malloc is failed. request malloc size : %u\n", mBufferSize);
+ return Dali::PixelData();
+ }
memcpy(destBuffer, mBuffer, mBufferSize);
}
gPixelBufferAllocationTotal -= mBufferSize;
#endif
free(mBuffer);
+ mBuffer = nullptr;
}
}
ReleaseBuffer();
mBuffer = reinterpret_cast<unsigned char*>(malloc(size));
mBufferSize = size;
+ if(DALI_UNLIKELY(!mBuffer))
+ {
+ DALI_LOG_ERROR("malloc is failed. request malloc size : %u\n", mBufferSize);
+ }
#if defined(DEBUG_ENABLED)
gPixelBufferAllocationTotal += size;
#endif
pixelsOut = nullptr;
mBufferSize = mWidth * mHeight * pixelSize;
mStride = mWidth; // The buffer is tightly packed.
+
+#if defined(DEBUG_ENABLED)
+ gPixelBufferAllocationTotal += mBufferSize;
+#endif
}
return success;