summaryrefslogtreecommitdiff
path: root/avmedia/source/viewer/mediawindowbase_impl.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'avmedia/source/viewer/mediawindowbase_impl.cxx')
-rw-r--r--avmedia/source/viewer/mediawindowbase_impl.cxx65
1 files changed, 45 insertions, 20 deletions
diff --git a/avmedia/source/viewer/mediawindowbase_impl.cxx b/avmedia/source/viewer/mediawindowbase_impl.cxx
index fdfa0b5ae5..db6d1f174e 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[] =
{
-
- uno::Reference< ::com::sun::star::media::XManager > xManager(
- xFactory->createInstance( ::rtl::OUString::createFromAscii( AVMEDIA_MANAGER_SERVICE_NAME ) ),
- uno::UNO_QUERY );
-
- if( xManager.is() )
+ { 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 );
+
+ 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( 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();
}
}