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.zol...@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.zol...@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(); }
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits