Merge "Support the synchronization of window/screen rotation in Video Player." into...
authorWonsik Jung <sidein@samsung.com>
Wed, 24 Mar 2021 01:44:56 +0000 (01:44 +0000)
committerGerrit Code Review <gerrit@review>
Wed, 24 Mar 2021 01:44:56 +0000 (01:44 +0000)
automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-window-impl.h
automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-window.cpp
automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-window.h
automated-tests/src/dali-toolkit/utc-Dali-VideoView.cpp
dali-toolkit/internal/controls/video-view/video-view-impl.cpp
dali-toolkit/internal/controls/video-view/video-view-impl.h

index 25e0a16..f443251 100644 (file)
@@ -44,6 +44,8 @@ public:
   virtual ~Window() = default;
   static Window* New(const PositionSize& positionSize, const std::string& name, const std::string& className, bool isTransparent);
   FocusChangeSignalType mFocusChangeSignal;
+  ResizeSignalType      mResizeSignal;
+  int                   mRotationAngle;
   DevelWindow::VisibilityChangedSignalType mVisibilityChangedSignal;
 };
 
index 9e9ca35..9ab5021 100644 (file)
@@ -46,6 +46,8 @@ namespace Adaptor
 Window::Window( const PositionSize& positionSize )
 : SceneHolder( positionSize ),
   mFocusChangeSignal(),
+  mResizeSignal(),
+  mRotationAngle(90), // dummy angle for test coverage
   mVisibilityChangedSignal()
 {
 }
@@ -160,6 +162,11 @@ FocusChangeSignalType& Window::FocusChangeSignal()
   return GetImplementation( *this ).mFocusChangeSignal;
 }
 
+ResizeSignalType& Window::ResizeSignal()
+{
+  return GetImplementation( *this ).mResizeSignal;
+}
+
 Window::KeyEventSignalType& Window::KeyEventSignal()
 {
   return GetImplementation( *this ).KeyEventSignal();
@@ -195,6 +202,17 @@ Window DownCast( BaseHandle handle )
   return Dali::Window( windowImpl );
 }
 
+void SetPositionSize(Window window, PositionSize positionSize)
+{
+  Uint16Pair newSize(positionSize.width, positionSize.height);
+  GetImplementation( window ).mResizeSignal.Emit(window,newSize);
+}
+
+int GetPhysicalOrientation(Window window)
+{
+  return GetImplementation( window ).mRotationAngle;
+}
+
 void AddFrameRenderedCallback( Window window, std::unique_ptr< CallbackBase > callback, int32_t frameId )
 {
   CallbackBase::Execute( *callback, frameId );
index 2291139..a696684 100644 (file)
@@ -47,12 +47,16 @@ class Window;
 
 class Window;
 typedef Signal< void (Window,bool) > FocusChangeSignalType;
+typedef Signal< void (Window,Uint16Pair) > ResizeSignalType;
 
 class Window : public BaseHandle
 {
 public:
+  using WindowSize     = Uint16Pair;
+
   using KeyEventSignalType = Signal< void (const KeyEvent&) >;
   using TouchEventSignalType = Signal< void (const TouchEvent&) >;
+  using ResizeSignalType      = Signal<void(Window, WindowSize)>;
 
   static Window New(PositionSize windowPosition, const std::string& name, bool isTransparent = false);
   static Window New(PositionSize windowPosition, const std::string& name, const std::string& className, bool isTransparent = false);
@@ -76,6 +80,7 @@ public:
   FocusChangeSignalType& FocusChangeSignal();
   KeyEventSignalType& KeyEventSignal();
   TouchEventSignalType& TouchedSignal();
+  ResizeSignalType& ResizeSignal();
 
 public:
   explicit Window( Internal::Adaptor::Window* window );
@@ -93,6 +98,8 @@ typedef Signal< void ( Window, bool ) > VisibilityChangedSignalType;
 
 Dali::Window Get( Actor actor );
 Dali::Window DownCast(  BaseHandle handle );
+void SetPositionSize(Window window, PositionSize positionSize);
+int GetPhysicalOrientation(Window window);
 void AddFrameRenderedCallback( Window window, std::unique_ptr< CallbackBase > callback, int32_t frameId );
 void AddFramePresentedCallback( Window window, std::unique_ptr< CallbackBase > callback, int32_t frameId );
 
index b0aa75e..e8adb89 100644 (file)
@@ -21,6 +21,7 @@
 #include <dali-toolkit/dali-toolkit.h>
 #include <dali-toolkit/public-api/controls/video-view/video-view.h>
 #include <dali-toolkit/devel-api/controls/video-view/video-view-devel.h>
+#include <dali/devel-api/adaptor-framework/window-devel.h>
 #include <dali/devel-api/adaptor-framework/video-sync-mode.h>
 
 using namespace Dali;
@@ -787,3 +788,27 @@ int UtcDaliVideoViewResizeWithSynchronization(void)
 
   END_TEST;
 }
+
+// For coverage.
+int UtcDaliVideoViewSynchronizationForWindowRotation(void)
+{
+  ToolkitTestApplication application;
+  tet_infoline("UtcDaliVideoViewSynchronizationForWindowRotation");
+
+  Window window = Window::New(PositionSize(0,0,100,100) ,"", false);
+  DALI_TEST_CHECK( window );
+
+  VideoView view = VideoView::New( true );
+  DALI_TEST_CHECK( view );
+
+  window.Add( view );
+
+  view.Play();
+
+  DevelWindow::SetPositionSize(window,PositionSize(0,0,480, 240));
+
+  application.SendNotification();
+  application.Render();
+
+  END_TEST;
+}
index 5608105..7cfa656 100644 (file)
@@ -577,6 +577,9 @@ void VideoView::SetWindowSurfaceTarget()
     return;
   }
 
+  Dali::Window window = DevelWindow::Get(self);
+  window.ResizeSignal().Connect(this, &VideoView::OnWindowResized);
+
   int curPos = mVideoPlayer.GetPlayPosition();
 
   if(mIsPlay)
@@ -782,6 +785,17 @@ void VideoView::OnAnimationFinished(Animation& animation)
   SetFrameRenderCallback();
 }
 
+void VideoView::OnWindowResized(Dali::Window winHandle, Dali::Window::WindowSize size)
+{
+  Dali::VideoPlayerPlugin::DisplayRotation videoAngle  = mVideoPlayer.GetDisplayRotation();
+  int                                      windowAngle = (DevelWindow::GetPhysicalOrientation(winHandle) / 90);
+
+  if(windowAngle != videoAngle)
+  {
+    mVideoPlayer.SetDisplayRotation(static_cast<Dali::VideoPlayerPlugin::DisplayRotation>(windowAngle));
+  }
+}
+
 void VideoView::PlayAnimation(Dali::Animation animation)
 {
   if(mIsUnderlay && mSyncMode == Dali::VideoSyncMode::ENABLED)
index 4d76176..363cb9d 100644 (file)
@@ -22,6 +22,7 @@
 #include <dali/devel-api/adaptor-framework/video-player.h>
 #include <dali/devel-api/adaptor-framework/video-sync-mode.h>
 #include <dali/integration-api/adaptor-framework/trigger-event-factory.h>
+#include <dali/public-api/adaptor-framework/window.h>
 #include <dali/public-api/images/image-operations.h>
 #include <dali/public-api/object/property-conditions.h>
 #include <dali/public-api/object/property-map.h>
@@ -365,6 +366,15 @@ private:
    */
   void OnAnimationFinished(Dali::Animation& animation);
 
+  /*
+   * @brief window's resize callback function
+   * This function is called when window is resized.
+   *
+   * @param[in] winHandle The resized window's handle.
+   * @param[in] size The window's new size.
+   */
+  void OnWindowResized(Dali::Window winHandle, Dali::Window::WindowSize size);
+
 private:
   Dali::VideoPlayer     mVideoPlayer;
   Dali::ImageDimensions mVideoSize;