#define DALI_INTERNAL_PIXEL_DATA_H
/*
- * Copyright (c) 2018 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2022 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.
*/
// INTERNAL INCLUDES
+#include <dali/devel-api/images/pixel-data-devel.h>
+#include <dali/integration-api/debug.h>
#include <dali/public-api/images/pixel-data.h>
#include <dali/public-api/object/base-object.h>
-#include <dali/devel-api/images/pixel-data-devel.h>
namespace Dali
{
-
namespace Internal
{
-
class PixelData;
-typedef IntrusivePtr<PixelData> PixelDataPtr;
+using PixelDataPtr = IntrusivePtr<PixelData>;
class PixelData : public BaseObject
{
public:
-
/**
* @brief Create a PixelData object.
*
* @param [in] bufferSize The size of the buffer in bytes
* @param [in] width Buffer width in pixels
* @param [in] height Buffer height in pixels
+ * @param [in] stride Buffer stride in pixels, 0 means the buffer is tightly packed
* @param [in] pixelFormat The pixel format
* @param [in] releaseFunction The function used to release the memory.
*/
- static PixelDataPtr New( uint8_t* buffer,
- uint32_t bufferSize,
- uint32_t width,
- uint32_t height,
- Pixel::Format pixelFormat,
- Dali::PixelData::ReleaseFunction releaseFunction);
+ static PixelDataPtr New(uint8_t* buffer,
+ uint32_t bufferSize,
+ uint32_t width,
+ uint32_t height,
+ uint32_t stride,
+ Pixel::Format pixelFormat,
+ Dali::PixelData::ReleaseFunction releaseFunction);
/**
* @brief Constructor.
* @param [in] bufferSize The size of the buffer in bytes
* @param [in] width Buffer width in pixels
* @param [in] height Buffer height in pixels
+ * @param [in] stride Buffer stride in pixels, 0 means the buffer is tightly packed
* @param [in] pixelFormat The pixel format
* @param [in] releaseFunction The function used to release the memory.
*/
- PixelData( uint8_t* buffer,
- uint32_t bufferSize,
- uint32_t width,
- uint32_t height,
- Pixel::Format pixelFormat,
- Dali::PixelData::ReleaseFunction releaseFunction );
+ PixelData(uint8_t* buffer,
+ uint32_t bufferSize,
+ uint32_t width,
+ uint32_t height,
+ uint32_t stride,
+ Pixel::Format pixelFormat,
+ Dali::PixelData::ReleaseFunction releaseFunction);
protected:
-
/**
* @brief Destructor.
*
* Release the pixel buffer if exists.
*/
- ~PixelData();
+ ~PixelData() override;
public:
-
/**
* Get the width of the buffer in pixels.
* @return The width of the buffer in pixels
*/
DevelPixelData::PixelDataBuffer ReleaseBuffer();
-private:
+ /**
+ * @copydoc PixelData::GetStride()
+ */
+ uint32_t GetStride() const;
+ /**
+ * Class method to get the total currently allocated size of pixel buffers
+ */
+ static uint32_t GetTotalAllocatedSize()
+ {
+#if defined(DEBUG_ENABLED)
+ return gPixelDataAllocationTotal;
+#else
+ return 0;
+#endif
+ }
+
+private:
/*
* Undefined copy constructor.
*/
/*
* Undefined assignment operator.
*/
- PixelData& operator = (const PixelData& other);
+ PixelData& operator=(const PixelData& other);
private:
-
- uint8_t* mBuffer; ///< The raw pixel data
- uint32_t mBufferSize; ///< Buffer sized in bytes
- uint32_t mWidth; ///< Buffer width in pixels
- uint32_t mHeight; ///< Buffer height in pixels
- Pixel::Format mPixelFormat; ///< Pixel format
- Dali::PixelData::ReleaseFunction mReleaseFunction; ///< Function for releasing memory
+ uint8_t* mBuffer; ///< The raw pixel data
+ uint32_t mBufferSize; ///< Buffer size in bytes
+ uint32_t mWidth; ///< Buffer width in pixels
+ uint32_t mHeight; ///< Buffer height in pixels
+ uint32_t mStride; ///< Buffer stride in pixels, 0 means the buffer is tightly packed
+ Pixel::Format mPixelFormat; ///< Pixel format
+ Dali::PixelData::ReleaseFunction mReleaseFunction; ///< Function for releasing memory
+
+#if defined(DEBUG_ENABLED)
+ static uint32_t gPixelDataAllocationTotal;
+#endif
};
} // namespace Internal
/**
* Helper methods for public API
*/
-inline Internal::PixelData& GetImplementation( Dali::PixelData& handle )
+inline Internal::PixelData& GetImplementation(Dali::PixelData& handle)
{
- DALI_ASSERT_ALWAYS( handle && "handle is empty" );
+ DALI_ASSERT_ALWAYS(handle && "handle is empty");
BaseObject& object = handle.GetBaseObject();
- return static_cast<Internal::PixelData&>( object );
+ return static_cast<Internal::PixelData&>(object);
}
-inline const Internal::PixelData& GetImplementation( const Dali::PixelData& handle )
+inline const Internal::PixelData& GetImplementation(const Dali::PixelData& handle)
{
- DALI_ASSERT_ALWAYS( handle && "handle is empty" );
+ DALI_ASSERT_ALWAYS(handle && "handle is empty");
const BaseObject& object = handle.GetBaseObject();
- return static_cast<const Internal::PixelData&>( object );
+ return static_cast<const Internal::PixelData&>(object);
}
} // namespace Dali