Merge "[ATSPI] Apply multi-window to ATSPI" into devel/master
authorSeoyeon Kim <seoyeon2.kim@samsung.com>
Wed, 10 Nov 2021 07:17:03 +0000 (07:17 +0000)
committerGerrit Code Review <gerrit@review>
Wed, 10 Nov 2021 07:17:03 +0000 (07:17 +0000)
dali/internal/canvas-renderer/tizen/canvas-renderer-impl-tizen.cpp
dali/internal/canvas-renderer/tizen/canvas-renderer-impl-tizen.h
dali/internal/imaging/common/loader-webp.cpp
dali/internal/imaging/common/webp-loading.cpp
dali/public-api/dali-adaptor-version.cpp
packaging/dali-adaptor.spec

index bc45837..7daa7c1 100644 (file)
 #include <dali/public-api/object/type-registry.h>
 
 // INTERNAL INCLUDES
-#include <dali/devel-api/adaptor-framework/pixel-buffer.h>
 #include <dali/internal/canvas-renderer/common/drawable-group-impl.h>
 #include <dali/internal/canvas-renderer/common/drawable-impl.h>
 #include <dali/internal/canvas-renderer/common/gradient-impl.h>
 #include <dali/internal/canvas-renderer/common/shape-impl.h>
-#include <dali/internal/imaging/common/pixel-buffer-impl.h>
 
 namespace Dali
 {
@@ -56,11 +54,11 @@ CanvasRendererTizen* CanvasRendererTizen::New(const Vector2& viewBox)
 CanvasRendererTizen::CanvasRendererTizen(const Vector2& viewBox)
 :
 #ifdef THORVG_SUPPORT
-  mPixelBuffer(nullptr),
   mRasterizedTexture(),
   mMutex(),
   mTvgCanvas(nullptr),
   mTvgRoot(nullptr),
+  mNativeImageQueue(nullptr),
 #endif
   mSize(Vector2::ZERO),
   mViewBox(Vector2::ZERO),
@@ -126,11 +124,8 @@ bool CanvasRendererTizen::Commit()
   }
   else
   {
-    if(!mPixelBuffer || !mPixelBuffer.GetBuffer())
-    {
-      MakeTargetBuffer(mSize);
-      mChanged = false;
-    }
+    MakeTargetBuffer(mSize);
+    mChanged = false;
   }
 
   if(mTvgCanvas->clear() != tvg::Result::Success)
@@ -168,25 +163,18 @@ bool CanvasRendererTizen::Commit()
 Dali::Texture CanvasRendererTizen::GetRasterizedTexture()
 {
 #ifdef THORVG_SUPPORT
-  if(mPixelBuffer)
+  if(mNativeImageQueue)
   {
-    auto width  = mPixelBuffer.GetWidth();
-    auto height = mPixelBuffer.GetHeight();
-    if(width <= 0 || height <= 0)
-    {
-      return Dali::Texture();
-    }
-
-    Dali::PixelData pixelData = Devel::PixelBuffer::Convert(mPixelBuffer);
-
-    if(!mRasterizedTexture || mRasterizedTexture.GetWidth() != width || mRasterizedTexture.GetHeight() != height)
+    if(!mRasterizedTexture)
     {
-      mRasterizedTexture = Dali::Texture::New(Dali::TextureType::TEXTURE_2D, Dali::Pixel::BGRA8888, width, height);
+      mRasterizedTexture = Dali::Texture::New(*mNativeImageQueue);
     }
-
-    mRasterizedTexture.Upload(pixelData);
+    return mRasterizedTexture;
+  }
+  else
+  {
+    return Dali::Texture();
   }
-  return mRasterizedTexture;
 #else
   return Dali::Texture();
 #endif
@@ -336,14 +324,34 @@ bool CanvasRendererTizen::Rasterize()
 #ifdef THORVG_SUPPORT
   Mutex::ScopedLock lock(mMutex);
 
-  if(mTvgCanvas->draw() != tvg::Result::Success)
+  if(mNativeImageQueue && mNativeImageQueue->CanDequeueBuffer())
+  {
+    uint32_t width, height, stride;
+    uint8_t* buffer = mNativeImageQueue->DequeueBuffer(width, height, stride);
+    if(!buffer)
+    {
+      DALI_LOG_ERROR("Pixel buffer create to fail [%p]\n", this);
+      return false;
+    }
+
+    mTvgCanvas->target(reinterpret_cast<uint32_t*>(buffer), stride / 4, width, height, tvg::SwCanvas::ARGB8888);
+
+    if(mTvgCanvas->draw() != tvg::Result::Success)
+    {
+      DALI_LOG_ERROR("ThorVG Draw fail [%p]\n", this);
+      mNativeImageQueue->EnqueueBuffer(buffer);
+      return false;
+    }
+
+    mTvgCanvas->sync();
+
+    mNativeImageQueue->EnqueueBuffer(buffer);
+  }
+  else
   {
-    DALI_LOG_ERROR("ThorVG Draw fail [%p]\n", this);
     return false;
   }
 
-  mTvgCanvas->sync();
-
   return true;
 #else
   return false;
@@ -432,18 +440,14 @@ const Vector2& CanvasRendererTizen::GetViewBox()
 void CanvasRendererTizen::MakeTargetBuffer(const Vector2& size)
 {
 #ifdef THORVG_SUPPORT
-  mPixelBuffer = Devel::PixelBuffer::New(size.width, size.height, Dali::Pixel::BGRA8888);
-
-  unsigned char* pBuffer;
-  pBuffer = mPixelBuffer.GetBuffer();
-
-  if(!pBuffer)
+  if(!mNativeImageQueue)
   {
-    DALI_LOG_ERROR("Pixel buffer create to fail [%p]\n", this);
-    return;
+    mNativeImageQueue = Dali::NativeImageSourceQueue::New(size.width, size.height, Dali::NativeImageSourceQueue::ColorFormat::RGBA8888);
+  }
+  else
+  {
+    mNativeImageQueue->SetSize(static_cast<uint32_t>(size.width), static_cast<uint32_t>(size.height));
   }
-
-  mTvgCanvas->target(reinterpret_cast<uint32_t*>(pBuffer), size.width, size.width, size.height, tvg::SwCanvas::ARGB8888);
 #endif
 }
 
index 88a43ed..b200585 100644 (file)
@@ -29,9 +29,9 @@
 // INTERNAL INCLUDES
 #include <dali/devel-api/adaptor-framework/canvas-renderer-drawable.h>
 #include <dali/devel-api/adaptor-framework/canvas-renderer.h>
+#include <dali/devel-api/adaptor-framework/native-image-source-queue.h>
 #include <dali/internal/canvas-renderer/common/canvas-renderer-impl.h>
 #include <dali/internal/canvas-renderer/common/drawable-group-impl.h>
-#include <dali/devel-api/adaptor-framework/pixel-buffer.h>
 
 namespace Dali
 {
@@ -164,11 +164,11 @@ private:
 
 private:
 #ifdef THORVG_SUPPORT
-  Devel::PixelBuffer             mPixelBuffer;
-  Dali::Texture                  mRasterizedTexture;
-  Dali::Mutex                    mMutex;
-  std::unique_ptr<tvg::SwCanvas> mTvgCanvas;
-  tvg::Scene*                    mTvgRoot;
+  Dali::Texture                   mRasterizedTexture;
+  Dali::Mutex                     mMutex;
+  std::unique_ptr<tvg::SwCanvas>  mTvgCanvas;
+  tvg::Scene*                     mTvgRoot;
+  Dali::NativeImageSourceQueuePtr mNativeImageQueue;
 #endif
   DrawableGroup::DrawableVector mDrawables;
 
index e388712..da82a89 100644 (file)
@@ -130,6 +130,7 @@ bool LoadWebpHeader(const Dali::ImageLoader::Input& input, unsigned int& width,
       WebPAnimDecoderGetInfo(webPAnimDecoder, &webPAnimInfo);
       width  = webPAnimInfo.canvas_width;
       height = webPAnimInfo.canvas_height;
+      ReleaseResource(webPData, webPAnimDecoder);
       return true;
     }
   }
@@ -225,6 +226,7 @@ bool LoadBitmapFromWebp(const Dali::ImageLoader::Input& input, Dali::Devel::Pixe
       bitmap                   = Dali::Devel::PixelBuffer::New(webPAnimInfo.canvas_width, webPAnimInfo.canvas_height, Dali::Pixel::RGBA8888);
       const int32_t bufferSize = webPAnimInfo.canvas_width * webPAnimInfo.canvas_height * sizeof(uint32_t);
       memcpy(bitmap.GetBuffer(), frameBuffer, bufferSize);
+      ReleaseResource(webPData, webPAnimDecoder);
       return true;
     }
   }
index dc758fa..707821b 100644 (file)
@@ -116,7 +116,7 @@ public:
     {
       Internal::Platform::FileReader fileReader(mUrl);
       fp = fileReader.GetFile();
-      if(fp == NULL)
+      if(fp == nullptr)
       {
         return false;
       }
@@ -165,28 +165,37 @@ public:
     return false;
   }
 
-  // Moveable but not copyable
-
-  Impl(const Impl&) = delete;
-  Impl& operator=(const Impl&) = delete;
-  Impl(Impl&&)                 = default;
-  Impl& operator=(Impl&&) = default;
-
-  ~Impl()
+  void ReleaseResource()
   {
 #ifdef DALI_ANIMATED_WEBP_ENABLED
-    if(&mWebPData != NULL)
+    if(&mWebPData != nullptr)
     {
       mWebPData.bytes = nullptr;
       WebPDataInit(&mWebPData);
     }
-    if(mWebPAnimDecoder)
+    if(mWebPAnimDecoder != nullptr)
     {
       WebPAnimDecoderDelete(mWebPAnimDecoder);
+      mWebPAnimDecoder = nullptr;
     }
 #endif
-    free((void*)mBuffer);
-    mBuffer = nullptr;
+    if(mBuffer != nullptr)
+    {
+      free((void*)mBuffer);
+      mBuffer = nullptr;
+    }
+  }
+
+  // Moveable but not copyable
+
+  Impl(const Impl&) = delete;
+  Impl& operator=(const Impl&) = delete;
+  Impl(Impl&&)                 = default;
+  Impl& operator=(Impl&&) = default;
+
+  ~Impl()
+  {
+    ReleaseResource();
   }
 
   std::string           mUrl;
@@ -279,8 +288,9 @@ Dali::Devel::PixelBuffer WebPLoading::LoadFrame(uint32_t frameIndex)
       const int32_t imageBufferSize = width * height * sizeof(uint8_t) * channelNumber;
       memcpy(pixelBuffer.GetBuffer(), frameBuffer, imageBufferSize);
       free((void*)frameBuffer);
-      return pixelBuffer;
     }
+    mImpl->ReleaseResource();
+    return pixelBuffer;
   }
 #endif
 
index ba68d93..b4b44b2 100644 (file)
@@ -27,7 +27,7 @@ namespace Dali
 {
 const unsigned int ADAPTOR_MAJOR_VERSION = 2;
 const unsigned int ADAPTOR_MINOR_VERSION = 0;
-const unsigned int ADAPTOR_MICRO_VERSION = 50;
+const unsigned int ADAPTOR_MICRO_VERSION = 51;
 const char* const  ADAPTOR_BUILD_DATE    = __DATE__ " " __TIME__;
 
 #ifdef DEBUG_ENABLED
index 236a88c..51d32c8 100644 (file)
@@ -17,7 +17,7 @@
 
 Name:       dali2-adaptor
 Summary:    The DALi Tizen Adaptor
-Version:    2.0.50
+Version:    2.0.51
 Release:    1
 Group:      System/Libraries
 License:    Apache-2.0 and BSD-3-Clause and MIT