1*f39251c4SAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*f39251c4SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*f39251c4SAndrew Rist * or more contributor license agreements. See the NOTICE file 5*f39251c4SAndrew Rist * distributed with this work for additional information 6*f39251c4SAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*f39251c4SAndrew Rist * to you under the Apache License, Version 2.0 (the 8*f39251c4SAndrew Rist * "License"); you may not use this file except in compliance 9*f39251c4SAndrew Rist * with the License. You may obtain a copy of the License at 10cdf0e10cSrcweir * 11*f39251c4SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12cdf0e10cSrcweir * 13*f39251c4SAndrew Rist * Unless required by applicable law or agreed to in writing, 14*f39251c4SAndrew Rist * software distributed under the License is distributed on an 15*f39251c4SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*f39251c4SAndrew Rist * KIND, either express or implied. See the License for the 17*f39251c4SAndrew Rist * specific language governing permissions and limitations 18*f39251c4SAndrew Rist * under the License. 19cdf0e10cSrcweir * 20*f39251c4SAndrew Rist *************************************************************/ 21*f39251c4SAndrew Rist 22*f39251c4SAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir #include "mediawindowbase_impl.hxx" 25cdf0e10cSrcweir #include <avmedia/mediaitem.hxx> 26cdf0e10cSrcweir #include "mediamisc.hxx" 27cdf0e10cSrcweir #include "mediawindow.hrc" 28cdf0e10cSrcweir #include <tools/urlobj.hxx> 29cdf0e10cSrcweir #include <comphelper/processfactory.hxx> 30cdf0e10cSrcweir #include <com/sun/star/lang/XMultiServiceFactory.hpp> 31cdf0e10cSrcweir #include <com/sun/star/media/XManager.hpp> 32cdf0e10cSrcweir #ifndef _COM_SUN_STAR_LANG_XCOMPONENT_HDL_ 33cdf0e10cSrcweir #include <com/sun/star/lang/XComponent.hdl> 34cdf0e10cSrcweir #endif 35cdf0e10cSrcweir 36cdf0e10cSrcweir #define MEDIA_TIMER_TIMEOUT 100 37cdf0e10cSrcweir 38cdf0e10cSrcweir using namespace ::com::sun::star; 39cdf0e10cSrcweir 40cdf0e10cSrcweir namespace avmedia { namespace priv { 41cdf0e10cSrcweir 42cdf0e10cSrcweir // ----------------------- 43cdf0e10cSrcweir // - MediaWindowBaseImpl - 44cdf0e10cSrcweir // ----------------------- 45cdf0e10cSrcweir 46cdf0e10cSrcweir struct ServiceManager 47cdf0e10cSrcweir { 48cdf0e10cSrcweir const char* pServiceName; 49cdf0e10cSrcweir sal_Bool bIsJavaBased; 50cdf0e10cSrcweir }; 51cdf0e10cSrcweir 52cdf0e10cSrcweir // --------------------------------------------------------------------- 53cdf0e10cSrcweir 54cdf0e10cSrcweir 55cdf0e10cSrcweir MediaWindowBaseImpl::MediaWindowBaseImpl( MediaWindow* pMediaWindow ) : 56cdf0e10cSrcweir mpMediaWindow( pMediaWindow ), 57cdf0e10cSrcweir mbIsMediaWindowJavaBased( sal_False ) 58cdf0e10cSrcweir { 59cdf0e10cSrcweir } 60cdf0e10cSrcweir 61cdf0e10cSrcweir // --------------------------------------------------------------------- 62cdf0e10cSrcweir 63cdf0e10cSrcweir MediaWindowBaseImpl::~MediaWindowBaseImpl() 64cdf0e10cSrcweir { 65cdf0e10cSrcweir uno::Reference< lang::XMultiServiceFactory > xFactory( ::comphelper::getProcessServiceFactory() ); 66cdf0e10cSrcweir } 67cdf0e10cSrcweir 68cdf0e10cSrcweir // ------------------------------------------------------------------------- 69cdf0e10cSrcweir 70cdf0e10cSrcweir uno::Reference< media::XPlayer > MediaWindowBaseImpl::createPlayer( const ::rtl::OUString& rURL, sal_Bool& rbJavaBased ) 71cdf0e10cSrcweir { 72cdf0e10cSrcweir uno::Reference< lang::XMultiServiceFactory > xFactory( ::comphelper::getProcessServiceFactory() ); 73cdf0e10cSrcweir uno::Reference< media::XPlayer > xPlayer; 74cdf0e10cSrcweir 75cdf0e10cSrcweir rbJavaBased = sal_False; 76cdf0e10cSrcweir 77cdf0e10cSrcweir if( xFactory.is() ) 78cdf0e10cSrcweir { 79cdf0e10cSrcweir static const ServiceManager aServiceManagers[] = 80cdf0e10cSrcweir { 81cdf0e10cSrcweir { AVMEDIA_MANAGER_SERVICE_NAME, AVMEDIA_MANAGER_SERVICE_IS_JAVABASED }, 82cdf0e10cSrcweir { AVMEDIA_MANAGER_SERVICE_NAME_FALLBACK1, AVMEDIA_MANAGER_SERVICE_IS_JAVABASED_FALLBACK1 } 83cdf0e10cSrcweir }; 84cdf0e10cSrcweir 85cdf0e10cSrcweir for( sal_uInt32 i = 0; !xPlayer.is() && ( i < ( sizeof( aServiceManagers ) / sizeof( ServiceManager ) ) ); ++i ) 86cdf0e10cSrcweir { 87cdf0e10cSrcweir const String aServiceName( aServiceManagers[ i ].pServiceName, RTL_TEXTENCODING_ASCII_US ); 88cdf0e10cSrcweir 89cdf0e10cSrcweir if( aServiceName.Len() ) 90cdf0e10cSrcweir { 91cdf0e10cSrcweir OSL_TRACE( "Trying to create media manager service %s", aServiceManagers[ i ].pServiceName ); 92cdf0e10cSrcweir 93cdf0e10cSrcweir try 94cdf0e10cSrcweir { 95cdf0e10cSrcweir uno::Reference< media::XManager > xManager( xFactory->createInstance( aServiceName ), uno::UNO_QUERY ); 96cdf0e10cSrcweir 97cdf0e10cSrcweir if( xManager.is() ) 98cdf0e10cSrcweir { 99cdf0e10cSrcweir xPlayer = uno::Reference< media::XPlayer >( xManager->createPlayer( rURL ), uno::UNO_QUERY ); 100cdf0e10cSrcweir } 101cdf0e10cSrcweir } 102cdf0e10cSrcweir catch( ... ) 103cdf0e10cSrcweir { 104cdf0e10cSrcweir } 105cdf0e10cSrcweir } 106cdf0e10cSrcweir 107cdf0e10cSrcweir if( xPlayer.is() ) 108cdf0e10cSrcweir { 109cdf0e10cSrcweir rbJavaBased = aServiceManagers[ i ].bIsJavaBased; 110cdf0e10cSrcweir } 111cdf0e10cSrcweir } 112cdf0e10cSrcweir } 113cdf0e10cSrcweir 114cdf0e10cSrcweir return xPlayer; 115cdf0e10cSrcweir } 116cdf0e10cSrcweir 117cdf0e10cSrcweir // --------------------------------------------------------------------- 118cdf0e10cSrcweir 119cdf0e10cSrcweir void MediaWindowBaseImpl::setURL( const ::rtl::OUString& rURL ) 120cdf0e10cSrcweir { 121cdf0e10cSrcweir if( rURL != getURL() ) 122cdf0e10cSrcweir { 123cdf0e10cSrcweir INetURLObject aURL( maFileURL = rURL ); 124cdf0e10cSrcweir 125cdf0e10cSrcweir if( mxPlayer.is() ) 126cdf0e10cSrcweir mxPlayer->stop(); 127cdf0e10cSrcweir 128cdf0e10cSrcweir if( mxPlayerWindow.is() ) 129cdf0e10cSrcweir { 130cdf0e10cSrcweir mxPlayerWindow->setVisible( false ); 131cdf0e10cSrcweir mxPlayerWindow.clear(); 132cdf0e10cSrcweir } 133cdf0e10cSrcweir 134cdf0e10cSrcweir mxPlayer.clear(); 135cdf0e10cSrcweir 136cdf0e10cSrcweir if( aURL.GetProtocol() != INET_PROT_NOT_VALID ) 137cdf0e10cSrcweir maFileURL = aURL.GetMainURL( INetURLObject::DECODE_UNAMBIGUOUS ); 138cdf0e10cSrcweir 139cdf0e10cSrcweir mxPlayer = createPlayer( maFileURL, mbIsMediaWindowJavaBased ); 140cdf0e10cSrcweir onURLChanged(); 141cdf0e10cSrcweir } 142cdf0e10cSrcweir } 143cdf0e10cSrcweir 144cdf0e10cSrcweir // --------------------------------------------------------------------- 145cdf0e10cSrcweir 146cdf0e10cSrcweir void MediaWindowBaseImpl::onURLChanged() 147cdf0e10cSrcweir { 148cdf0e10cSrcweir } 149cdf0e10cSrcweir 150cdf0e10cSrcweir // --------------------------------------------------------------------- 151cdf0e10cSrcweir 152cdf0e10cSrcweir const ::rtl::OUString& MediaWindowBaseImpl::getURL() const 153cdf0e10cSrcweir { 154cdf0e10cSrcweir return maFileURL; 155cdf0e10cSrcweir } 156cdf0e10cSrcweir 157cdf0e10cSrcweir // --------------------------------------------------------------------- 158cdf0e10cSrcweir 159cdf0e10cSrcweir bool MediaWindowBaseImpl::isValid() const 160cdf0e10cSrcweir { 161cdf0e10cSrcweir return( getPlayer().is() ); 162cdf0e10cSrcweir } 163cdf0e10cSrcweir 164cdf0e10cSrcweir // --------------------------------------------------------------------- 165cdf0e10cSrcweir 166cdf0e10cSrcweir void MediaWindowBaseImpl::stopPlayingInternal( bool bStop ) 167cdf0e10cSrcweir { 168cdf0e10cSrcweir if( isPlaying() ) 169cdf0e10cSrcweir { 170cdf0e10cSrcweir bStop ? mxPlayer->stop() : mxPlayer->start(); 171cdf0e10cSrcweir } 172cdf0e10cSrcweir } 173cdf0e10cSrcweir 174cdf0e10cSrcweir // --------------------------------------------------------------------- 175cdf0e10cSrcweir 176cdf0e10cSrcweir MediaWindow* MediaWindowBaseImpl::getMediaWindow() const 177cdf0e10cSrcweir { 178cdf0e10cSrcweir return mpMediaWindow; 179cdf0e10cSrcweir } 180cdf0e10cSrcweir 181cdf0e10cSrcweir // --------------------------------------------------------------------- 182cdf0e10cSrcweir 183cdf0e10cSrcweir uno::Reference< media::XPlayer > MediaWindowBaseImpl::getPlayer() const 184cdf0e10cSrcweir { 185cdf0e10cSrcweir return mxPlayer; 186cdf0e10cSrcweir } 187cdf0e10cSrcweir 188cdf0e10cSrcweir // --------------------------------------------------------------------- 189cdf0e10cSrcweir 190cdf0e10cSrcweir uno::Reference< media::XPlayerWindow > MediaWindowBaseImpl::getPlayerWindow() const 191cdf0e10cSrcweir { 192cdf0e10cSrcweir return mxPlayerWindow; 193cdf0e10cSrcweir } 194cdf0e10cSrcweir 195cdf0e10cSrcweir // --------------------------------------------------------------------- 196cdf0e10cSrcweir 197cdf0e10cSrcweir void MediaWindowBaseImpl::setPlayerWindow( const uno::Reference< media::XPlayerWindow >& rxPlayerWindow ) 198cdf0e10cSrcweir { 199cdf0e10cSrcweir mxPlayerWindow = rxPlayerWindow; 200cdf0e10cSrcweir } 201cdf0e10cSrcweir 202cdf0e10cSrcweir // --------------------------------------------------------------------- 203cdf0e10cSrcweir 204cdf0e10cSrcweir void MediaWindowBaseImpl::cleanUp() 205cdf0e10cSrcweir { 206cdf0e10cSrcweir uno::Reference< lang::XComponent > xComponent( mxPlayer, uno::UNO_QUERY ); 207cdf0e10cSrcweir if( xComponent.is() ) // this stops the player 208cdf0e10cSrcweir xComponent->dispose(); 209cdf0e10cSrcweir 210cdf0e10cSrcweir mxPlayer.clear(); 211cdf0e10cSrcweir 212cdf0e10cSrcweir mpMediaWindow = NULL; 213cdf0e10cSrcweir } 214cdf0e10cSrcweir 215cdf0e10cSrcweir // --------------------------------------------------------------------- 216cdf0e10cSrcweir 217cdf0e10cSrcweir bool MediaWindowBaseImpl::hasPreferredSize() const 218cdf0e10cSrcweir { 219cdf0e10cSrcweir return( mxPlayerWindow.is() ); 220cdf0e10cSrcweir } 221cdf0e10cSrcweir 222cdf0e10cSrcweir // --------------------------------------------------------------------- 223cdf0e10cSrcweir 224cdf0e10cSrcweir Size MediaWindowBaseImpl::getPreferredSize() const 225cdf0e10cSrcweir { 226cdf0e10cSrcweir Size aRet; 227cdf0e10cSrcweir 228cdf0e10cSrcweir if( mxPlayer.is() ) 229cdf0e10cSrcweir { 230cdf0e10cSrcweir awt::Size aPrefSize( mxPlayer->getPreferredPlayerWindowSize() ); 231cdf0e10cSrcweir 232cdf0e10cSrcweir aRet.Width() = aPrefSize.Width; 233cdf0e10cSrcweir aRet.Height() = aPrefSize.Height; 234cdf0e10cSrcweir } 235cdf0e10cSrcweir 236cdf0e10cSrcweir return aRet; 237cdf0e10cSrcweir } 238cdf0e10cSrcweir 239cdf0e10cSrcweir // --------------------------------------------------------------------- 240cdf0e10cSrcweir 241cdf0e10cSrcweir bool MediaWindowBaseImpl::setZoom( ::com::sun::star::media::ZoomLevel eLevel ) 242cdf0e10cSrcweir { 243cdf0e10cSrcweir return( mxPlayerWindow.is() ? mxPlayerWindow->setZoomLevel( eLevel ) : false ); 244cdf0e10cSrcweir } 245cdf0e10cSrcweir 246cdf0e10cSrcweir // ------------------------------------------------------------------------- 247cdf0e10cSrcweir 248cdf0e10cSrcweir ::com::sun::star::media::ZoomLevel MediaWindowBaseImpl::getZoom() const 249cdf0e10cSrcweir { 250cdf0e10cSrcweir return( mxPlayerWindow.is() ? mxPlayerWindow->getZoomLevel() : ::com::sun::star::media::ZoomLevel_NOT_AVAILABLE ); 251cdf0e10cSrcweir } 252cdf0e10cSrcweir 253cdf0e10cSrcweir // --------------------------------------------------------------------- 254cdf0e10cSrcweir 255cdf0e10cSrcweir bool MediaWindowBaseImpl::start() 256cdf0e10cSrcweir { 257cdf0e10cSrcweir return( mxPlayer.is() ? ( mxPlayer->start(), true ) : false ); 258cdf0e10cSrcweir } 259cdf0e10cSrcweir 260cdf0e10cSrcweir // --------------------------------------------------------------------- 261cdf0e10cSrcweir 262cdf0e10cSrcweir void MediaWindowBaseImpl::stop() 263cdf0e10cSrcweir { 264cdf0e10cSrcweir if( mxPlayer.is() ) 265cdf0e10cSrcweir mxPlayer->stop(); 266cdf0e10cSrcweir } 267cdf0e10cSrcweir 268cdf0e10cSrcweir // --------------------------------------------------------------------- 269cdf0e10cSrcweir 270cdf0e10cSrcweir bool MediaWindowBaseImpl::isPlaying() const 271cdf0e10cSrcweir { 272cdf0e10cSrcweir return( mxPlayer.is() && mxPlayer->isPlaying() ); 273cdf0e10cSrcweir } 274cdf0e10cSrcweir 275cdf0e10cSrcweir // --------------------------------------------------------------------- 276cdf0e10cSrcweir 277cdf0e10cSrcweir double MediaWindowBaseImpl::getDuration() const 278cdf0e10cSrcweir { 279cdf0e10cSrcweir return( mxPlayer.is() ? mxPlayer->getDuration() : 0.0 ); 280cdf0e10cSrcweir } 281cdf0e10cSrcweir 282cdf0e10cSrcweir // --------------------------------------------------------------------- 283cdf0e10cSrcweir 284cdf0e10cSrcweir void MediaWindowBaseImpl::setMediaTime( double fTime ) 285cdf0e10cSrcweir { 286cdf0e10cSrcweir if( mxPlayer.is() ) 287cdf0e10cSrcweir mxPlayer->setMediaTime( fTime ); 288cdf0e10cSrcweir } 289cdf0e10cSrcweir 290cdf0e10cSrcweir // --------------------------------------------------------------------- 291cdf0e10cSrcweir 292cdf0e10cSrcweir double MediaWindowBaseImpl::getMediaTime() const 293cdf0e10cSrcweir { 294cdf0e10cSrcweir return( mxPlayer.is() ? mxPlayer->getMediaTime() : 0.0 ); 295cdf0e10cSrcweir } 296cdf0e10cSrcweir 297cdf0e10cSrcweir // --------------------------------------------------------------------- 298cdf0e10cSrcweir 299cdf0e10cSrcweir void MediaWindowBaseImpl::setStopTime( double fTime ) 300cdf0e10cSrcweir { 301cdf0e10cSrcweir if( mxPlayer.is() ) 302cdf0e10cSrcweir mxPlayer->setStopTime( fTime ); 303cdf0e10cSrcweir } 304cdf0e10cSrcweir 305cdf0e10cSrcweir // --------------------------------------------------------------------- 306cdf0e10cSrcweir 307cdf0e10cSrcweir double MediaWindowBaseImpl::getStopTime() const 308cdf0e10cSrcweir { 309cdf0e10cSrcweir return( mxPlayer.is() ? mxPlayer->getStopTime() : 0.0 ); 310cdf0e10cSrcweir } 311cdf0e10cSrcweir 312cdf0e10cSrcweir // --------------------------------------------------------------------- 313cdf0e10cSrcweir 314cdf0e10cSrcweir void MediaWindowBaseImpl::setRate( double fRate ) 315cdf0e10cSrcweir { 316cdf0e10cSrcweir if( mxPlayer.is() ) 317cdf0e10cSrcweir mxPlayer->setRate( fRate ); 318cdf0e10cSrcweir } 319cdf0e10cSrcweir 320cdf0e10cSrcweir // --------------------------------------------------------------------- 321cdf0e10cSrcweir 322cdf0e10cSrcweir double MediaWindowBaseImpl::getRate() const 323cdf0e10cSrcweir { 324cdf0e10cSrcweir return( mxPlayer.is() ? mxPlayer->getRate() : 0.0 ); 325cdf0e10cSrcweir } 326cdf0e10cSrcweir 327cdf0e10cSrcweir // --------------------------------------------------------------------- 328cdf0e10cSrcweir 329cdf0e10cSrcweir void MediaWindowBaseImpl::setPlaybackLoop( bool bSet ) 330cdf0e10cSrcweir { 331cdf0e10cSrcweir if( mxPlayer.is() ) 332cdf0e10cSrcweir mxPlayer->setPlaybackLoop( bSet ); 333cdf0e10cSrcweir } 334cdf0e10cSrcweir 335cdf0e10cSrcweir // --------------------------------------------------------------------- 336cdf0e10cSrcweir 337cdf0e10cSrcweir bool MediaWindowBaseImpl::isPlaybackLoop() const 338cdf0e10cSrcweir { 339cdf0e10cSrcweir return( mxPlayer.is() ? mxPlayer->isPlaybackLoop() : false ); 340cdf0e10cSrcweir } 341cdf0e10cSrcweir 342cdf0e10cSrcweir // --------------------------------------------------------------------- 343cdf0e10cSrcweir 344cdf0e10cSrcweir void MediaWindowBaseImpl::setMute( bool bSet ) 345cdf0e10cSrcweir { 346cdf0e10cSrcweir if( mxPlayer.is() ) 347cdf0e10cSrcweir mxPlayer->setMute( bSet ); 348cdf0e10cSrcweir } 349cdf0e10cSrcweir 350cdf0e10cSrcweir // --------------------------------------------------------------------- 351cdf0e10cSrcweir 352cdf0e10cSrcweir bool MediaWindowBaseImpl::isMute() const 353cdf0e10cSrcweir { 354cdf0e10cSrcweir return( mxPlayer.is() ? mxPlayer->isMute() : false ); 355cdf0e10cSrcweir } 356cdf0e10cSrcweir 357cdf0e10cSrcweir // --------------------------------------------------------------------- 358cdf0e10cSrcweir 359cdf0e10cSrcweir void MediaWindowBaseImpl::setVolumeDB( sal_Int16 nVolumeDB ) 360cdf0e10cSrcweir { 361cdf0e10cSrcweir if( mxPlayer.is() ) 362cdf0e10cSrcweir mxPlayer->setVolumeDB( nVolumeDB ); 363cdf0e10cSrcweir } 364cdf0e10cSrcweir 365cdf0e10cSrcweir // --------------------------------------------------------------------- 366cdf0e10cSrcweir 367cdf0e10cSrcweir sal_Int16 MediaWindowBaseImpl::getVolumeDB() const 368cdf0e10cSrcweir { 369cdf0e10cSrcweir return( mxPlayer.is() ? mxPlayer->getVolumeDB() : 0 ); 370cdf0e10cSrcweir } 371cdf0e10cSrcweir 372cdf0e10cSrcweir // ------------------------------------------------------------------------- 373cdf0e10cSrcweir 374cdf0e10cSrcweir void MediaWindowBaseImpl::updateMediaItem( MediaItem& rItem ) const 375cdf0e10cSrcweir { 376cdf0e10cSrcweir if( isPlaying() ) 377cdf0e10cSrcweir rItem.setState( ( getRate() > 1.0 ) ? MEDIASTATE_PLAYFFW : MEDIASTATE_PLAY ); 378cdf0e10cSrcweir else 379cdf0e10cSrcweir rItem.setState( ( 0.0 == getMediaTime() ) ? MEDIASTATE_STOP : MEDIASTATE_PAUSE ); 380cdf0e10cSrcweir 381cdf0e10cSrcweir rItem.setDuration( getDuration() ); 382cdf0e10cSrcweir rItem.setTime( getMediaTime() ); 383cdf0e10cSrcweir rItem.setLoop( isPlaybackLoop() ); 384cdf0e10cSrcweir rItem.setMute( isMute() ); 385cdf0e10cSrcweir rItem.setVolumeDB( getVolumeDB() ); 386cdf0e10cSrcweir rItem.setZoom( getZoom() ); 387cdf0e10cSrcweir rItem.setURL( getURL() ); 388cdf0e10cSrcweir } 389cdf0e10cSrcweir 390cdf0e10cSrcweir // ------------------------------------------------------------------------- 391cdf0e10cSrcweir 392cdf0e10cSrcweir void MediaWindowBaseImpl::executeMediaItem( const MediaItem& rItem ) 393cdf0e10cSrcweir { 394cdf0e10cSrcweir const sal_uInt32 nMaskSet = rItem.getMaskSet(); 395cdf0e10cSrcweir 396cdf0e10cSrcweir // set URL first 397cdf0e10cSrcweir if( nMaskSet & AVMEDIA_SETMASK_URL ) 398cdf0e10cSrcweir setURL( rItem.getURL() ); 399cdf0e10cSrcweir 400cdf0e10cSrcweir // set different states next 401cdf0e10cSrcweir if( nMaskSet & AVMEDIA_SETMASK_TIME ) 402cdf0e10cSrcweir setMediaTime( ::std::min( rItem.getTime(), getDuration() ) ); 403cdf0e10cSrcweir 404cdf0e10cSrcweir if( nMaskSet & AVMEDIA_SETMASK_LOOP ) 405cdf0e10cSrcweir setPlaybackLoop( rItem.isLoop() ); 406cdf0e10cSrcweir 407cdf0e10cSrcweir if( nMaskSet & AVMEDIA_SETMASK_MUTE ) 408cdf0e10cSrcweir setMute( rItem.isMute() ); 409cdf0e10cSrcweir 410cdf0e10cSrcweir if( nMaskSet & AVMEDIA_SETMASK_VOLUMEDB ) 411cdf0e10cSrcweir setVolumeDB( rItem.getVolumeDB() ); 412cdf0e10cSrcweir 413cdf0e10cSrcweir if( nMaskSet & AVMEDIA_SETMASK_ZOOM ) 414cdf0e10cSrcweir setZoom( rItem.getZoom() ); 415cdf0e10cSrcweir 416cdf0e10cSrcweir // set play state at last 417cdf0e10cSrcweir if( nMaskSet & AVMEDIA_SETMASK_STATE ) 418cdf0e10cSrcweir { 419cdf0e10cSrcweir switch( rItem.getState() ) 420cdf0e10cSrcweir { 421cdf0e10cSrcweir case( MEDIASTATE_PLAY ): 422cdf0e10cSrcweir case( MEDIASTATE_PLAYFFW ): 423cdf0e10cSrcweir { 424cdf0e10cSrcweir /* 425cdf0e10cSrcweir const double fNewRate = ( ( MEDIASTATE_PLAYFFW == rItem.getState() ) ? AVMEDIA_FFW_PLAYRATE : 1.0 ); 426cdf0e10cSrcweir 427cdf0e10cSrcweir if( getRate() != fNewRate ) 428cdf0e10cSrcweir setRate( fNewRate ); 429cdf0e10cSrcweir */ 430cdf0e10cSrcweir if( !isPlaying() ) 431cdf0e10cSrcweir start(); 432cdf0e10cSrcweir } 433cdf0e10cSrcweir break; 434cdf0e10cSrcweir 435cdf0e10cSrcweir case( MEDIASTATE_PAUSE ): 436cdf0e10cSrcweir { 437cdf0e10cSrcweir if( isPlaying() ) 438cdf0e10cSrcweir stop(); 439cdf0e10cSrcweir } 440cdf0e10cSrcweir break; 441cdf0e10cSrcweir 442cdf0e10cSrcweir case( MEDIASTATE_STOP ): 443cdf0e10cSrcweir { 444cdf0e10cSrcweir if( isPlaying() ) 445cdf0e10cSrcweir { 446cdf0e10cSrcweir setMediaTime( 0.0 ); 447cdf0e10cSrcweir stop(); 448cdf0e10cSrcweir setMediaTime( 0.0 ); 449cdf0e10cSrcweir } 450cdf0e10cSrcweir } 451cdf0e10cSrcweir break; 452cdf0e10cSrcweir } 453cdf0e10cSrcweir } 454cdf0e10cSrcweir } 455cdf0e10cSrcweir 456cdf0e10cSrcweir } // namespace priv 457cdf0e10cSrcweir } // namespace avemdia 458