diff options
Diffstat (limited to 'avmedia/source/viewer/mediawindowbase_impl.cxx')
-rw-r--r-- | avmedia/source/viewer/mediawindowbase_impl.cxx | 61 |
1 files changed, 43 insertions, 18 deletions
diff --git a/avmedia/source/viewer/mediawindowbase_impl.cxx b/avmedia/source/viewer/mediawindowbase_impl.cxx index ea28121e3609..94a6c36ed064 100644 --- a/avmedia/source/viewer/mediawindowbase_impl.cxx +++ b/avmedia/source/viewer/mediawindowbase_impl.cxx @@ -47,8 +47,18 @@ namespace avmedia { namespace priv { // - MediaWindowBaseImpl - // ----------------------- +struct ServiceManager +{ + const char* pServiceName; + sal_Bool bIsJavaBased; +}; + +// --------------------------------------------------------------------- + + MediaWindowBaseImpl::MediaWindowBaseImpl( MediaWindow* pMediaWindow ) : - mpMediaWindow( pMediaWindow ) + mpMediaWindow( pMediaWindow ), + mbIsMediaWindowJavaBased( sal_False ) { } @@ -61,35 +71,53 @@ MediaWindowBaseImpl::~MediaWindowBaseImpl() // ------------------------------------------------------------------------- -uno::Reference< media::XPlayer > MediaWindowBaseImpl::createPlayer( const ::rtl::OUString& rURL ) +uno::Reference< media::XPlayer > MediaWindowBaseImpl::createPlayer( const ::rtl::OUString& rURL, sal_Bool& rbJavaBased ) { uno::Reference< lang::XMultiServiceFactory > xFactory( ::comphelper::getProcessServiceFactory() ); uno::Reference< media::XPlayer > xPlayer; + rbJavaBased = sal_False; + if( xFactory.is() ) { - try + static const ServiceManager aServiceManagers[] = + { + { AVMEDIA_MANAGER_SERVICE_NAME, AVMEDIA_MANAGER_SERVICE_IS_JAVABASED }, + { AVMEDIA_MANAGER_SERVICE_NAME_FALLBACK1, AVMEDIA_MANAGER_SERVICE_IS_JAVABASED_FALLBACK1 } + }; + + for( sal_uInt32 i = 0; !xPlayer.is() && ( i < ( sizeof( aServiceManagers ) / sizeof( ServiceManager ) ) ); ++i ) { + const String aServiceName( aServiceManagers[ i ].pServiceName, RTL_TEXTENCODING_ASCII_US ); + + if( aServiceName.Len() ) + { + OSL_TRACE( "Trying to create media manager service %s", aServiceManagers[ i ].pServiceName ); - uno::Reference< ::com::sun::star::media::XManager > xManager( - xFactory->createInstance( ::rtl::OUString::createFromAscii( AVMEDIA_MANAGER_SERVICE_NAME ) ), - uno::UNO_QUERY ); + try + { + uno::Reference< media::XManager > xManager( xFactory->createInstance( aServiceName ), uno::UNO_QUERY ); + + if( xManager.is() ) + { + xPlayer = uno::Reference< media::XPlayer >( xManager->createPlayer( rURL ), uno::UNO_QUERY ); + } + } + catch( ... ) + { + } + } - if( xManager.is() ) + if( xPlayer.is() ) { - xPlayer = uno::Reference< ::com::sun::star::media::XPlayer >( - xManager->createPlayer( rURL ), uno::UNO_QUERY ); + rbJavaBased = aServiceManagers[ i ].bIsJavaBased; } } - catch( ... ) - { - } } return xPlayer; } - // --------------------------------------------------------------------- void MediaWindowBaseImpl::setURL( const ::rtl::OUString& rURL ) @@ -112,7 +140,7 @@ void MediaWindowBaseImpl::setURL( const ::rtl::OUString& rURL ) if( aURL.GetProtocol() != INET_PROT_NOT_VALID ) maFileURL = aURL.GetMainURL( INetURLObject::DECODE_UNAMBIGUOUS ); - mxPlayer = createPlayer( maFileURL ); + mxPlayer = createPlayer( maFileURL, mbIsMediaWindowJavaBased ); onURLChanged(); } } @@ -143,10 +171,7 @@ void MediaWindowBaseImpl::stopPlayingInternal( bool bStop ) { if( isPlaying() ) { - if( bStop ) - mxPlayer->stop(); - else - mxPlayer->start(); + bStop ? mxPlayer->stop() : mxPlayer->start(); } } |