LCOV - code coverage report
Current view: top level - avmedia/source/viewer - mediawindowbase_impl.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 0 156 0.0 %
Date: 2012-08-25 Functions: 0 32 0.0 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 0 162 0.0 %

           Branch data     Line data    Source code
       1                 :            : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2                 :            : /*************************************************************************
       3                 :            :  *
       4                 :            :  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
       5                 :            :  *
       6                 :            :  * Copyright 2000, 2010 Oracle and/or its affiliates.
       7                 :            :  *
       8                 :            :  * OpenOffice.org - a multi-platform office productivity suite
       9                 :            :  *
      10                 :            :  * This file is part of OpenOffice.org.
      11                 :            :  *
      12                 :            :  * OpenOffice.org is free software: you can redistribute it and/or modify
      13                 :            :  * it under the terms of the GNU Lesser General Public License version 3
      14                 :            :  * only, as published by the Free Software Foundation.
      15                 :            :  *
      16                 :            :  * OpenOffice.org is distributed in the hope that it will be useful,
      17                 :            :  * but WITHOUT ANY WARRANTY; without even the implied warranty of
      18                 :            :  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      19                 :            :  * GNU Lesser General Public License version 3 for more details
      20                 :            :  * (a copy is included in the LICENSE file that accompanied this code).
      21                 :            :  *
      22                 :            :  * You should have received a copy of the GNU Lesser General Public License
      23                 :            :  * version 3 along with OpenOffice.org.  If not, see
      24                 :            :  * <http://www.openoffice.org/license.html>
      25                 :            :  * for a copy of the LGPLv3 License.
      26                 :            :  *
      27                 :            :  ************************************************************************/
      28                 :            : 
      29                 :            : #include "mediawindowbase_impl.hxx"
      30                 :            : #include <avmedia/mediaitem.hxx>
      31                 :            : #include "mediamisc.hxx"
      32                 :            : #include "mediawindow.hrc"
      33                 :            : #include <rtl/oustringostreaminserter.hxx>
      34                 :            : #include <sal/log.hxx>
      35                 :            : #include <tools/urlobj.hxx>
      36                 :            : #include <comphelper/processfactory.hxx>
      37                 :            : #include <com/sun/star/lang/XMultiServiceFactory.hpp>
      38                 :            : #include <com/sun/star/lang/XComponent.hpp>
      39                 :            : #include <com/sun/star/media/XManager.hpp>
      40                 :            : 
      41                 :            : using namespace ::com::sun::star;
      42                 :            : 
      43                 :            : namespace avmedia { namespace priv {
      44                 :            : 
      45                 :            : // -----------------------
      46                 :            : // - MediaWindowBaseImpl -
      47                 :            : // -----------------------
      48                 :            : 
      49                 :            : 
      50                 :          0 : MediaWindowBaseImpl::MediaWindowBaseImpl( MediaWindow* pMediaWindow )
      51                 :          0 :     : mpMediaWindow( pMediaWindow )
      52                 :            : {
      53                 :          0 : }
      54                 :            : 
      55                 :            : // ---------------------------------------------------------------------
      56                 :            : 
      57                 :          0 : MediaWindowBaseImpl::~MediaWindowBaseImpl()
      58                 :            : {
      59         [ #  # ]:          0 :     uno::Reference< lang::XMultiServiceFactory > xFactory( ::comphelper::getProcessServiceFactory() );
      60         [ #  # ]:          0 : }
      61                 :            : 
      62                 :            : // -------------------------------------------------------------------------
      63                 :            : 
      64                 :          0 : uno::Reference< media::XPlayer > MediaWindowBaseImpl::createPlayer( const ::rtl::OUString& rURL )
      65                 :            : {
      66         [ #  # ]:          0 :     uno::Reference< lang::XMultiServiceFactory >    xFactory( ::comphelper::getProcessServiceFactory() );
      67                 :          0 :     uno::Reference< media::XPlayer >                xPlayer;
      68                 :            : 
      69         [ #  # ]:          0 :     if( xFactory.is() )
      70                 :            :     {
      71                 :            :         try
      72                 :            :         {
      73                 :          0 :             uno::Reference< ::com::sun::star::media::XManager > xManager;
      74                 :            : 
      75                 :            :             try {
      76                 :            :                 xManager = uno::Reference< ::com::sun::star::media::XManager >(
      77         [ #  # ]:          0 :                         xFactory->createInstance( AVMEDIA_MANAGER_SERVICE_NAME ),
      78 [ #  # ][ #  # ]:          0 :                         uno::UNO_QUERY );
         [ #  # ][ #  # ]
      79         [ #  # ]:          0 :             } catch ( const uno::Exception & ) {
      80                 :            :             }
      81                 :            : 
      82                 :            : // a fallback path just for gstreamer which has
      83                 :            : // two significant versions deployed at once ...
      84                 :            : #ifdef AVMEDIA_MANAGER_SERVICE_NAME_OLD
      85         [ #  # ]:          0 :             if( !xManager.is() )
      86                 :            :             {
      87                 :            :                 xManager = uno::Reference< ::com::sun::star::media::XManager >(
      88         [ #  # ]:          0 :                         xFactory->createInstance( AVMEDIA_MANAGER_SERVICE_NAME_OLD ),
      89 [ #  # ][ #  # ]:          0 :                         uno::UNO_QUERY );
                 [ #  # ]
      90                 :            :             }
      91                 :            : #endif
      92                 :            : 
      93         [ #  # ]:          0 :             if( xManager.is() )
      94                 :            :             {
      95                 :            :                 xPlayer = uno::Reference< ::com::sun::star::media::XPlayer >(
      96 [ #  # ][ #  # ]:          0 :                     xManager->createPlayer( rURL ), uno::UNO_QUERY );
         [ #  # ][ #  # ]
      97                 :            :             }
      98                 :            :             else
      99                 :            :                 SAL_WARN(
     100                 :            :                     "avmedia",
     101                 :            :                     ("failed to create media player service "
     102         [ #  # ]:          0 :                      AVMEDIA_MANAGER_SERVICE_NAME));
     103                 :            :         }
     104         [ #  # ]:          0 :         catch( const uno::Exception &e )
     105                 :            :         {
     106                 :            :             SAL_WARN(
     107                 :            :                 "avmedia",
     108                 :            :                 "couldn't create media player " AVMEDIA_MANAGER_SERVICE_NAME
     109                 :            :                     ", exception '" << e.Message << '\'');
     110                 :            :         }
     111                 :            :     }
     112                 :            : 
     113                 :          0 :     return xPlayer;
     114                 :            : }
     115                 :            : 
     116                 :          0 : void MediaWindowBaseImpl::setURL( const ::rtl::OUString& rURL,
     117                 :            :         ::rtl::OUString const& rTempURL)
     118                 :            : {
     119         [ #  # ]:          0 :     if( rURL != getURL() )
     120                 :            :     {
     121         [ #  # ]:          0 :         if( mxPlayer.is() )
     122                 :          0 :             mxPlayer->stop();
     123                 :            : 
     124         [ #  # ]:          0 :         if( mxPlayerWindow.is() )
     125                 :            :         {
     126                 :          0 :             mxPlayerWindow->setVisible( false );
     127                 :          0 :             mxPlayerWindow.clear();
     128                 :            :         }
     129                 :            : 
     130                 :          0 :         mxPlayer.clear();
     131                 :          0 :         mTempFileURL = ::rtl::OUString();
     132                 :            : 
     133         [ #  # ]:          0 :         if (rTempURL.getLength())
     134                 :            :         {
     135                 :          0 :             maFileURL = rURL;
     136                 :          0 :             mTempFileURL = rTempURL;
     137                 :            :         }
     138                 :            :         else
     139                 :            :         {
     140         [ #  # ]:          0 :             INetURLObject aURL( rURL );
     141                 :            : 
     142         [ #  # ]:          0 :             if (aURL.GetProtocol() != INET_PROT_NOT_VALID)
     143         [ #  # ]:          0 :                 maFileURL = aURL.GetMainURL(INetURLObject::DECODE_UNAMBIGUOUS);
     144                 :            :             else
     145         [ #  # ]:          0 :                 maFileURL = rURL;
     146                 :            :         }
     147                 :            : 
     148                 :            :         mxPlayer = createPlayer(
     149 [ #  # ][ #  # ]:          0 :                 (mTempFileURL.getLength()) ? mTempFileURL : maFileURL );
     150                 :          0 :         onURLChanged();
     151                 :            :     }
     152                 :          0 : }
     153                 :            : 
     154                 :            : // ---------------------------------------------------------------------
     155                 :            : 
     156                 :          0 : void MediaWindowBaseImpl::onURLChanged()
     157                 :            : {
     158                 :          0 : }
     159                 :            : 
     160                 :            : // ---------------------------------------------------------------------
     161                 :            : 
     162                 :          0 : const ::rtl::OUString& MediaWindowBaseImpl::getURL() const
     163                 :            : {
     164                 :          0 :     return maFileURL;
     165                 :            : }
     166                 :            : 
     167                 :            : // ---------------------------------------------------------------------
     168                 :            : 
     169                 :          0 : bool MediaWindowBaseImpl::isValid() const
     170                 :            : {
     171                 :          0 :     return( getPlayer().is() );
     172                 :            : }
     173                 :            : 
     174                 :            : // ---------------------------------------------------------------------
     175                 :            : 
     176                 :          0 : void MediaWindowBaseImpl::stopPlayingInternal( bool bStop )
     177                 :            : {
     178         [ #  # ]:          0 :     if( isPlaying() )
     179                 :            :     {
     180         [ #  # ]:          0 :         bStop ? mxPlayer->stop() : mxPlayer->start();
     181                 :            :     }
     182                 :          0 : }
     183                 :            : 
     184                 :            : // ---------------------------------------------------------------------
     185                 :            : 
     186                 :          0 : MediaWindow* MediaWindowBaseImpl::getMediaWindow() const
     187                 :            : {
     188                 :          0 :     return mpMediaWindow;
     189                 :            : }
     190                 :            : 
     191                 :            : // ---------------------------------------------------------------------
     192                 :            : 
     193                 :          0 : uno::Reference< media::XPlayer > MediaWindowBaseImpl::getPlayer() const
     194                 :            : {
     195                 :          0 :     return mxPlayer;
     196                 :            : }
     197                 :            : 
     198                 :            : // ---------------------------------------------------------------------
     199                 :            : 
     200                 :          0 : uno::Reference< media::XPlayerWindow > MediaWindowBaseImpl::getPlayerWindow() const
     201                 :            : {
     202                 :          0 :     return mxPlayerWindow;
     203                 :            : }
     204                 :            : 
     205                 :            : // ---------------------------------------------------------------------
     206                 :            : 
     207                 :          0 : void MediaWindowBaseImpl::setPlayerWindow( const uno::Reference< media::XPlayerWindow >& rxPlayerWindow )
     208                 :            : {
     209                 :          0 :     mxPlayerWindow = rxPlayerWindow;
     210                 :          0 : }
     211                 :            : 
     212                 :            : // ---------------------------------------------------------------------
     213                 :            : 
     214                 :          0 : void MediaWindowBaseImpl::cleanUp()
     215                 :            : {
     216         [ #  # ]:          0 :     if( mxPlayer.is() )
     217                 :            :     {
     218 [ #  # ][ #  # ]:          0 :         mxPlayer->stop();
     219                 :            : 
     220         [ #  # ]:          0 :         uno::Reference< lang::XComponent > xComponent( mxPlayer, uno::UNO_QUERY );
     221                 :            : 
     222         [ #  # ]:          0 :         if( xComponent.is() )
     223 [ #  # ][ #  # ]:          0 :             xComponent->dispose();
     224                 :            : 
     225                 :          0 :         mxPlayer.clear();
     226                 :            :     }
     227                 :            : 
     228                 :          0 :     mpMediaWindow = NULL;
     229                 :          0 : }
     230                 :            : 
     231                 :            : // ---------------------------------------------------------------------
     232                 :            : 
     233                 :          0 : Size MediaWindowBaseImpl::getPreferredSize() const
     234                 :            : {
     235                 :          0 :     Size aRet;
     236                 :            : 
     237         [ #  # ]:          0 :     if( mxPlayer.is() )
     238                 :            :     {
     239 [ #  # ][ #  # ]:          0 :         awt::Size aPrefSize( mxPlayer->getPreferredPlayerWindowSize() );
     240                 :            : 
     241                 :          0 :         aRet.Width() = aPrefSize.Width;
     242                 :          0 :         aRet.Height() = aPrefSize.Height;
     243                 :            :     }
     244                 :            : 
     245                 :          0 :     return aRet;
     246                 :            : }
     247                 :            : 
     248                 :            : // ---------------------------------------------------------------------
     249                 :            : 
     250                 :          0 : bool MediaWindowBaseImpl::setZoom( ::com::sun::star::media::ZoomLevel eLevel )
     251                 :            : {
     252 [ #  # ][ #  # ]:          0 :     return( mxPlayerWindow.is() ? mxPlayerWindow->setZoomLevel( eLevel ) : false );
     253                 :            : }
     254                 :            : 
     255                 :            : // -------------------------------------------------------------------------
     256                 :            : 
     257                 :          0 : ::com::sun::star::media::ZoomLevel MediaWindowBaseImpl::getZoom() const
     258                 :            : {
     259         [ #  # ]:          0 :     return( mxPlayerWindow.is() ? mxPlayerWindow->getZoomLevel() : ::com::sun::star::media::ZoomLevel_NOT_AVAILABLE );
     260                 :            : }
     261                 :            : 
     262                 :            : // ---------------------------------------------------------------------
     263                 :            : 
     264                 :          0 : bool MediaWindowBaseImpl::start()
     265                 :            : {
     266         [ #  # ]:          0 :     return( mxPlayer.is() ? ( mxPlayer->start(), true ) : false );
     267                 :            : }
     268                 :            : 
     269                 :            : // ---------------------------------------------------------------------
     270                 :            : 
     271                 :          0 : void MediaWindowBaseImpl::stop()
     272                 :            : {
     273         [ #  # ]:          0 :     if( mxPlayer.is() )
     274                 :          0 :         mxPlayer->stop();
     275                 :          0 : }
     276                 :            : 
     277                 :            : // ---------------------------------------------------------------------
     278                 :            : 
     279                 :          0 : bool MediaWindowBaseImpl::isPlaying() const
     280                 :            : {
     281 [ #  # ][ #  # ]:          0 :     return( mxPlayer.is() && mxPlayer->isPlaying() );
     282                 :            : }
     283                 :            : 
     284                 :            : // ---------------------------------------------------------------------
     285                 :            : 
     286                 :          0 : double MediaWindowBaseImpl::getDuration() const
     287                 :            : {
     288         [ #  # ]:          0 :     return( mxPlayer.is() ? mxPlayer->getDuration() : 0.0 );
     289                 :            : }
     290                 :            : 
     291                 :            : // ---------------------------------------------------------------------
     292                 :            : 
     293                 :          0 : void MediaWindowBaseImpl::setMediaTime( double fTime )
     294                 :            : {
     295         [ #  # ]:          0 :     if( mxPlayer.is() )
     296                 :          0 :         mxPlayer->setMediaTime( fTime );
     297                 :          0 : }
     298                 :            : 
     299                 :            : // ---------------------------------------------------------------------
     300                 :            : 
     301                 :          0 : double MediaWindowBaseImpl::getMediaTime() const
     302                 :            : {
     303         [ #  # ]:          0 :     return( mxPlayer.is() ? mxPlayer->getMediaTime() : 0.0 );
     304                 :            : }
     305                 :            : 
     306                 :            : // ---------------------------------------------------------------------
     307                 :            : 
     308                 :          0 : double MediaWindowBaseImpl::getRate() const
     309                 :            : {
     310         [ #  # ]:          0 :     return( mxPlayer.is() ? mxPlayer->getRate() : 0.0 );
     311                 :            : }
     312                 :            : 
     313                 :            : // ---------------------------------------------------------------------
     314                 :            : 
     315                 :          0 : void MediaWindowBaseImpl::setPlaybackLoop( bool bSet )
     316                 :            : {
     317         [ #  # ]:          0 :     if( mxPlayer.is() )
     318                 :          0 :         mxPlayer->setPlaybackLoop( bSet );
     319                 :          0 : }
     320                 :            : 
     321                 :            : // ---------------------------------------------------------------------
     322                 :            : 
     323                 :          0 : bool MediaWindowBaseImpl::isPlaybackLoop() const
     324                 :            : {
     325 [ #  # ][ #  # ]:          0 :     return( mxPlayer.is() ? mxPlayer->isPlaybackLoop() : false );
     326                 :            : }
     327                 :            : 
     328                 :            : // ---------------------------------------------------------------------
     329                 :            : 
     330                 :          0 : void MediaWindowBaseImpl::setMute( bool bSet )
     331                 :            : {
     332         [ #  # ]:          0 :     if( mxPlayer.is() )
     333                 :          0 :         mxPlayer->setMute( bSet );
     334                 :          0 : }
     335                 :            : 
     336                 :            : // ---------------------------------------------------------------------
     337                 :            : 
     338                 :          0 : bool MediaWindowBaseImpl::isMute() const
     339                 :            : {
     340 [ #  # ][ #  # ]:          0 :     return( mxPlayer.is() ? mxPlayer->isMute() : false );
     341                 :            : }
     342                 :            : 
     343                 :            : // ---------------------------------------------------------------------
     344                 :            : 
     345                 :          0 : void MediaWindowBaseImpl::setVolumeDB( sal_Int16 nVolumeDB )
     346                 :            : {
     347         [ #  # ]:          0 :     if( mxPlayer.is() )
     348                 :          0 :         mxPlayer->setVolumeDB( nVolumeDB );
     349                 :          0 : }
     350                 :            : 
     351                 :            : // ---------------------------------------------------------------------
     352                 :            : 
     353                 :          0 : sal_Int16 MediaWindowBaseImpl::getVolumeDB() const
     354                 :            : {
     355         [ #  # ]:          0 :     return( mxPlayer.is() ? mxPlayer->getVolumeDB() : 0 );
     356                 :            : }
     357                 :            : 
     358                 :            : // -------------------------------------------------------------------------
     359                 :            : 
     360                 :          0 : void MediaWindowBaseImpl::updateMediaItem( MediaItem& rItem ) const
     361                 :            : {
     362         [ #  # ]:          0 :     if( isPlaying() )
     363         [ #  # ]:          0 :         rItem.setState( ( getRate() > 1.0 ) ? MEDIASTATE_PLAYFFW : MEDIASTATE_PLAY );
     364                 :            :     else
     365         [ #  # ]:          0 :         rItem.setState( ( 0.0 == getMediaTime() ) ? MEDIASTATE_STOP : MEDIASTATE_PAUSE );
     366                 :            : 
     367                 :          0 :     rItem.setDuration( getDuration() );
     368                 :          0 :     rItem.setTime( getMediaTime() );
     369                 :          0 :     rItem.setLoop( isPlaybackLoop() );
     370                 :          0 :     rItem.setMute( isMute() );
     371                 :          0 :     rItem.setVolumeDB( getVolumeDB() );
     372                 :          0 :     rItem.setZoom( getZoom() );
     373                 :          0 :     rItem.setURL( getURL(), &mTempFileURL );
     374                 :          0 : }
     375                 :            : 
     376                 :            : // -------------------------------------------------------------------------
     377                 :            : 
     378                 :          0 : void MediaWindowBaseImpl::executeMediaItem( const MediaItem& rItem )
     379                 :            : {
     380                 :          0 :     const sal_uInt32 nMaskSet = rItem.getMaskSet();
     381                 :            : 
     382                 :            :     // set URL first
     383         [ #  # ]:          0 :     if( nMaskSet & AVMEDIA_SETMASK_URL )
     384                 :          0 :         setURL( rItem.getURL(), rItem.getTempURL() );
     385                 :            : 
     386                 :            :     // set different states next
     387         [ #  # ]:          0 :     if( nMaskSet & AVMEDIA_SETMASK_TIME )
     388 [ #  # ][ #  # ]:          0 :         setMediaTime( ::std::min( rItem.getTime(), getDuration() ) );
                 [ #  # ]
     389                 :            : 
     390         [ #  # ]:          0 :     if( nMaskSet & AVMEDIA_SETMASK_LOOP )
     391                 :          0 :         setPlaybackLoop( rItem.isLoop() );
     392                 :            : 
     393         [ #  # ]:          0 :     if( nMaskSet & AVMEDIA_SETMASK_MUTE )
     394                 :          0 :         setMute( rItem.isMute() );
     395                 :            : 
     396         [ #  # ]:          0 :     if( nMaskSet & AVMEDIA_SETMASK_VOLUMEDB )
     397                 :          0 :         setVolumeDB( rItem.getVolumeDB() );
     398                 :            : 
     399         [ #  # ]:          0 :     if( nMaskSet & AVMEDIA_SETMASK_ZOOM )
     400                 :          0 :         setZoom( rItem.getZoom() );
     401                 :            : 
     402                 :            :     // set play state at last
     403         [ #  # ]:          0 :     if( nMaskSet & AVMEDIA_SETMASK_STATE )
     404                 :            :     {
     405   [ #  #  #  # ]:          0 :         switch( rItem.getState() )
     406                 :            :         {
     407                 :            :             case( MEDIASTATE_PLAY ):
     408                 :            :             case( MEDIASTATE_PLAYFFW ):
     409                 :            :             {
     410                 :            : 
     411         [ #  # ]:          0 :                 if( !isPlaying() )
     412                 :          0 :                     start();
     413                 :            :             }
     414                 :          0 :             break;
     415                 :            : 
     416                 :            :             case( MEDIASTATE_PAUSE ):
     417                 :            :             {
     418         [ #  # ]:          0 :                 if( isPlaying() )
     419                 :          0 :                     stop();
     420                 :            :             }
     421                 :          0 :             break;
     422                 :            : 
     423                 :            :             case( MEDIASTATE_STOP ):
     424                 :            :             {
     425         [ #  # ]:          0 :                 if( isPlaying() )
     426                 :            :                 {
     427                 :          0 :                     setMediaTime( 0.0 );
     428                 :          0 :                     stop();
     429                 :          0 :                     setMediaTime( 0.0 );
     430                 :            :                 }
     431                 :            :             }
     432                 :          0 :             break;
     433                 :            :         }
     434                 :            :     }
     435                 :          0 : }
     436                 :            : 
     437                 :            : } // namespace priv
     438                 :            : } // namespace avemdia
     439                 :            : 
     440                 :            : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10