diff options
author | Zolnai Tamás <tamas.zolnai@collabora.com> | 2014-04-04 13:14:45 +0200 |
---|---|---|
committer | root <root@linux-3qg3.site> | 2014-04-04 19:06:11 +0200 |
commit | f470f3c72efb3fad109e62247c4d0abebc359345 (patch) | |
tree | f3a7969c13bae5d43ba5bc09935117c78deb5742 /avmedia/source/viewer | |
parent | 97b20c9deee46195357896197440cc1cc43d3452 (diff) |
Introduce a new media shape property to handle mime type
Default mime-type for all media objects:
"application/vnd.sun.star.media"
The problem of missing mime-type detection
still exists. For now only glTF model has
a concrete type.
Change-Id: I4dca26c1c47a564579bbed926bffa3aa5eda6c04
Diffstat (limited to 'avmedia/source/viewer')
-rw-r--r-- | avmedia/source/viewer/mediawindow_impl.cxx | 76 | ||||
-rw-r--r-- | avmedia/source/viewer/mediawindow_impl.hxx | 8 |
2 files changed, 54 insertions, 30 deletions
diff --git a/avmedia/source/viewer/mediawindow_impl.cxx b/avmedia/source/viewer/mediawindow_impl.cxx index 43416d3e760a..f24c6e18c214 100644 --- a/avmedia/source/viewer/mediawindow_impl.cxx +++ b/avmedia/source/viewer/mediawindow_impl.cxx @@ -205,51 +205,67 @@ MediaWindowImpl::~MediaWindowImpl() delete mpMediaWindowControl; } -uno::Reference< media::XPlayer > MediaWindowImpl::createPlayer( const OUString& rURL, const OUString& rReferer ) +uno::Reference< media::XPlayer > MediaWindowImpl::createPlayer( const OUString& rURL, const OUString& rReferer, OUString* pMimeType ) { + uno::Reference< media::XPlayer > xPlayer; if (SvtSecurityOptions().isUntrustedReferer(rReferer)) { return xPlayer; } - uno::Reference< uno::XComponentContext > xContext( ::comphelper::getProcessComponentContext() ); - static const char * aServiceManagers[] = { - AVMEDIA_MANAGER_SERVICE_PREFERRED, - AVMEDIA_MANAGER_SERVICE_NAME, + if ( !pMimeType || *pMimeType == AVMEDIA_MIMETYPE_COMMON ) + { + + static const char * aServiceManagers[] = { + AVMEDIA_MANAGER_SERVICE_PREFERRED, + AVMEDIA_MANAGER_SERVICE_NAME, // a fallback path just for gstreamer which has // two significant versions deployed at once ... #ifdef AVMEDIA_MANAGER_SERVICE_NAME_OLD - AVMEDIA_MANAGER_SERVICE_NAME_OLD + AVMEDIA_MANAGER_SERVICE_NAME_OLD #endif - }; + }; - for( sal_uInt32 i = 0; !xPlayer.is() && i < SAL_N_ELEMENTS( aServiceManagers ); ++i ) - { - const OUString aServiceName( aServiceManagers[ i ], - strlen( aServiceManagers[ i ] ), - RTL_TEXTENCODING_ASCII_US ); - - try { - uno::Reference< media::XManager > xManager ( - xContext->getServiceManager()->createInstanceWithContext(aServiceName, xContext), - uno::UNO_QUERY ); - if( xManager.is() ) - xPlayer = uno::Reference< media::XPlayer >( xManager->createPlayer( rURL ), - uno::UNO_QUERY ); - else - SAL_WARN( "avmedia", - "failed to create media player service " << aServiceName ); - } catch ( const uno::Exception &e ) { - SAL_WARN( "avmedia", - "couldn't create media player " << aServiceName - << ", exception '" << e.Message << '\''); + for( sal_uInt32 i = 0; !xPlayer.is() && i < SAL_N_ELEMENTS( aServiceManagers ); ++i ) + { + const OUString aServiceName( aServiceManagers[ i ], + strlen( aServiceManagers[ i ] ), + RTL_TEXTENCODING_ASCII_US ); + + xPlayer = createPlayer(rURL, aServiceName, xContext); } } + else if ( *pMimeType == AVMEDIA_MIMETYPE_JSON ) + { + xPlayer = createPlayer(rURL, AVMEDIA_OPENGL_MANAGER_SERVICE_NAME, xContext); + } return xPlayer; } +uno::Reference< media::XPlayer > MediaWindowImpl::createPlayer( + const OUString& rURL, const OUString& rManagerServName, + uno::Reference< uno::XComponentContext > xContext) +{ + uno::Reference< media::XPlayer > xPlayer; + try + { + uno::Reference< media::XManager > xManager ( + xContext->getServiceManager()->createInstanceWithContext(rManagerServName, xContext), + uno::UNO_QUERY ); + if( xManager.is() ) + xPlayer = uno::Reference< media::XPlayer >( xManager->createPlayer( rURL ), uno::UNO_QUERY ); + else + SAL_WARN( "avmedia", "failed to create media player service " << rManagerServName ); + } catch ( const uno::Exception &e ) + { + SAL_WARN( "avmedia", "couldn't create media player " << rManagerServName + << ", exception '" << e.Message << '\''); + } + return xPlayer; +} + void MediaWindowImpl::setURL( const OUString& rURL, OUString const& rTempURL, OUString const& rReferer) { @@ -283,8 +299,7 @@ void MediaWindowImpl::setURL( const OUString& rURL, maFileURL = rURL; } - mxPlayer = createPlayer( - (!mTempFileURL.isEmpty()) ? mTempFileURL : maFileURL, rReferer ); + mxPlayer = createPlayer((!mTempFileURL.isEmpty()) ? mTempFileURL : maFileURL, rReferer, &m_sMimeType ); onURLChanged(); } } @@ -341,7 +356,10 @@ void MediaWindowImpl::executeMediaItem( const MediaItem& rItem ) // set URL first if( nMaskSet & AVMEDIA_SETMASK_URL ) + { + m_sMimeType = rItem.getMimeType(); setURL( rItem.getURL(), rItem.getTempURL(), rItem.getReferer() ); + } // set different states next if( nMaskSet & AVMEDIA_SETMASK_TIME ) diff --git a/avmedia/source/viewer/mediawindow_impl.hxx b/avmedia/source/viewer/mediawindow_impl.hxx index fd8bab7aa653..e0018639fc96 100644 --- a/avmedia/source/viewer/mediawindow_impl.hxx +++ b/avmedia/source/viewer/mediawindow_impl.hxx @@ -29,6 +29,9 @@ namespace com { namespace sun { namespace star { namespace media { class XPlayer; class XPlayerWindow; } } } } +namespace com { namespace sun { namespace star { namespace uno { + class XComponentContext; +} } } } class BitmapEx; namespace avmedia @@ -91,7 +94,7 @@ namespace avmedia MediaWindowImpl( Window* parent, MediaWindow* pMediaWindow, bool bInternalMediaControl ); virtual ~MediaWindowImpl(); - static ::com::sun::star::uno::Reference< ::com::sun::star::media::XPlayer > createPlayer( const OUString& rURL, const OUString& rReferer ); + static ::com::sun::star::uno::Reference< ::com::sun::star::media::XPlayer > createPlayer( const OUString& rURL, const OUString& rReferer, OUString* pMimeType = 0 ); void setURL( const OUString& rURL, OUString const& rTempURL, OUString const& rReferer ); @@ -158,9 +161,12 @@ namespace avmedia void onURLChanged(); + static ::com::sun::star::uno::Reference< ::com::sun::star::media::XPlayer > createPlayer( const OUString& rURL, const OUString& rManagerServName, ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > xContext); + OUString maFileURL; OUString mTempFileURL; OUString maReferer; + OUString m_sMimeType; ::com::sun::star::uno::Reference< ::com::sun::star::media::XPlayer > mxPlayer; ::com::sun::star::uno::Reference< ::com::sun::star::media::XPlayerWindow > mxPlayerWindow; MediaWindow* mpMediaWindow; |