summaryrefslogtreecommitdiff
path: root/avmedia/source/viewer
diff options
context:
space:
mode:
authorZolnai Tamás <tamas.zolnai@collabora.com>2014-04-04 13:14:45 +0200
committerroot <root@linux-3qg3.site>2014-04-04 19:06:11 +0200
commitf470f3c72efb3fad109e62247c4d0abebc359345 (patch)
treef3a7969c13bae5d43ba5bc09935117c78deb5742 /avmedia/source/viewer
parent97b20c9deee46195357896197440cc1cc43d3452 (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.cxx76
-rw-r--r--avmedia/source/viewer/mediawindow_impl.hxx8
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;