From 5f8c9a246d6469de2f7966e48c754188c64bd2dd Mon Sep 17 00:00:00 2001 From: Heeyong Song Date: Mon, 14 Feb 2022 15:43:13 +0900 Subject: [PATCH] [Tizen] Add stride to PixelBuffer Change-Id: I65a8dfcc95f1f7d6378f661628de3fa5d0f6c9cc --- .../graphics/gles-impl/egl-graphics-controller.cpp | 4 +++- dali/internal/imaging/common/pixel-buffer-impl.cpp | 19 ++++++++++++++---- dali/internal/imaging/common/pixel-buffer-impl.h | 23 ++++++++++++++++------ 3 files changed, 35 insertions(+), 11 deletions(-) diff --git a/dali/internal/graphics/gles-impl/egl-graphics-controller.cpp b/dali/internal/graphics/gles-impl/egl-graphics-controller.cpp index eec74af..be9c35b 100644 --- a/dali/internal/graphics/gles-impl/egl-graphics-controller.cpp +++ b/dali/internal/graphics/gles-impl/egl-graphics-controller.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021 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. @@ -638,6 +638,8 @@ void EglGraphicsController::ProcessTextureUpdateQueue() } mGlAbstraction->PixelStorei(GL_UNPACK_ALIGNMENT, 1); + mGlAbstraction->PixelStorei(GL_UNPACK_ROW_LENGTH, info.srcStride); + mCurrentContext->BindTexture(bindTarget, texture->GetTextureTypeId(), texture->GetGLTexture()); if(!isSubImage) diff --git a/dali/internal/imaging/common/pixel-buffer-impl.cpp b/dali/internal/imaging/common/pixel-buffer-impl.cpp index 6ed2e31..dda794a 100644 --- a/dali/internal/imaging/common/pixel-buffer-impl.cpp +++ b/dali/internal/imaging/common/pixel-buffer-impl.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021 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. @@ -47,12 +47,14 @@ PixelBuffer::PixelBuffer(unsigned char* buffer, unsigned int bufferSize, unsigned int width, unsigned int height, + unsigned int stride, Dali::Pixel::Format pixelFormat) : mMetadata(), mBuffer(buffer), mBufferSize(bufferSize), mWidth(width), mHeight(height), + mStride(stride ? stride : width), mPixelFormat(pixelFormat), mPreMultiplied(false) { @@ -73,16 +75,17 @@ PixelBufferPtr PixelBuffer::New(unsigned int width, { buffer = static_cast(malloc(bufferSize)); } - return new PixelBuffer(buffer, bufferSize, width, height, pixelFormat); + return new PixelBuffer(buffer, bufferSize, width, height, width, pixelFormat); } PixelBufferPtr PixelBuffer::New(unsigned char* buffer, unsigned int bufferSize, unsigned int width, unsigned int height, + unsigned int stride, Dali::Pixel::Format pixelFormat) { - return new PixelBuffer(buffer, bufferSize, width, height, pixelFormat); + return new PixelBuffer(buffer, bufferSize, width, height, stride, pixelFormat); } Dali::PixelData PixelBuffer::Convert(PixelBuffer& pixelBuffer) @@ -91,12 +94,14 @@ Dali::PixelData PixelBuffer::Convert(PixelBuffer& pixelBuffer) 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; } @@ -111,6 +116,11 @@ unsigned int PixelBuffer::GetHeight() const return mHeight; } +uint32_t PixelBuffer::GetStride() const +{ + return mStride; +} + Dali::Pixel::Format PixelBuffer::GetPixelFormat() const { return mPixelFormat; @@ -141,7 +151,7 @@ Dali::PixelData PixelBuffer::CreatePixelData() const memcpy(destBuffer, mBuffer, mBufferSize); } - Dali::PixelData pixelData = Dali::PixelData::New(destBuffer, mBufferSize, mWidth, mHeight, mPixelFormat, Dali::PixelData::FREE); + Dali::PixelData pixelData = Dali::PixelData::New(destBuffer, mBufferSize, mWidth, mHeight, mStride, mPixelFormat, Dali::PixelData::FREE); return pixelData; } @@ -201,6 +211,7 @@ void PixelBuffer::TakeOwnershipOfBuffer(PixelBuffer& pixelBuffer) mBufferSize = pixelBuffer.mBufferSize; mWidth = pixelBuffer.mWidth; mHeight = pixelBuffer.mHeight; + mStride = pixelBuffer.mStride; mPixelFormat = pixelBuffer.mPixelFormat; } diff --git a/dali/internal/imaging/common/pixel-buffer-impl.h b/dali/internal/imaging/common/pixel-buffer-impl.h index da25097..a917001 100644 --- a/dali/internal/imaging/common/pixel-buffer-impl.h +++ b/dali/internal/imaging/common/pixel-buffer-impl.h @@ -2,7 +2,7 @@ #define DALI_INTERNAL_ADAPTOR_PIXEL_BUFFER_H /* - * Copyright (c) 2021 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. @@ -60,13 +60,14 @@ public: * @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 PixelBufferPtr New(unsigned char* buffer, unsigned int bufferSize, unsigned int width, unsigned int height, + unsigned int stride, Pixel::Format pixelFormat); /** @@ -85,12 +86,14 @@ public: * @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 */ PixelBuffer(unsigned char* buffer, unsigned int bufferSize, unsigned int width, unsigned int height, + unsigned int stride, Pixel::Format pixelFormat); protected: @@ -115,6 +118,13 @@ public: unsigned int GetHeight() const; /** + * @brief Gets the stride of the buffer in pixels. + * + * @return The stride of the buffer in pixels. 0 means the buffer is tightly packed. + */ + unsigned int GetStride() const; + + /** * Get the pixel format * @return The pixel format */ @@ -281,10 +291,11 @@ private: private: std::unique_ptr mMetadata; ///< Metadata fields - unsigned char* mBuffer; ///< The raw pixel data - unsigned int mBufferSize; ///< Buffer sized in bytes - unsigned int mWidth; ///< Buffer width in pixels - unsigned int mHeight; ///< Buffer height in pixels + 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 + uint32_t mStride; ///< Buffer stride in bytes, 0 means the buffer is tightly packed Pixel::Format mPixelFormat; ///< Pixel format bool mPreMultiplied; ///< PreMultiplied }; -- 2.7.4