Merge "Implement CameraView." into devel/master
authorjoogab yun <joogab.yun@samsung.com>
Mon, 22 Mar 2021 05:09:32 +0000 (05:09 +0000)
committerGerrit Code Review <gerrit@review>
Mon, 22 Mar 2021 05:09:32 +0000 (05:09 +0000)
17 files changed:
build/tizen/module-list.cmake [changed mode: 0644->0755]
build/tizen/profiles/android-profile.cmake [changed mode: 0644->0755]
build/tizen/profiles/common-profile.cmake [changed mode: 0644->0755]
build/tizen/profiles/ivi-profile.cmake [changed mode: 0644->0755]
build/tizen/profiles/macos-profile.cmake [changed mode: 0644->0755]
build/tizen/profiles/mobile-profile.cmake [changed mode: 0644->0755]
build/tizen/profiles/tv-profile.cmake [changed mode: 0644->0755]
build/tizen/profiles/ubuntu-profile.cmake [changed mode: 0644->0755]
build/tizen/profiles/wearable-profile.cmake [changed mode: 0644->0755]
build/tizen/profiles/windows-profile.cmake [changed mode: 0644->0755]
dali/devel-api/adaptor-framework/camera-player-plugin.h [new file with mode: 0644]
dali/devel-api/adaptor-framework/camera-player.cpp [new file with mode: 0644]
dali/devel-api/adaptor-framework/camera-player.h [new file with mode: 0644]
dali/devel-api/file.list
dali/internal/camera/common/camera-player-impl.cpp [new file with mode: 0755]
dali/internal/camera/common/camera-player-impl.h [new file with mode: 0644]
dali/internal/camera/file.list [new file with mode: 0755]

old mode 100644 (file)
new mode 100755 (executable)
index c7a66cb..033d86a
@@ -46,6 +46,9 @@ include( ${ADAPTOR_ROOT}/dali/internal/text/file.list )
 SET( adaptor_video_dir ${ADAPTOR_ROOT}/dali/internal/video )
 include( ${ADAPTOR_ROOT}/dali/internal/video/file.list )
 
+SET( adaptor_camera_dir ${ADAPTOR_ROOT}/dali/internal/camera )
+include( ${ADAPTOR_ROOT}/dali/internal/camera/file.list )
+
 SET( adaptor_web_engine_dir ${ADAPTOR_ROOT}/dali/internal/web-engine )
 include( ${ADAPTOR_ROOT}/dali/internal/web-engine/file.list )
 
@@ -123,6 +126,9 @@ include( ${ADAPTOR_ROOT}/dali/internal/text/file.list )
 SET( adaptor_video_dir ${ADAPTOR_ROOT}/dali/internal/video )
 include( ${ADAPTOR_ROOT}/dali/internal/video/file.list )
 
+SET( adaptor_camera_dir ${ADAPTOR_ROOT}/dali/internal/camera )
+include( ${ADAPTOR_ROOT}/dali/internal/camera/file.list )
+
 SET( adaptor_web_engine_dir ${ADAPTOR_ROOT}/dali/internal/web-engine )
 include( ${ADAPTOR_ROOT}/dali/internal/web-engine/file.list )
 
old mode 100644 (file)
new mode 100755 (executable)
index 3052a59..5a0ff5a
@@ -36,6 +36,7 @@ SET( SOURCES
         ${adaptor_vector_animation_common_src_files}
         ${adaptor_vector_image_common_src_files}
         ${adaptor_video_common_src_files}
+        ${adaptor_camera_common_src_files}
         ${adaptor_web_engine_common_src_files}
         ${adaptor_window_system_common_src_files}
         ${adaptor_window_system_android_src_files}
old mode 100644 (file)
new mode 100755 (executable)
index d69ba6b..666863d
@@ -36,6 +36,7 @@ SET( SOURCES
     ${adaptor_vector_animation_common_src_files}
     ${adaptor_vector_image_common_src_files}
     ${adaptor_video_common_src_files}
+    ${adaptor_camera_common_src_files}
     ${adaptor_web_engine_common_src_files}
     ${adaptor_window_system_common_src_files}
     ${adaptor_window_system_tizen_src_files}
old mode 100644 (file)
new mode 100755 (executable)
index efae782..d5520f0
@@ -37,6 +37,7 @@ SET( SOURCES
      ${adaptor_vector_animation_common_src_files}
      ${adaptor_vector_image_common_src_files}
      ${adaptor_video_common_src_files}
+     ${adaptor_camera_common_src_files}
      ${adaptor_web_engine_common_src_files}
      ${adaptor_window_system_common_src_files}
      ${adaptor_window_system_tizen_src_files}
old mode 100644 (file)
new mode 100755 (executable)
index 6430fca..cd053cb
@@ -36,6 +36,7 @@ SET( SOURCES
         ${adaptor_vector_animation_common_src_files}
         ${adaptor_vector_image_common_src_files}
         ${adaptor_video_common_src_files}
+        ${adaptor_camera_common_src_files}
         ${adaptor_web_engine_common_src_files}
         ${adaptor_window_system_common_src_files}
         ${adaptor_macos_platform_src_files}
old mode 100644 (file)
new mode 100755 (executable)
index 577c0e4..df8be23
@@ -36,6 +36,7 @@ SET( SOURCES
         ${adaptor_vector_animation_common_src_files}
         ${adaptor_vector_image_common_src_files}
         ${adaptor_video_common_src_files}
+        ${adaptor_camera_common_src_files}
         ${adaptor_web_engine_common_src_files}
         ${adaptor_window_system_common_src_files}
         ${adaptor_window_system_tizen_src_files}
old mode 100644 (file)
new mode 100755 (executable)
index a79cae1..19812ff
@@ -36,6 +36,7 @@ SET( SOURCES
     ${adaptor_vector_animation_common_src_files}
     ${adaptor_vector_image_common_src_files}
     ${adaptor_video_common_src_files}
+    ${adaptor_camera_common_src_files}
     ${adaptor_web_engine_common_src_files}
     ${adaptor_window_system_common_src_files}
     ${adaptor_window_system_tizen_src_files}
old mode 100644 (file)
new mode 100755 (executable)
index 94496ec..e15279e
@@ -36,6 +36,7 @@ SET( SOURCES
         ${adaptor_vector_animation_common_src_files}
         ${adaptor_vector_image_common_src_files}
         ${adaptor_video_common_src_files}
+        ${adaptor_camera_common_src_files}
         ${adaptor_web_engine_common_src_files}
         ${adaptor_window_system_common_src_files}
         ${adaptor_trace_common_src_files}
old mode 100644 (file)
new mode 100755 (executable)
index 51ca0a3..24324d3
@@ -38,6 +38,7 @@ SET( SOURCES
     ${adaptor_vector_animation_common_src_files}
     ${adaptor_vector_image_common_src_files}
     ${adaptor_video_common_src_files}
+    ${adaptor_camera_common_src_files}
     ${adaptor_web_engine_common_src_files}
     ${adaptor_window_system_common_src_files}
     ${adaptor_window_system_tizen_src_files}
old mode 100644 (file)
new mode 100755 (executable)
index 3bfa9ed..528256f
@@ -28,6 +28,7 @@ SET( SOURCES
         ${adaptor_vector_animation_common_src_files}
         ${adaptor_vector_image_common_src_files}
         ${adaptor_video_common_src_files}
+        ${adaptor_camera_common_src_files}
         ${adaptor_web_engine_common_src_files}
         ${adaptor_window_system_common_src_files}
         ${adaptor_trace_common_src_files}
diff --git a/dali/devel-api/adaptor-framework/camera-player-plugin.h b/dali/devel-api/adaptor-framework/camera-player-plugin.h
new file mode 100644 (file)
index 0000000..c0c1017
--- /dev/null
@@ -0,0 +1,81 @@
+#ifndef DALI_CAMERA_PLAYER_PLUGIN_H
+#define DALI_CAMERA_PLAYER_PLUGIN_H
+
+/*
+ * Copyright (c) 2021 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+// INTERNAL INCLUDES
+#include <dali/public-api/adaptor-framework/native-image-source.h>
+#include <dali/public-api/adaptor-framework/window.h>
+
+// EXTERNAL INCLUDES
+#include <dali/public-api/math/rect.h>
+
+namespace Dali
+{
+class Any;
+using DisplayArea = Dali::Rect<int>;
+
+/**
+ * @brief CameraPlayerPlugin is an abstract interface, used by dali-adaptor to access camera player plugin.
+ * A concrete implementation must be created for each platform and provided as dynamic library.
+ */
+class CameraPlayerPlugin
+{
+public:
+  /**
+   * @brief Constructor.
+   */
+  CameraPlayerPlugin()
+  {
+  }
+
+  /**
+   * @brief Destructor.
+   */
+  virtual ~CameraPlayerPlugin()
+  {
+  }
+
+  /**
+   * @brief Sets camera rendering target for window
+   * @param[in] target The target for camera rendering, window surface
+   */
+  virtual void SetWindowRenderingTarget(Dali::Window target) = 0;
+
+  /**
+   * @brief Sets camera rendering target for native image
+   * @param[in] target The target for camera rendering, native image source
+   */
+  virtual void SetNativeImageRenderingTarget(Dali::NativeImageSourcePtr target) = 0;
+
+  /**
+   * @brief Sets the area of camera display.
+   * @param[in] area The left-top position and size of the camera display area
+   */
+  virtual void SetDisplayArea(DisplayArea area) = 0;
+
+  /**
+   * @brief Set the camera player handle.
+   * @param[in] handle The handle for camera player
+   */
+  virtual void SetCameraPlayer(Any handle) = 0;
+};
+
+} // namespace Dali
+
+#endif // DALI_CAMERA_PLAYER_PLUGIN_H
diff --git a/dali/devel-api/adaptor-framework/camera-player.cpp b/dali/devel-api/adaptor-framework/camera-player.cpp
new file mode 100644 (file)
index 0000000..5ad3265
--- /dev/null
@@ -0,0 +1,87 @@
+/*
+ * Copyright (c) 2021 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+// CLASS HEADER
+#include <dali/devel-api/adaptor-framework/camera-player.h>
+
+// EXTERNAL INCLUDES
+#include <dali/public-api/object/any.h>
+
+// INTERNAL INCLUDES
+#include <dali/internal/camera/common/camera-player-impl.h>
+
+namespace Dali
+{
+CameraPlayer::CameraPlayer()
+{
+}
+
+CameraPlayer::CameraPlayer(Internal::Adaptor::CameraPlayer* internal)
+: BaseHandle(internal)
+{
+}
+
+CameraPlayer::~CameraPlayer()
+{
+}
+
+CameraPlayer CameraPlayer::New()
+{
+  Internal::Adaptor::CameraPlayerPtr player = Internal::Adaptor::CameraPlayer::New();
+  return CameraPlayer(player.Get());
+}
+
+CameraPlayer::CameraPlayer(const CameraPlayer& player)
+: BaseHandle(player)
+{
+}
+
+CameraPlayer& CameraPlayer::operator=(const CameraPlayer& player)
+{
+  if(*this != player)
+  {
+    BaseHandle::operator=(player);
+  }
+  return *this;
+}
+
+CameraPlayer CameraPlayer::DownCast(BaseHandle handle)
+{
+  return CameraPlayer(dynamic_cast<Internal::Adaptor::CameraPlayer*>(handle.GetObjectPtr()));
+}
+
+void CameraPlayer::SetWindowRenderingTarget(Dali::Window target)
+{
+  GetImplementation(*this).SetWindowRenderingTarget(target);
+}
+
+void CameraPlayer::SetNativeImageRenderingTarget(Dali::NativeImageSourcePtr target)
+{
+  GetImplementation(*this).SetNativeImageRenderingTarget(target);
+}
+
+void CameraPlayer::SetDisplayArea(DisplayArea area)
+{
+  GetImplementation(*this).SetDisplayArea(area);
+}
+
+void CameraPlayer::SetCameraPlayer(Any handle)
+{
+  GetImplementation(*this).SetCameraPlayer(handle);
+}
+
+} // namespace Dali
diff --git a/dali/devel-api/adaptor-framework/camera-player.h b/dali/devel-api/adaptor-framework/camera-player.h
new file mode 100644 (file)
index 0000000..143797a
--- /dev/null
@@ -0,0 +1,121 @@
+#ifndef DALI_CAMERA_PLAYER_H
+#define DALI_CAMERA_PLAYER_H
+
+/*
+ * Copyright (c) 2021 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+// EXTERNAL INCLUDES
+#include <dali/public-api/object/base-handle.h>
+
+//INTERNAL INCLUDES
+#include <dali/devel-api/adaptor-framework/camera-player-plugin.h>
+#include <dali/public-api/dali-adaptor-common.h>
+
+namespace Dali
+{
+class Any;
+
+namespace Internal
+{
+namespace Adaptor
+{
+class CameraPlayer;
+} // namespace Adaptor
+
+} // namespace Internal
+
+/**
+ * @brief CameraPlayer class is used for camera playback.
+ */
+class DALI_ADAPTOR_API CameraPlayer : public BaseHandle
+{
+public:
+  /**
+   * @brief Constructor.
+   */
+  CameraPlayer();
+
+  /**
+   * @brief Destructor.
+   */
+  ~CameraPlayer();
+
+  /**
+   * @brief Creates a new instance of a CameraPlayer.
+   */
+  static CameraPlayer New();
+
+  /**
+   * @brief Copy constructor.
+   *
+   * @param[in] player CameraPlayer to copy. The copied player will point at the same implementation
+   */
+  CameraPlayer(const CameraPlayer& player);
+
+  /**
+   * @brief Assignment operator.
+   *
+   * @param[in] player The CameraPlayer to assign from.
+   * @return The updated CameraPlayer.
+   */
+  CameraPlayer& operator=(const CameraPlayer& player);
+
+  /**
+   * @brief Downcast a handle to CameraPlayer handle.
+   *
+   * If handle points to a CameraPlayer the downcast produces valid
+   * handle. If not the returned handle is left uninitialized.
+   *
+   * @param[in] handle Handle to an object
+   * @return Handle to a CameraPlayer or an uninitialized handle
+   */
+  static CameraPlayer DownCast(BaseHandle handle);
+
+  /**
+   * @brief Sets camera rendering target.
+   * @param[in] target The target for camera rendering, window surface
+   */
+  void SetWindowRenderingTarget(Dali::Window target);
+
+  /**
+   * @brief Sets camera rendering target.
+   * @param[in] target The target for camera rendering, native image source
+   */
+  void SetNativeImageRenderingTarget(Dali::NativeImageSourcePtr target);
+
+  /**
+   * @brief Sets the area of camera display.
+   * @param[in] area The left-top position and size of the camera display area
+   */
+  void SetDisplayArea(DisplayArea area);
+
+  /**
+   * @brief Sets the camera player handle
+   * @param[in] handle The handle for camera player
+   */
+  void SetCameraPlayer(Any handle);
+
+private: // Not intended for application developers
+  /**
+   * @brief Internal constructor
+   */
+  explicit DALI_INTERNAL CameraPlayer(Internal::Adaptor::CameraPlayer* internal);
+};
+
+} // namespace Dali
+
+#endif // DALI_CAMERA_PLAYER_H
index 2549770..cd5f869 100755 (executable)
@@ -39,6 +39,7 @@ SET( devel_api_src_files
   ${adaptor_devel_api_dir}/adaptor-framework/gl-window.cpp
   ${adaptor_devel_api_dir}/adaptor-framework/offscreen-application.cpp
   ${adaptor_devel_api_dir}/adaptor-framework/offscreen-window.cpp
+  ${adaptor_devel_api_dir}/adaptor-framework/camera-player.cpp
 )
 
 
@@ -99,6 +100,8 @@ SET( devel_api_adaptor_framework_header_files
   ${adaptor_devel_api_dir}/adaptor-framework/gl-window.h
   ${adaptor_devel_api_dir}/adaptor-framework/offscreen-application.h
   ${adaptor_devel_api_dir}/adaptor-framework/offscreen-window.h
+  ${adaptor_devel_api_dir}/adaptor-framework/camera-player.h
+  ${adaptor_devel_api_dir}/adaptor-framework/camera-player-plugin.h
 )
 
 
diff --git a/dali/internal/camera/common/camera-player-impl.cpp b/dali/internal/camera/common/camera-player-impl.cpp
new file mode 100755 (executable)
index 0000000..dd3d225
--- /dev/null
@@ -0,0 +1,151 @@
+/*
+ * Copyright (c) 2021 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+// CLASS HEADER
+#include <dali/internal/camera/common/camera-player-impl.h>
+
+// EXTERNAL INCLUDES
+#include <dali/integration-api/debug.h>
+#include <dali/public-api/object/any.h>
+#include <dali/public-api/object/type-registry.h>
+#include <dlfcn.h>
+
+// INTERNAL INCLUDES
+#include <dali/public-api/adaptor-framework/native-image-source.h>
+
+namespace Dali
+{
+namespace Internal
+{
+namespace Adaptor
+{
+namespace // unnamed namespace
+{
+const char* CAMERA_PLUGIN_SO("libdali2-camera-player-plugin.so");
+
+Dali::BaseHandle Create()
+{
+  return Dali::CameraPlayer::New();
+}
+
+Dali::TypeRegistration type(typeid(Dali::CameraPlayer), typeid(Dali::BaseHandle), Create);
+
+} // unnamed namespace
+
+CameraPlayerPtr CameraPlayer::New()
+{
+  CameraPlayerPtr player = new CameraPlayer();
+  player->Initialize();
+  return player;
+}
+
+CameraPlayer::CameraPlayer()
+: mPlugin(NULL),
+  mHandle(NULL),
+  mCreateCameraPlayerPtr(NULL),
+  mDestroyCameraPlayerPtr(NULL)
+{
+}
+
+CameraPlayer::~CameraPlayer()
+{
+  if(mHandle != NULL)
+  {
+    if(mDestroyCameraPlayerPtr != NULL)
+    {
+      mDestroyCameraPlayerPtr(mPlugin);
+    }
+
+    dlclose(mHandle);
+  }
+}
+
+void CameraPlayer::Initialize()
+{
+  char* error = NULL;
+
+  mHandle = dlopen(CAMERA_PLUGIN_SO, RTLD_LAZY);
+
+  error = dlerror();
+  if(mHandle == NULL || error != NULL)
+  {
+    DALI_LOG_ERROR("CameraPlayer::Initialize(), dlopen error: %s\n", error);
+    return;
+  }
+
+  mCreateCameraPlayerPtr = reinterpret_cast<CreateCameraPlayerFunction>(dlsym(mHandle, "CreateCameraPlayerPlugin"));
+
+  error = dlerror();
+  if(mCreateCameraPlayerPtr == NULL || error != NULL)
+  {
+    DALI_LOG_ERROR("Can't load symbol CreateCameraPlayerPlugin(), error: %s\n", error);
+    return;
+  }
+
+  mPlugin = mCreateCameraPlayerPtr();
+
+  if(mPlugin == NULL)
+  {
+    DALI_LOG_ERROR("Can't create the CameraPlayerPlugin object\n");
+    return;
+  }
+
+  mDestroyCameraPlayerPtr = reinterpret_cast<DestroyCameraPlayerFunction>(dlsym(mHandle, "DestroyCameraPlayerPlugin"));
+
+  error = dlerror();
+  if(mDestroyCameraPlayerPtr == NULL || error != NULL)
+  {
+    DALI_LOG_ERROR("Can't load symbol DestroyCameraPlayerPlugin(), error: %s\n", error);
+    return;
+  }
+}
+
+void CameraPlayer::SetWindowRenderingTarget(Dali::Window target)
+{
+  if(mPlugin != NULL)
+  {
+    mPlugin->SetWindowRenderingTarget(target);
+  }
+}
+
+void CameraPlayer::SetNativeImageRenderingTarget(Dali::NativeImageSourcePtr target)
+{
+  if(mPlugin != NULL)
+  {
+    mPlugin->SetNativeImageRenderingTarget(target);
+  }
+}
+
+void CameraPlayer::SetDisplayArea(DisplayArea area)
+{
+  if(mPlugin != NULL)
+  {
+    mPlugin->SetDisplayArea(area);
+  }
+}
+
+void CameraPlayer::SetCameraPlayer(Any handle)
+{
+  if(mPlugin != NULL)
+  {
+    mPlugin->SetCameraPlayer(handle);
+  }
+}
+
+} // namespace Adaptor
+} // namespace Internal
+} // namespace Dali
diff --git a/dali/internal/camera/common/camera-player-impl.h b/dali/internal/camera/common/camera-player-impl.h
new file mode 100644 (file)
index 0000000..2072e8e
--- /dev/null
@@ -0,0 +1,128 @@
+#ifndef DALI_CAMERA_PLAYER_IMPL_H
+#define DALI_CAMERA_PLAYER_IMPL_H
+
+/*
+ * Copyright (c) 2021 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+// EXTERNAL INCLUDES
+#include <dali/public-api/object/base-object.h>
+
+// INTERNAL INCLUDES
+#include <dali/devel-api/adaptor-framework/camera-player-plugin.h>
+#include <dali/devel-api/adaptor-framework/camera-player.h>
+
+namespace Dali
+{
+class Any;
+
+namespace Internal
+{
+namespace Adaptor
+{
+class CameraPlayer;
+
+typedef IntrusivePtr<CameraPlayer> CameraPlayerPtr;
+
+/**
+ * @brief CameraPlayer class is used for camera preview.
+ */
+class CameraPlayer : public Dali::BaseObject
+{
+public:
+  /**
+   * @brief Creates a new CameraPlayer handle
+   * @return CameraPlayer pointer
+   */
+  static CameraPlayerPtr New();
+
+  /**
+   * @copydoc Dali::CameraPlayer::SetWindowRenderingTarget()
+   */
+  void SetWindowRenderingTarget(Dali::Window target);
+
+  /**
+   * @copydoc Dali::CameraPlayer::SetNativeImageRenderingTarget()
+   */
+  void SetNativeImageRenderingTarget(Dali::NativeImageSourcePtr target);
+
+  /**
+   * @copydoc Dali::CameraPlayer::SetDisplayArea()
+   */
+  void SetDisplayArea(DisplayArea area);
+
+  /**
+   * @brief Dali::CameraPlayer::SetCameraPlayer()
+   */
+  void SetCameraPlayer(Any handle);
+
+private:
+  /**
+   * @brief Constructor.
+   */
+  CameraPlayer();
+
+  /**
+   * @brief Destructor.
+   */
+  virtual ~CameraPlayer();
+
+  // Undefined copy constructor
+  CameraPlayer(const CameraPlayer& player);
+
+  // Undefined assignment operator
+  CameraPlayer& operator=(const CameraPlayer& player);
+
+  /**
+   * @brief Initializes member data.
+   */
+  void Initialize();
+
+private:
+  Dali::CameraPlayerPlugin* mPlugin; ///< camera player plugin handle
+  void*                     mHandle; ///< Handle for the loaded library
+
+  using CreateCameraPlayerFunction  = Dali::CameraPlayerPlugin* (*)();
+  using DestroyCameraPlayerFunction = void (*)(Dali::CameraPlayerPlugin* plugin);
+
+  CreateCameraPlayerFunction  mCreateCameraPlayerPtr;
+  DestroyCameraPlayerFunction mDestroyCameraPlayerPtr;
+};
+
+} // namespace Adaptor
+} // namespace Internal
+
+inline static Internal::Adaptor::CameraPlayer& GetImplementation(Dali::CameraPlayer& player)
+{
+  DALI_ASSERT_ALWAYS(player && "CameraPlayer handle is empty.");
+
+  BaseObject& handle = player.GetBaseObject();
+
+  return static_cast<Internal::Adaptor::CameraPlayer&>(handle);
+}
+
+inline static const Internal::Adaptor::CameraPlayer& GetImplementation(const Dali::CameraPlayer& player)
+{
+  DALI_ASSERT_ALWAYS(player && "CameraPlayer handle is empty.");
+
+  const BaseObject& handle = player.GetBaseObject();
+
+  return static_cast<const Internal::Adaptor::CameraPlayer&>(handle);
+}
+
+} // namespace Dali
+
+#endif // DALI_CAMERA_PLAYER_IMPL_H
diff --git a/dali/internal/camera/file.list b/dali/internal/camera/file.list
new file mode 100755 (executable)
index 0000000..9b460ed
--- /dev/null
@@ -0,0 +1,6 @@
+
+# module: camera, backend: common
+SET( adaptor_camera_common_src_files
+    ${adaptor_camera_dir}/common/camera-player-impl.cpp
+)
+