[Libreoffice-commits] core.git: 2 commits - avmedia/source

Zolnai Tamás tamas.zolnai at collabora.com
Thu May 29 04:27:15 PDT 2014


 avmedia/source/opengl/oglplayer.cxx |   23 ++++++++++
 avmedia/source/opengl/oglwindow.cxx |   79 ++++++++++++++++++------------------
 avmedia/source/opengl/oglwindow.hxx |    8 +--
 3 files changed, 66 insertions(+), 44 deletions(-)

New commits:
commit 0bff18c4ec19462d325ea0ca6a24c3a15c1f8cfb
Author: Zolnai Tamás <tamas.zolnai at collabora.com>
Date:   Thu May 29 13:21:08 2014 +0200

    OGLWindow: use reference instead of pointer
    
    Change-Id: I72ef9570ac9e7b4cb4afc2319725743098722d31

diff --git a/avmedia/source/opengl/oglplayer.cxx b/avmedia/source/opengl/oglplayer.cxx
index f37735a..8137b96 100644
--- a/avmedia/source/opengl/oglplayer.cxx
+++ b/avmedia/source/opengl/oglplayer.cxx
@@ -242,6 +242,7 @@ uno::Reference< media::XPlayerWindow > SAL_CALL OGLPlayer::createPlayerWindow( c
         SAL_WARN("avmedia.opengl", "Failed to get the SystemChildWindow for rendering!");
         return uno::Reference< media::XPlayerWindow >();
     }
+    assert(pChildWindow->GetParent());
 
     if( !m_aContext.init(pChildWindow) )
     {
@@ -264,7 +265,7 @@ uno::Reference< media::XPlayerWindow > SAL_CALL OGLPlayer::createPlayerWindow( c
         SAL_WARN("avmedia.opengl", "Error occured while parsing *.json file! Error code: " << nRet);
         return uno::Reference< media::XPlayerWindow >();
     }
-    m_pOGLWindow = new OGLWindow(m_pHandle, &m_aContext, pChildWindow);
+    m_pOGLWindow = new OGLWindow(*m_pHandle, m_aContext, *pChildWindow->GetParent());
     return uno::Reference< media::XPlayerWindow >( m_pOGLWindow );
 }
 
diff --git a/avmedia/source/opengl/oglwindow.cxx b/avmedia/source/opengl/oglwindow.cxx
index 160ef6f..545895d 100644
--- a/avmedia/source/opengl/oglwindow.cxx
+++ b/avmedia/source/opengl/oglwindow.cxx
@@ -14,10 +14,10 @@ using namespace com::sun::star;
 
 namespace avmedia { namespace ogl {
 
-OGLWindow::OGLWindow( glTFHandle* pHandle, OpenGLContext* pContext, SystemChildWindow* pChildWindow )
-    : m_pHandle( pHandle )
-    , m_pContext( pContext )
-    , m_pEventHandler( pChildWindow->GetParent() )
+OGLWindow::OGLWindow( glTFHandle& rHandle, OpenGLContext& rContext, Window& rEventHandlerParent )
+    : m_rHandle( rHandle )
+    , m_rContext( rContext )
+    , m_rEventHandler( rEventHandlerParent )
     , m_bVisible ( false )
     , meZoomLevel( media::ZoomLevel_ORIGINAL )
     , m_aLastMousePos(Point())
@@ -31,11 +31,11 @@ OGLWindow::~OGLWindow()
 
 void SAL_CALL OGLWindow::update() throw (css::uno::RuntimeException, std::exception)
 {
-    m_pContext->makeCurrent();
-    gltf_prepare_renderer(m_pHandle);
-    gltf_renderer(m_pHandle);
-    gltf_complete_renderer(m_pHandle);
-    m_pContext->swapBuffers();
+    m_rContext.makeCurrent();
+    gltf_prepare_renderer(&m_rHandle);
+    gltf_renderer(&m_rHandle);
+    gltf_complete_renderer(&m_rHandle);
+    m_rContext.swapBuffers();
 }
 
 sal_Bool SAL_CALL OGLWindow::setZoomLevel( css::media::ZoomLevel eZoomLevel ) throw (css::uno::RuntimeException, std::exception)
@@ -83,8 +83,9 @@ uno::Sequence< OUString > SAL_CALL OGLWindow::getSupportedServiceNames() throw (
 
 void SAL_CALL OGLWindow::dispose() throw (uno::RuntimeException, std::exception)
 {
-    m_pEventHandler->GetParent()->RemoveEventListener( LINK(this, OGLWindow, FocusGrabber));
-    m_pEventHandler->RemoveEventListener( LINK(this, OGLWindow, CameraHandler));
+    assert(m_rEventHandler.GetParent());
+    m_rEventHandler.GetParent()->RemoveEventListener( LINK(this, OGLWindow, FocusGrabber));
+    m_rEventHandler.RemoveEventListener( LINK(this, OGLWindow, CameraHandler));
 }
 
 void SAL_CALL OGLWindow::addEventListener( const uno::Reference< lang::XEventListener >& )
@@ -100,14 +101,14 @@ void SAL_CALL OGLWindow::removeEventListener( const uno::Reference< lang::XEvent
 void SAL_CALL OGLWindow::setPosSize( sal_Int32 nX, sal_Int32 nY, sal_Int32 nWidth, sal_Int32 nHeight, sal_Int16 /*nFlags*/ )
     throw (uno::RuntimeException, std::exception)
 {
-    if( m_pHandle->viewport.x != nX || m_pHandle->viewport.x != nY ||
-        m_pHandle->viewport.width != nWidth || m_pHandle->viewport.height != nHeight )
+    if( m_rHandle.viewport.x != nX || m_rHandle.viewport.x != nY ||
+        m_rHandle.viewport.width != nWidth || m_rHandle.viewport.height != nHeight )
     {
-        m_pContext->setWinSize(Size(nWidth,nHeight));
-        m_pHandle->viewport.x = nX;
-        m_pHandle->viewport.y = nY;
-        m_pHandle->viewport.width = nWidth;
-        m_pHandle->viewport.height = nHeight;
+        m_rContext.setWinSize(Size(nWidth,nHeight));
+        m_rHandle.viewport.x = nX;
+        m_rHandle.viewport.y = nY;
+        m_rHandle.viewport.width = nWidth;
+        m_rHandle.viewport.height = nHeight;
         if( m_bVisible )
         {
             update();
@@ -118,24 +119,25 @@ void SAL_CALL OGLWindow::setPosSize( sal_Int32 nX, sal_Int32 nY, sal_Int32 nWidt
 awt::Rectangle SAL_CALL OGLWindow::getPosSize()
     throw (uno::RuntimeException, std::exception)
 {
-    return awt::Rectangle(m_pHandle->viewport.x, m_pHandle->viewport.y,
-                          m_pHandle->viewport.width, m_pHandle->viewport.height);
+    return awt::Rectangle(m_rHandle.viewport.x, m_rHandle.viewport.y,
+                          m_rHandle.viewport.width, m_rHandle.viewport.height);
 }
 
 void SAL_CALL OGLWindow::setVisible( sal_Bool bSet )
     throw (uno::RuntimeException, std::exception)
 {
+    assert(m_rEventHandler.GetParent());
     if( bSet && !m_bVisible )
     {
         update();
-        m_pEventHandler->GetParent()->AddEventListener( LINK(this, OGLWindow, FocusGrabber));
-        m_pEventHandler->AddEventListener( LINK(this, OGLWindow, CameraHandler));
-        m_pEventHandler->GrabFocus();
+        m_rEventHandler.GetParent()->AddEventListener( LINK(this, OGLWindow, FocusGrabber));
+        m_rEventHandler.AddEventListener( LINK(this, OGLWindow, CameraHandler));
+        m_rEventHandler.GrabFocus();
     }
     else if( !bSet )
     {
-        m_pEventHandler->GetParent()->RemoveEventListener( LINK(this, OGLWindow, FocusGrabber));
-        m_pEventHandler->RemoveEventListener( LINK(this, OGLWindow, CameraHandler));
+        m_rEventHandler.GetParent()->RemoveEventListener( LINK(this, OGLWindow, FocusGrabber));
+        m_rEventHandler.RemoveEventListener( LINK(this, OGLWindow, CameraHandler));
     }
     m_bVisible = bSet;
 }
@@ -212,26 +214,25 @@ void SAL_CALL OGLWindow::removePaintListener( const uno::Reference< awt::XPaintL
 
 IMPL_LINK(OGLWindow, FocusGrabber, VclWindowEvent*, pEvent)
 {
-    assert(m_pEventHandler);
     if( pEvent->GetId() == VCLEVENT_WINDOW_MOUSEMOVE )
     {
         MouseEvent* pMouseEvt = (MouseEvent*)pEvent->GetData();
         if(pMouseEvt)
         {
             const Point& rMousePos = pMouseEvt->GetPosPixel();
-            const Rectangle aWinRect(m_pEventHandler->GetPosPixel(),m_pEventHandler->GetSizePixel());
+            const Rectangle aWinRect(m_rEventHandler.GetPosPixel(),m_rEventHandler.GetSizePixel());
             // Grab focus to the OpenGL window when mouse pointer is over it
             if( aWinRect.IsInside(rMousePos) )
             {
-                if ( !m_pEventHandler->HasFocus() )
+                if ( !m_rEventHandler.HasFocus() )
                 {
-                    m_pEventHandler->GrabFocus();
+                    m_rEventHandler.GrabFocus();
                 }
             }
             // Move focus to the document when mouse is not over the OpenGL window
-            else if ( m_pEventHandler->HasFocus() )
+            else if ( m_rEventHandler.HasFocus() )
             {
-                m_pEventHandler->GrabFocusToDocument();
+                m_rEventHandler.GrabFocusToDocument();
             }
         }
     }
@@ -257,8 +258,8 @@ IMPL_LINK(OGLWindow, CameraHandler, VclWindowEvent*, pEvent)
                     glm::vec3 vEye;
                     glm::vec3 vView;
                     glm::vec3 vUp;
-                    gltf_get_camera_pos(m_pHandle, &vEye,&vView,&vUp);
-                    float fModelSize =(float)gltf_get_model_size(m_pHandle);
+                    gltf_get_camera_pos(&m_rHandle, &vEye,&vView,&vUp);
+                    float fModelSize =(float)gltf_get_model_size(&m_rHandle);
 
                     glm::vec3 vMove = vView-vEye;
                     vMove = glm::normalize(vMove);
@@ -277,7 +278,7 @@ IMPL_LINK(OGLWindow, CameraHandler, VclWindowEvent*, pEvent)
                     if(nCode == KEY_W)vMoveBy -= vMup*(0.0005f*fModelSize);
                     if(nCode == KEY_S)vMoveBy += vMup*(0.0005f*fModelSize);
                 }
-                gltf_renderer_move_camera(m_pHandle, vMoveBy.x, vMoveBy.y, vMoveBy.z, 0.0);
+                gltf_renderer_move_camera(&m_rHandle, vMoveBy.x, vMoveBy.y, vMoveBy.z, 0.0);
                 update();
             }
         }
@@ -293,7 +294,7 @@ IMPL_LINK(OGLWindow, CameraHandler, VclWindowEvent*, pEvent)
                 nCode == KEY_A || nCode == KEY_D ||
                 nCode == KEY_W || nCode == KEY_S )
             {
-                gltf_renderer_move_camera(m_pHandle, 0.0, 0.0, 0.0, 0.0);
+                gltf_renderer_move_camera(&m_rHandle, 0.0, 0.0, 0.0, 0.0);
             }
         }
     }
@@ -307,15 +308,15 @@ IMPL_LINK(OGLWindow, CameraHandler, VclWindowEvent*, pEvent)
     }
     else if( pEvent->GetId() == VCLEVENT_WINDOW_MOUSEMOVE )
     {
-        if ( !m_pEventHandler->HasFocus() )
+        if ( !m_rEventHandler.HasFocus() )
         {
-            m_pEventHandler->GrabFocus();
+            m_rEventHandler.GrabFocus();
         }
         MouseEvent* pMouseEvt = (MouseEvent*)pEvent->GetData();
         if(pMouseEvt && pMouseEvt->IsLeft())
         {
             const Point& aCurPos = pMouseEvt->GetPosPixel();
-            float fSensitivity = std::min(m_pHandle->viewport.width, m_pHandle->viewport.height);
+            float fSensitivity = std::min(m_rHandle.viewport.width, m_rHandle.viewport.height);
             if (fSensitivity == 0.0)
                 fSensitivity = 1.0;
             else
@@ -324,7 +325,7 @@ IMPL_LINK(OGLWindow, CameraHandler, VclWindowEvent*, pEvent)
             long nDeltaX = m_aLastMousePos.X()-aCurPos.X();
             long nDeltaY = aCurPos.Y()-m_aLastMousePos.Y();
             // TODO: It seems this method just moves the camera but not rotate it.
-            gltf_renderer_rotate_camera(m_pHandle, (float)nDeltaX*fSensitivity, (float)nDeltaY*fSensitivity, 0.0, 0.0);
+            gltf_renderer_rotate_camera(&m_rHandle, (float)nDeltaX*fSensitivity, (float)nDeltaY*fSensitivity, 0.0, 0.0);
             update();
 
             m_aLastMousePos = aCurPos;
diff --git a/avmedia/source/opengl/oglwindow.hxx b/avmedia/source/opengl/oglwindow.hxx
index 2b1c943..db2d867 100644
--- a/avmedia/source/opengl/oglwindow.hxx
+++ b/avmedia/source/opengl/oglwindow.hxx
@@ -27,7 +27,7 @@ class OGLWindow : public ::cppu::WeakImplHelper2 < com::sun::star::media::XPlaye
                                                    com::sun::star::lang::XServiceInfo >
 {
 public:
-    OGLWindow( glTFHandle* pHandle, OpenGLContext* pContext, SystemChildWindow* pChildWindow );
+    OGLWindow( glTFHandle& rHandle, OpenGLContext& rContext, Window& rEventHandlerParent );
     virtual ~OGLWindow();
 
     virtual void SAL_CALL update() throw (com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
@@ -65,9 +65,9 @@ private:
     DECL_LINK( FocusGrabber, VclWindowEvent* );
     DECL_LINK( CameraHandler, VclWindowEvent* );
 
-    glTFHandle* m_pHandle;
-    OpenGLContext* m_pContext;
-    Window* m_pEventHandler;
+    glTFHandle& m_rHandle;
+    OpenGLContext& m_rContext;
+    Window& m_rEventHandler;
     bool m_bVisible;
     com::sun::star::media::ZoomLevel meZoomLevel;
     Point m_aLastMousePos;
commit c1e1576dc081876b39e6f70d13571521a61eeb64
Author: Zolnai Tamás <tamas.zolnai at collabora.com>
Date:   Thu May 29 13:24:34 2014 +0200

    OGLPlayer: use more assertions
    
    Change-Id: I0a224a90a3e99d12809d40612b1e66d7c023aebc

diff --git a/avmedia/source/opengl/oglplayer.cxx b/avmedia/source/opengl/oglplayer.cxx
index 88c93a6..f37735a 100644
--- a/avmedia/source/opengl/oglplayer.cxx
+++ b/avmedia/source/opengl/oglplayer.cxx
@@ -18,6 +18,8 @@
 #include <tools/urlobj.hxx>
 #include <vcl/opengl/OpenGLHelper.hxx>
 
+#include <cassert>
+
 using namespace com::sun::star;
 
 namespace avmedia { namespace ogl {
@@ -138,6 +140,7 @@ bool OGLPlayer::create( const OUString& rURL )
 void SAL_CALL OGLPlayer::start() throw ( uno::RuntimeException, std::exception )
 {
     osl::MutexGuard aGuard(m_aMutex);
+    assert(m_pHandle);
     gltf_animation_start(m_pHandle);
     m_aTimer.Start();
 }
@@ -145,6 +148,8 @@ void SAL_CALL OGLPlayer::start() throw ( uno::RuntimeException, std::exception )
 void SAL_CALL OGLPlayer::stop() throw ( uno::RuntimeException, std::exception )
 {
     osl::MutexGuard aGuard(m_aMutex);
+    assert(m_pHandle);
+    gltf_animation_stop(m_pHandle);
     m_aTimer.Stop();
     gltf_animation_stop(m_pHandle);
 }
@@ -152,12 +157,14 @@ void SAL_CALL OGLPlayer::stop() throw ( uno::RuntimeException, std::exception )
 sal_Bool SAL_CALL OGLPlayer::isPlaying() throw ( uno::RuntimeException, std::exception )
 {
     osl::MutexGuard aGuard(m_aMutex);
+    assert(m_pHandle);
     return (sal_Bool)gltf_animation_is_playing(m_pHandle);
 }
 
 double SAL_CALL OGLPlayer::getDuration() throw ( uno::RuntimeException, std::exception )
 {
     osl::MutexGuard aGuard(m_aMutex);
+    assert(m_pHandle);
     return gltf_animation_get_duration(m_pHandle);
 }
 
@@ -165,6 +172,7 @@ void SAL_CALL OGLPlayer::setMediaTime( double fTime ) throw ( uno::RuntimeExcept
 {
     // TODO: doesn't work, but cause problem in playing
     osl::MutexGuard aGuard(m_aMutex);
+    assert(m_pHandle);
     (void) fTime;
     //gltf_animation_set_time(m_pHandle, fTime);
 }
@@ -172,18 +180,21 @@ void SAL_CALL OGLPlayer::setMediaTime( double fTime ) throw ( uno::RuntimeExcept
 double SAL_CALL OGLPlayer::getMediaTime() throw ( ::com::sun::star::uno::RuntimeException, std::exception )
 {
     osl::MutexGuard aGuard(m_aMutex);
+    assert(m_pHandle);
     return 0.0; //gltf_animation_get_time(m_pHandle);
 }
 
 void SAL_CALL OGLPlayer::setPlaybackLoop( sal_Bool bSet ) throw ( uno::RuntimeException, std::exception )
 {
     osl::MutexGuard aGuard(m_aMutex);
+    assert(m_pHandle);
     gltf_animation_set_looping(m_pHandle, (int)bSet);
 }
 
 sal_Bool SAL_CALL OGLPlayer::isPlaybackLoop() throw ( uno::RuntimeException, std::exception )
 {
     osl::MutexGuard aGuard(m_aMutex);
+    assert(m_pHandle);
     return (sal_Bool)gltf_animation_get_looping(m_pHandle);
 }
 
@@ -220,11 +231,18 @@ uno::Reference< media::XPlayerWindow > SAL_CALL OGLPlayer::createPlayerWindow( c
     osl::MutexGuard aGuard( m_aMutex );
 
     assert( rArguments.getLength() >= 3 );
+    assert(m_pHandle);
 
     sal_IntPtr pIntPtr = 0;
     rArguments[ 2 ] >>= pIntPtr;
     SystemChildWindow *pChildWindow = reinterpret_cast< SystemChildWindow* >( pIntPtr );
 
+    if( !pChildWindow )
+    {
+        SAL_WARN("avmedia.opengl", "Failed to get the SystemChildWindow for rendering!");
+        return uno::Reference< media::XPlayerWindow >();
+    }
+
     if( !m_aContext.init(pChildWindow) )
     {
         SAL_WARN("avmedia.opengl", "Context initialization failed");
@@ -254,6 +272,7 @@ uno::Reference< media::XFrameGrabber > SAL_CALL OGLPlayer::createFrameGrabber()
      throw ( uno::RuntimeException, std::exception )
 {
     osl::MutexGuard aGuard(m_aMutex);
+    assert(m_pHandle);
 
     if( !m_aContext.init() )
     {
@@ -301,6 +320,7 @@ IMPL_LINK(OGLPlayer,TimerHandler,Timer*,pTimer)
     if (pTimer == &m_aTimer)
     {
         osl::MutexGuard aGuard(m_aMutex);
+        assert(m_pOGLWindow);
         m_pOGLWindow->update();
     }
 


More information about the Libreoffice-commits mailing list