[Tizen] support capture in gles 2.0 64/306064/1
authorsunghyun kim <scholb.kim@samsung.com>
Fri, 16 Feb 2024 02:49:48 +0000 (11:49 +0900)
committersunghyun kim <scholb.kim@samsung.com>
Fri, 16 Feb 2024 02:49:48 +0000 (11:49 +0900)
Change-Id: I8dfc77c70d2e04e5d60f73a1ec09a88c6ff9fd4e

dali/internal/system/common/capture-impl.cpp
dali/internal/system/common/capture-impl.h
dali/public-api/capture/capture.cpp
dali/public-api/capture/capture.h

index fc947fdfa1c2addc82e9ec8f3ea1fc44913948cd..7cf2aecb5945009d2e19188b32cf1681d76ba10b 100644 (file)
@@ -52,7 +52,8 @@ Capture::Capture()
   mNativeImageSourcePtr(NULL),
   mFileSave(false),
   mUseDefaultCamera(true),
-  mSceneOffCameraAfterCaptureFinished(false)
+  mSceneOffCameraAfterCaptureFinished(false),
+  mIsNativeImageSourcePossible(true)
 {
 }
 
@@ -64,7 +65,8 @@ Capture::Capture(Dali::CameraActor cameraActor)
   mNativeImageSourcePtr(NULL),
   mFileSave(false),
   mUseDefaultCamera(!cameraActor),
-  mSceneOffCameraAfterCaptureFinished(false)
+  mSceneOffCameraAfterCaptureFinished(false),
+  mIsNativeImageSourcePossible(true)
 {
 }
 
@@ -124,6 +126,11 @@ Dali::NativeImageSourcePtr Capture::GetNativeImageSource() const
   return mNativeImageSourcePtr;
 }
 
+Dali::Texture Capture::GetTexture()
+{
+  return mTexture;
+}
+
 Dali::Devel::PixelBuffer Capture::GetCapturedBuffer()
 {
   if(!mPixelBuffer || (mPixelBuffer && !mPixelBuffer.GetBuffer()))
@@ -148,10 +155,17 @@ Dali::Capture::CaptureFinishedSignalType& Capture::FinishedSignal()
 
 void Capture::CreateTexture(const Vector2& size)
 {
-  if(!mNativeImageSourcePtr)
+  if(mIsNativeImageSourcePossible)
   {
-    mNativeImageSourcePtr = Dali::NativeImageSource::New(size.width, size.height, Dali::NativeImageSource::COLOR_DEPTH_DEFAULT);
-    mTexture              = Dali::Texture::New(*mNativeImageSourcePtr);
+    if(!mNativeImageSourcePtr)
+    {
+      mNativeImageSourcePtr = Dali::NativeImageSource::New(size.width, size.height, Dali::NativeImageSource::COLOR_DEPTH_DEFAULT);
+      mTexture              = Dali::Texture::New(*mNativeImageSourcePtr);
+    }
+  }
+  else
+  {
+    mTexture = Dali::Texture::New(TextureType::TEXTURE_2D, Pixel::RGB888, unsigned(size.width), unsigned(size.height));
   }
 }
 
@@ -284,6 +298,16 @@ bool Capture::IsRenderTaskSetup()
 
 void Capture::SetupResources(const Dali::Vector2& position, const Dali::Vector2& size, const Dali::Vector4& clearColor, Dali::Actor source)
 {
+  Dali::Internal::Adaptor::Adaptor& adaptor     = Internal::Adaptor::Adaptor::GetImplementation(Internal::Adaptor::Adaptor::Get());
+  GraphicsInterface*                graphics    = &adaptor.GetGraphicsInterface();
+  auto                              eglGraphics = static_cast<EglGraphics*>(graphics);
+
+  if(eglGraphics->GetEglImplementation().GetGlesVersion() < GL_VERSION_NATIVE_IMAGE_SOURCE_AVAILABLE)
+  {
+    DALI_LOG_ERROR("GLES is 2.0, we can't use native image source \n");
+    mIsNativeImageSourcePossible = false;
+  }
+
   CreateTexture(size);
 
   CreateFrameBuffer();
@@ -345,10 +369,18 @@ bool Capture::OnTimeOut()
 
 bool Capture::SaveFile()
 {
-  if(mNativeImageSourcePtr)
+  if(mIsNativeImageSourcePossible)
+  {
+    if(mNativeImageSourcePtr)
+    {
+      return Dali::DevelNativeImageSource::EncodeToFile(*mNativeImageSourcePtr, mPath, mQuality);
+    }
+  }
+  else
   {
-    return Dali::DevelNativeImageSource::EncodeToFile(*mNativeImageSourcePtr, mPath, mQuality);
+    DALI_LOG_ERROR("can't use Capture::SavceFile(). we don't support this function in gles 2.0 \n");
   }
+
   return false;
 }
 
index 5f6e594859353563df4aac40bdb9a3d621ebe670..9f0690c43cbe475d7c2a784d053ecafc8c8d5728 100644 (file)
@@ -90,6 +90,11 @@ public:
    */
   Dali::Devel::PixelBuffer GetCapturedBuffer();
 
+  /**
+   * @copydoc Dali::Capture::GetTexture
+   */
+  Dali::Texture GetTexture();
+
   /**
    * @copydoc Dali::Capture::FinishedSignal
    */
@@ -211,6 +216,7 @@ private:
   bool                                     mFileSave;
   bool                                     mUseDefaultCamera;                   // Whether we use default generated camera, or use inputed camera.
   bool                                     mSceneOffCameraAfterCaptureFinished; // Whether we need to scene-off after capture finished.
+  bool                                     mIsNativeImageSourcePossible;
 };
 
 } // End of namespace Adaptor
index d8cb4f769640745459ca406dec9b53007ec1c190..9e19bab4d9172250120d4bea9234a629d8b03b68 100644 (file)
@@ -88,6 +88,11 @@ Dali::NativeImageSourcePtr Capture::GetNativeImageSource() const
   return GetImpl(*this).GetNativeImageSource();
 }
 
+Dali::Texture Capture::GetTexture()
+{
+  return GetImpl(*this).GetTexture();
+}
+
 Capture::CaptureFinishedSignalType& Capture::FinishedSignal()
 {
   return GetImpl(*this).FinishedSignal();
index 3a96515262afb2e8cb3081f664413467d4d6a1d9..7bd6f93c5709bbc0078768445f7d63f76cb1fbe3 100644 (file)
@@ -21,6 +21,7 @@
 // EXTERNAL HEADERS
 #include <dali/public-api/actors/actor.h>
 #include <dali/public-api/actors/camera-actor.h>
+#include <dali/public-api/rendering/texture.h>
 #include <dali/public-api/signals/dali-signal.h>
 
 // INTERNAL INCLUDES
@@ -259,6 +260,13 @@ public:
    */
   Dali::NativeImageSourcePtr GetNativeImageSource() const;
 
+  /**
+   * @brief Get Texture of captured image.
+   *
+   * @return Texture Captured result
+   */
+  Dali::Texture GetTexture();
+
   /**
    * @brief Get finished signal.
    *