[Libreoffice-commits] core.git: 8 commits - avmedia/Library_avmediaogl.mk avmedia/source include/avmedia include/svl include/svx sd/qa sd/source svx/source xmloff/source
Zolnai Tamás
tamas.zolnai at collabora.com
Fri Apr 4 11:27:01 PDT 2014
avmedia/Library_avmediaogl.mk | 2
avmedia/source/framework/mediaitem.cxx | 24 +++++++-
avmedia/source/gstreamer/gstframegrabber.hxx | 5 -
avmedia/source/inc/mediamisc.hxx | 7 ++
avmedia/source/opengl/oglplayer.cxx | 4 -
avmedia/source/viewer/mediawindow_impl.cxx | 76 ++++++++++++++++-----------
avmedia/source/viewer/mediawindow_impl.hxx | 8 ++
include/avmedia/mediaitem.hxx | 3 +
include/svl/solar.hrc | 2
include/svx/svdomedia.hxx | 2
include/svx/unoshprp.hxx | 3 -
sd/qa/unit/data/media_embedding.odp |binary
sd/qa/unit/import-tests.cxx | 72 +++++++++----------------
sd/qa/unit/sdmodeltestbase.hxx | 3 -
sd/source/ui/inc/View.hxx | 2
sd/source/ui/view/sdview4.cxx | 10 +--
svx/source/svdraw/svdomedia.cxx | 8 ++
svx/source/unodraw/unoprov.cxx | 1
svx/source/unodraw/unoshap4.cxx | 21 ++++++-
xmloff/source/draw/shapeexport.cxx | 29 +++-------
xmloff/source/draw/ximpshap.cxx | 2
21 files changed, 167 insertions(+), 117 deletions(-)
New commits:
commit b715d83cfa220a93bb7d58ea059eab3cf07d3d5a
Author: Zolnai Tamás <tamas.zolnai at collabora.com>
Date: Fri Apr 4 13:59:04 2014 +0200
Fix make file header
Change-Id: If4e65e5ba5146e93572b314f806a617adb811df9
diff --git a/avmedia/Library_avmediaogl.mk b/avmedia/Library_avmediaogl.mk
index 6257e8d..34677b5 100644
--- a/avmedia/Library_avmediaogl.mk
+++ b/avmedia/Library_avmediaogl.mk
@@ -1,4 +1,4 @@
-# -*- Mode: makefile; tab-width: 4; indent-tabs-mode: t -*-
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
#
# This file is part of the LibreOffice project.
#
commit 327b0a6cc0dbc68552293c0ca9a8f61de280523e
Author: Zolnai Tamás <tamas.zolnai at collabora.com>
Date: Thu Apr 3 20:50:59 2014 +0200
ODP filter test: embedded media and glTF model
Change-Id: I2340fa5a20a5774e5db78940cf7d4dc584f09b82
diff --git a/sd/qa/unit/data/media_embedding.odp b/sd/qa/unit/data/media_embedding.odp
new file mode 100644
index 0000000..14ea460
Binary files /dev/null and b/sd/qa/unit/data/media_embedding.odp differ
diff --git a/sd/qa/unit/import-tests.cxx b/sd/qa/unit/import-tests.cxx
index 12063c2..073169a 100644
--- a/sd/qa/unit/import-tests.cxx
+++ b/sd/qa/unit/import-tests.cxx
@@ -25,6 +25,7 @@
#include <svx/svdotext.hxx>
#include <svx/svdoashp.hxx>
#include <svx/svdogrp.hxx>
+#include <svx/svdomedia.hxx>
#include <animations/animationnodehelper.hxx>
#include <com/sun/star/drawing/XDrawPage.hpp>
@@ -68,6 +69,7 @@ public:
void testN862510_3();
void testN862510_4();
void testFdo71961();
+ void testMediaEmbedding();
CPPUNIT_TEST_SUITE(SdFiltersTest);
CPPUNIT_TEST(testDocumentLayout);
@@ -90,6 +92,7 @@ public:
CPPUNIT_TEST(testN862510_3);
CPPUNIT_TEST(testN862510_4);
CPPUNIT_TEST(testFdo71961);
+ CPPUNIT_TEST(testMediaEmbedding);
CPPUNIT_TEST_SUITE_END();
};
@@ -678,6 +681,29 @@ void SdFiltersTest::testFdo71961()
xDocShRef->DoClose();
}
+void SdFiltersTest::testMediaEmbedding()
+{
+ ::sd::DrawDocShellRef xDocShRef = loadURL(getURLFromSrc("/sd/qa/unit/data/media_embedding.odp"));
+ xDocShRef = saveAndReload( xDocShRef, ODP );
+
+ SdDrawDocument *pDoc = xDocShRef->GetDoc();
+ CPPUNIT_ASSERT_MESSAGE( "no document", pDoc != NULL );
+ const SdrPage *pPage = pDoc->GetPage (1);
+ CPPUNIT_ASSERT_MESSAGE( "no page", pPage != NULL );
+
+ // First object is a glTF model
+ SdrMediaObj *pModelObj = dynamic_cast<SdrMediaObj*>( pPage->GetObj( 1 ));
+ CPPUNIT_ASSERT_MESSAGE( "missing model", pModelObj != NULL);
+ CPPUNIT_ASSERT_EQUAL( OUString( "vnd.sun.star.Package:Model/duck/duck.json" ), pModelObj->getMediaProperties().getURL());
+ CPPUNIT_ASSERT_EQUAL( OUString( "application/vnd.gltf+json" ), pModelObj->getMediaProperties().getMimeType());
+
+ // Second object is a sound
+ SdrMediaObj *pMediaObj = dynamic_cast<SdrMediaObj*>( pPage->GetObj( 2 ));
+ CPPUNIT_ASSERT_MESSAGE( "missing media object", pMediaObj != NULL);
+ CPPUNIT_ASSERT_EQUAL( OUString( "vnd.sun.star.Package:Media/button-1.wav" ), pMediaObj->getMediaProperties().getURL());
+ CPPUNIT_ASSERT_EQUAL( OUString( "application/vnd.sun.star.media" ), pMediaObj->getMediaProperties().getMimeType());
+}
+
CPPUNIT_TEST_SUITE_REGISTRATION(SdFiltersTest);
CPPUNIT_PLUGIN_IMPLEMENT();
commit 7d7e2a01a686c063f071318d8f5b9864b441db39
Author: Zolnai Tamás <tamas.zolnai at collabora.com>
Date: Thu Apr 3 16:26:15 2014 +0200
SdFiltersTest: reduce code duplication
Change-Id: I95ddae64001015f911494e11fa15373dfaedd6ba
diff --git a/sd/qa/unit/import-tests.cxx b/sd/qa/unit/import-tests.cxx
index d532b6c..12063c2 100644
--- a/sd/qa/unit/import-tests.cxx
+++ b/sd/qa/unit/import-tests.cxx
@@ -156,8 +156,6 @@ void SdFiltersTest::testDocumentLayout()
void SdFiltersTest::testSmoketest()
{
::sd::DrawDocShellRef xDocShRef = loadURL(getURLFromSrc("/sd/qa/unit/data/smoketest.pptx"));
- CPPUNIT_ASSERT_MESSAGE( "failed to load", xDocShRef.Is() );
- CPPUNIT_ASSERT_MESSAGE( "not in destruction", !xDocShRef->IsInDestruction() );
SdDrawDocument *pDoc = xDocShRef->GetDoc();
CPPUNIT_ASSERT_MESSAGE( "no document", pDoc != NULL );
@@ -186,8 +184,6 @@ void SdFiltersTest::testSmoketest()
void SdFiltersTest::testN759180()
{
::sd::DrawDocShellRef xDocShRef = loadURL(getURLFromSrc("/sd/qa/unit/data/n759180.pptx"));
- CPPUNIT_ASSERT_MESSAGE( "failed to load", xDocShRef.Is() );
- CPPUNIT_ASSERT_MESSAGE( "not in destruction", !xDocShRef->IsInDestruction() );
SdDrawDocument *pDoc = xDocShRef->GetDoc();
CPPUNIT_ASSERT_MESSAGE( "no document", pDoc != NULL );
@@ -227,11 +223,8 @@ void SdFiltersTest::testN821567()
{
OUString bgImage;
::sd::DrawDocShellRef xDocShRef = loadURL( getURLFromSrc("/sd/qa/unit/data/pptx/n821567.pptx") );
- CPPUNIT_ASSERT_MESSAGE( "failed to load", xDocShRef.Is() );
xDocShRef = saveAndReload( xDocShRef, ODP );
- CPPUNIT_ASSERT_MESSAGE( "failed to load", xDocShRef.Is() );
- CPPUNIT_ASSERT_MESSAGE( "in destruction", !xDocShRef->IsInDestruction() );
uno::Reference< drawing::XDrawPagesSupplier > xDoc(
xDocShRef->GetDoc()->getUnoModel(), uno::UNO_QUERY_THROW );
CPPUNIT_ASSERT_MESSAGE( "not exactly one page", xDoc->getDrawPages()->getCount() == 1 );
@@ -255,8 +248,6 @@ void SdFiltersTest::testN821567()
void SdFiltersTest::testN862510_1()
{
::sd::DrawDocShellRef xDocShRef = loadURL( getURLFromSrc("/sd/qa/unit/data/pptx/n862510_1.pptx") );
- CPPUNIT_ASSERT_MESSAGE( "failed to load", xDocShRef.Is() );
- CPPUNIT_ASSERT_MESSAGE( "in destruction", !xDocShRef->IsInDestruction() );
SdDrawDocument *pDoc = xDocShRef->GetDoc();
CPPUNIT_ASSERT_MESSAGE( "no document", pDoc != NULL );
@@ -282,8 +273,6 @@ void SdFiltersTest::testN862510_1()
void SdFiltersTest::testN862510_2()
{
::sd::DrawDocShellRef xDocShRef = loadURL( getURLFromSrc("/sd/qa/unit/data/pptx/n862510_2.pptx") );
- CPPUNIT_ASSERT_MESSAGE( "failed to load", xDocShRef.Is() );
- CPPUNIT_ASSERT_MESSAGE( "in destruction", !xDocShRef->IsInDestruction() );
SdDrawDocument *pDoc = xDocShRef->GetDoc();
CPPUNIT_ASSERT_MESSAGE( "no document", pDoc != NULL );
@@ -303,8 +292,6 @@ void SdFiltersTest::testN862510_2()
void SdFiltersTest::testN862510_3()
{
::sd::DrawDocShellRef xDocShRef = loadURL( getURLFromSrc("/sd/qa/unit/data/pptx/n862510_3.pptx") );
- CPPUNIT_ASSERT_MESSAGE( "failed to load", xDocShRef.Is() );
- CPPUNIT_ASSERT_MESSAGE( "in destruction", !xDocShRef->IsInDestruction() );
SdDrawDocument *pDoc = xDocShRef->GetDoc();
CPPUNIT_ASSERT_MESSAGE( "no document", pDoc != NULL );
@@ -324,8 +311,6 @@ void SdFiltersTest::testN862510_3()
void SdFiltersTest::testN862510_4()
{
::sd::DrawDocShellRef xDocShRef = loadURL( getURLFromSrc("/sd/qa/unit/data/pptx/n862510_4.pptx") );
- CPPUNIT_ASSERT_MESSAGE( "failed to load", xDocShRef.Is() );
- CPPUNIT_ASSERT_MESSAGE( "in destruction", !xDocShRef->IsInDestruction() );
SdDrawDocument *pDoc = xDocShRef->GetDoc();
CPPUNIT_ASSERT_MESSAGE( "no document", pDoc != NULL );
@@ -352,11 +337,8 @@ void SdFiltersTest::testN828390()
{
bool bPassed = false;
::sd::DrawDocShellRef xDocShRef = loadURL( getURLFromSrc("/sd/qa/unit/data/pptx/n828390.pptx") );
- CPPUNIT_ASSERT_MESSAGE( "failed to load", xDocShRef.Is() );
xDocShRef = saveAndReload( xDocShRef, PPTX );
- CPPUNIT_ASSERT_MESSAGE( "failed to load", xDocShRef.Is() );
- CPPUNIT_ASSERT_MESSAGE( "in destruction", !xDocShRef->IsInDestruction() );
SdDrawDocument *pDoc = xDocShRef->GetDoc();
CPPUNIT_ASSERT_MESSAGE( "no document", pDoc != NULL );
@@ -391,9 +373,6 @@ void SdFiltersTest::testN828390()
void SdFiltersTest::testN828390_2()
{
::sd::DrawDocShellRef xDocShRef = loadURL( getURLFromSrc("/sd/qa/unit/data/pptx/n828390_2.pptx") );
- CPPUNIT_ASSERT_MESSAGE( "failed to load", xDocShRef.Is() );
- CPPUNIT_ASSERT_MESSAGE( "failed to load", xDocShRef.Is() );
- CPPUNIT_ASSERT_MESSAGE( "not in destruction", !xDocShRef->IsInDestruction() );
SdDrawDocument *pDoc = xDocShRef->GetDoc();
CPPUNIT_ASSERT_MESSAGE( "no document", pDoc != NULL );
@@ -414,9 +393,6 @@ void SdFiltersTest::testN828390_3()
{
bool bPassed = true;
::sd::DrawDocShellRef xDocShRef = loadURL( getURLFromSrc("/sd/qa/unit/data/pptx/n828390_3.pptx") );
- CPPUNIT_ASSERT_MESSAGE( "failed to load", xDocShRef.Is() );
- CPPUNIT_ASSERT_MESSAGE( "failed to load", xDocShRef.Is() );
- CPPUNIT_ASSERT_MESSAGE( "not in destruction", !xDocShRef->IsInDestruction() );
SdDrawDocument *pDoc = xDocShRef->GetDoc();
CPPUNIT_ASSERT_MESSAGE( "no document", pDoc != NULL );
@@ -450,11 +426,8 @@ void SdFiltersTest::testN828390_4()
{
bool bPassed = false;
::sd::DrawDocShellRef xDocShRef = loadURL( getURLFromSrc("/sd/qa/unit/data/n828390_4.odp") );
- CPPUNIT_ASSERT_MESSAGE( "failed to load", xDocShRef.Is() );
xDocShRef = saveAndReload( xDocShRef, PPTX );
- CPPUNIT_ASSERT_MESSAGE( "failed to load", xDocShRef.Is() );
- CPPUNIT_ASSERT_MESSAGE( "not in destruction", !xDocShRef->IsInDestruction() );
SdDrawDocument *pDoc = xDocShRef->GetDoc();
CPPUNIT_ASSERT_MESSAGE( "no document", pDoc != NULL );
@@ -491,11 +464,8 @@ void SdFiltersTest::testN828390_4()
void SdFiltersTest::testN828390_5()
{
::sd::DrawDocShellRef xDocShRef = loadURL( getURLFromSrc("/sd/qa/unit/data/n828390_5.odp") );
- CPPUNIT_ASSERT_MESSAGE( "failed to load", xDocShRef.Is() );
xDocShRef = saveAndReload( xDocShRef, PPTX );
- CPPUNIT_ASSERT_MESSAGE( "failed to load", xDocShRef.Is() );
- CPPUNIT_ASSERT_MESSAGE( "not in destruction", !xDocShRef->IsInDestruction() );
SdDrawDocument *pDoc = xDocShRef->GetDoc();
CPPUNIT_ASSERT_MESSAGE( "no document", pDoc != NULL );
@@ -517,8 +487,6 @@ void SdFiltersTest::testN828390_5()
void SdFiltersTest::testN778859()
{
::sd::DrawDocShellRef xDocShRef = loadURL(getURLFromSrc("/sd/qa/unit/data/pptx/n778859.pptx"));
- CPPUNIT_ASSERT_MESSAGE( "failed to load", xDocShRef.Is() );
- CPPUNIT_ASSERT_MESSAGE( "not in destruction", !xDocShRef->IsInDestruction() );
SdDrawDocument *pDoc = xDocShRef->GetDoc();
CPPUNIT_ASSERT_MESSAGE( "no document", pDoc != NULL );
@@ -538,8 +506,6 @@ void SdFiltersTest::testN778859()
void SdFiltersTest::testFdo68594()
{
::sd::DrawDocShellRef xDocShRef = loadURL(getURLFromSrc("/sd/qa/unit/data/ppt/fdo68594.ppt"));
- CPPUNIT_ASSERT_MESSAGE( "failed to load", xDocShRef.Is() );
- CPPUNIT_ASSERT_MESSAGE( "not in destruction", !xDocShRef->IsInDestruction() );
SdDrawDocument *pDoc = xDocShRef->GetDoc();
CPPUNIT_ASSERT_MESSAGE( "no document", pDoc != NULL );
@@ -559,8 +525,6 @@ void SdFiltersTest::testFdo68594()
void SdFiltersTest::testFdo72998()
{
::sd::DrawDocShellRef xDocShRef = loadURL(getURLFromSrc("/sd/qa/unit/data/pptx/cshapes.pptx"));
- CPPUNIT_ASSERT_MESSAGE( "failed to load", xDocShRef.Is() );
- CPPUNIT_ASSERT_MESSAGE( "not in destruction", !xDocShRef->IsInDestruction() );
SdDrawDocument *pDoc = xDocShRef->GetDoc();
CPPUNIT_ASSERT_MESSAGE( "no document", pDoc != NULL );
@@ -585,8 +549,6 @@ void SdFiltersTest::testFdo72998()
void SdFiltersTest::testFdo64512()
{
::sd::DrawDocShellRef xDocShRef = loadURL(getURLFromSrc("/sd/qa/unit/data/fdo64512.odp"));
- CPPUNIT_ASSERT_MESSAGE( "failed to load", xDocShRef.Is() );
- CPPUNIT_ASSERT_MESSAGE( "not in destruction", !xDocShRef->IsInDestruction() );
uno::Reference< drawing::XDrawPagesSupplier > xDoc(
xDocShRef->GetDoc()->getUnoModel(), uno::UNO_QUERY_THROW );
@@ -632,8 +594,6 @@ void SdFiltersTest::testFdo71075()
double values[] = { 12.0, 13.0, 14.0 };
::com::sun::star::uno::Any aAny;
::sd::DrawDocShellRef xDocShRef = loadURL(getURLFromSrc("/sd/qa/unit/data/fdo71075.odp"));
- CPPUNIT_ASSERT_MESSAGE( "failed to load", xDocShRef.Is() );
- CPPUNIT_ASSERT_MESSAGE( "not in destruction", !xDocShRef->IsInDestruction() );
SdDrawDocument *pDoc = xDocShRef->GetDoc();
CPPUNIT_ASSERT_MESSAGE( "no document", pDoc != NULL );
@@ -676,8 +636,6 @@ void SdFiltersTest::testFdo71075()
void SdFiltersTest::testStrictOOXML()
{
::sd::DrawDocShellRef xDocShRef = loadURL(getURLFromSrc("/sd/qa/unit/data/strict_ooxml.pptx"));
- CPPUNIT_ASSERT_MESSAGE( "failed to load", xDocShRef.Is() );
- CPPUNIT_ASSERT_MESSAGE( "not in destruction", !xDocShRef->IsInDestruction() );
SdDrawDocument *pDoc = xDocShRef->GetDoc();
CPPUNIT_ASSERT_MESSAGE( "no document", pDoc != NULL );
@@ -692,12 +650,8 @@ void SdFiltersTest::testStrictOOXML()
void SdFiltersTest::testFdo71961()
{
::sd::DrawDocShellRef xDocShRef = loadURL(getURLFromSrc("/sd/qa/unit/data/fdo71961.odp"));
- CPPUNIT_ASSERT_MESSAGE( "failed to load", xDocShRef.Is() );
- CPPUNIT_ASSERT_MESSAGE( "not in destruction", !xDocShRef->IsInDestruction() );
xDocShRef = saveAndReload( xDocShRef, PPTX );
- CPPUNIT_ASSERT_MESSAGE( "failed to load", xDocShRef.Is() );
- CPPUNIT_ASSERT_MESSAGE( "not in destruction", !xDocShRef->IsInDestruction() );
SdDrawDocument *pDoc = xDocShRef->GetDoc();
CPPUNIT_ASSERT_MESSAGE( "no document", pDoc != NULL );
diff --git a/sd/qa/unit/sdmodeltestbase.hxx b/sd/qa/unit/sdmodeltestbase.hxx
index 762f425..eec3231 100644
--- a/sd/qa/unit/sdmodeltestbase.hxx
+++ b/sd/qa/unit/sdmodeltestbase.hxx
@@ -110,12 +110,13 @@ protected:
::sd::DrawDocShellRef xDocShRef = new ::sd::DrawDocShell();
SfxMedium* pSrcMed = new SfxMedium(rURL, STREAM_STD_READ);
pSrcMed->SetFilter(aFilter);
- if ( !xDocShRef->DoLoad(pSrcMed) )
+ if ( !xDocShRef->DoLoad(pSrcMed) || !xDocShRef.Is() )
{
if (xDocShRef.Is())
xDocShRef->DoClose();
CPPUNIT_ASSERT_MESSAGE( OUStringToOString( "failed to load " + rURL, RTL_TEXTENCODING_UTF8 ).getStr(), false );
}
+ CPPUNIT_ASSERT_MESSAGE( "not in destruction", !xDocShRef->IsInDestruction() );
return xDocShRef;
}
commit d14f701bba44a278582a6c299a7339f876e84fd4
Author: Zolnai Tamás <tamas.zolnai at collabora.com>
Date: Fri Apr 4 13:17:34 2014 +0200
glTF ODF export: use mimetype to decide about file type
Change-Id: Ib1837bdc7468fb19f55a38f6875e026eea8d3b24
diff --git a/xmloff/source/draw/shapeexport.cxx b/xmloff/source/draw/shapeexport.cxx
index 13d1f77..655f163 100644
--- a/xmloff/source/draw/shapeexport.cxx
+++ b/xmloff/source/draw/shapeexport.cxx
@@ -3227,7 +3227,7 @@ void XMLShapeExport::ImpExportMediaShape(
OUString const persistentURL =
lcl_StoreMediaAndGetURL(GetExport(), xPropSet, aMediaURL, sMimeType);
- if( aMediaURL.endsWith(".json") )
+ if( sMimeType == "application/vnd.gltf+json" )
lcl_StoreJsonExternals(GetExport(), aMediaURL);
mrExport.AddAttribute ( XML_NAMESPACE_XLINK, XML_HREF, persistentURL );
commit 7ae4476b93b23456cef306c726db54ae3150af47
Author: Zolnai Tamás <tamas.zolnai at collabora.com>
Date: Thu Apr 3 11:31:06 2014 +0200
avmediagst: use boost::noncopyable
Change-Id: I40d1b65a1ea6a1f70cb6f0f6aca705115c0db23c
diff --git a/avmedia/source/gstreamer/gstframegrabber.hxx b/avmedia/source/gstreamer/gstframegrabber.hxx
index dd05540..6d89af6 100644
--- a/avmedia/source/gstreamer/gstframegrabber.hxx
+++ b/avmedia/source/gstreamer/gstframegrabber.hxx
@@ -23,6 +23,7 @@
#include "gstplayer.hxx"
#include <com/sun/star/media/XFrameGrabber.hpp>
#include <cppuhelper/implbase2.hxx>
+#include <boost/noncopyable.hpp>
namespace avmedia { namespace gstreamer {
@@ -33,7 +34,7 @@ namespace avmedia { namespace gstreamer {
typedef ::cppu::WeakImplHelper2< ::com::sun::star::media::XFrameGrabber,
::com::sun::star::lang::XServiceInfo > FrameGrabber_BASE;
-class FrameGrabber : public FrameGrabber_BASE
+class FrameGrabber : public FrameGrabber_BASE, private boost::noncopyable
{
GstElement *mpPipeline;
void disposePipeline();
@@ -53,8 +54,6 @@ public:
private:
FrameGrabber( const OUString &aURL );
- FrameGrabber( const FrameGrabber& );
- FrameGrabber& operator=( const FrameGrabber& );
};
} // namespace gst
commit 5f27d2c1609b6760014c9f847f33324723150bc8
Author: Zolnai Tamás <tamas.zolnai at collabora.com>
Date: Thu Apr 3 11:28:53 2014 +0200
avmediaogl: simplify namespace
Change-Id: I9cc8a865fa6079dbf9295d2ebafdb020dde5e81d
diff --git a/avmedia/source/opengl/oglplayer.cxx b/avmedia/source/opengl/oglplayer.cxx
index 325579f..5c68170 100644
--- a/avmedia/source/opengl/oglplayer.cxx
+++ b/avmedia/source/opengl/oglplayer.cxx
@@ -140,13 +140,13 @@ OUString SAL_CALL OGLPlayer::getImplementationName()
}
sal_Bool SAL_CALL OGLPlayer::supportsService( const OUString& rServiceName )
- throw ( ::com::sun::star::uno::RuntimeException, std::exception )
+ throw ( uno::RuntimeException, std::exception )
{
return cppu::supportsService(this, rServiceName);
}
uno::Sequence< OUString > SAL_CALL OGLPlayer::getSupportedServiceNames()
- throw ( com::sun::star::uno::RuntimeException, std::exception )
+ throw ( uno::RuntimeException, std::exception )
{
uno::Sequence< OUString > aRet(1);
aRet[0] = OUString("com.sun.star.media.Player_OpenGL");
commit 8416261a8b809a53058cd7970228012a8b3fb06d
Author: Zolnai Tamás <tamas.zolnai at collabora.com>
Date: Fri Apr 4 13:16:02 2014 +0200
Use stored mime type for stream creation
Change-Id: Iecc50f7964fa63ae028e2fb21d022de1f060c7a7
diff --git a/xmloff/source/draw/shapeexport.cxx b/xmloff/source/draw/shapeexport.cxx
index 912f8c1..13d1f77 100644
--- a/xmloff/source/draw/shapeexport.cxx
+++ b/xmloff/source/draw/shapeexport.cxx
@@ -3085,7 +3085,7 @@ void XMLShapeExport::ImpExportPluginShape(
static void lcl_CopyStream(
uno::Reference<io::XInputStream> const& xInStream,
uno::Reference<embed::XStorage> const& xTarget,
- OUString const& rPath)
+ OUString const& rPath, const OUString& rMimeType)
{
::comphelper::LifecycleProxy proxy;
uno::Reference<io::XStream> const xStream(
@@ -3104,10 +3104,7 @@ static void lcl_CopyStream(
if (xStreamProps.is()) { // this is NOT supported in FileSystemStorage
xStreamProps->setPropertyValue(
OUString("MediaType"),
- uno::makeAny(OUString(
- //FIXME how to detect real media type?
- //but currently xmloff has this one hardcoded anyway...
- "application/vnd.sun.star.media")));
+ uno::makeAny(rMimeType));
xStreamProps->setPropertyValue( // turn off compression
OUString("Compressed"),
uno::makeAny(sal_False));
@@ -3120,7 +3117,7 @@ static void lcl_CopyStream(
static OUString
lcl_StoreMediaAndGetURL(SvXMLExport & rExport,
uno::Reference<beans::XPropertySet> const& xPropSet,
- OUString const& rURL)
+ OUString const& rURL, const OUString& rMimeType)
{
OUString urlPath;
if (rURL.startsWithIgnoreAsciiCase("vnd.sun.star.Package:", &urlPath))
@@ -3140,7 +3137,7 @@ lcl_StoreMediaAndGetURL(SvXMLExport & rExport,
return OUString();
}
- lcl_CopyStream(xInStream, xTarget, rURL);
+ lcl_CopyStream(xInStream, xTarget, rURL, rMimeType);
return urlPath;
}
@@ -3225,8 +3222,11 @@ void XMLShapeExport::ImpExportMediaShape(
// export media url
OUString aMediaURL;
xPropSet->getPropertyValue("MediaURL") >>= aMediaURL;
+ OUString sMimeType;
+ xPropSet->getPropertyValue("MediaMimeType") >>= sMimeType;
+
OUString const persistentURL =
- lcl_StoreMediaAndGetURL(GetExport(), xPropSet, aMediaURL);
+ lcl_StoreMediaAndGetURL(GetExport(), xPropSet, aMediaURL, sMimeType);
if( aMediaURL.endsWith(".json") )
lcl_StoreJsonExternals(GetExport(), aMediaURL);
@@ -3236,8 +3236,6 @@ void XMLShapeExport::ImpExportMediaShape(
mrExport.AddAttribute ( XML_NAMESPACE_XLINK, XML_ACTUATE, XML_ONLOAD );
// export mime-type
- OUString sMimeType;
- xPropSet->getPropertyValue("MediaMimeType") >>= sMimeType;
mrExport.AddAttribute( XML_NAMESPACE_DRAW, XML_MIME_TYPE, sMimeType );
// write plugin
commit f470f3c72efb3fad109e62247c4d0abebc359345
Author: Zolnai Tamás <tamas.zolnai at collabora.com>
Date: Fri Apr 4 13:14:45 2014 +0200
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
diff --git a/avmedia/source/framework/mediaitem.cxx b/avmedia/source/framework/mediaitem.cxx
index 32f6f04..1c06ebc 100644
--- a/avmedia/source/framework/mediaitem.cxx
+++ b/avmedia/source/framework/mediaitem.cxx
@@ -36,6 +36,7 @@
#include <comphelper/processfactory.hxx>
#include <comphelper/storagehelper.hxx>
+#include "mediamisc.hxx"
using namespace ::com::sun::star;
@@ -50,6 +51,7 @@ struct MediaItem::Impl
OUString m_URL;
OUString m_TempFileURL;
OUString m_Referer;
+ OUString m_sMimeType;
sal_uInt32 m_nMaskSet;
MediaState m_eState;
double m_fTime;
@@ -74,6 +76,7 @@ struct MediaItem::Impl
: m_URL( rOther.m_URL )
, m_TempFileURL( rOther.m_TempFileURL )
, m_Referer( rOther.m_Referer )
+ , m_sMimeType( rOther.m_sMimeType )
, m_nMaskSet( rOther.m_nMaskSet )
, m_eState( rOther.m_eState )
, m_fTime( rOther.m_fTime )
@@ -109,6 +112,7 @@ bool MediaItem::operator==( const SfxPoolItem& rItem ) const
return m_pImpl->m_nMaskSet == rOther.m_pImpl->m_nMaskSet
&& m_pImpl->m_URL == rOther.m_pImpl->m_URL
&& m_pImpl->m_Referer == rOther.m_pImpl->m_Referer
+ && m_pImpl->m_sMimeType == rOther.m_pImpl->m_sMimeType
&& m_pImpl->m_eState == rOther.m_pImpl->m_eState
&& m_pImpl->m_fDuration == rOther.m_pImpl->m_fDuration
&& m_pImpl->m_fTime == rOther.m_pImpl->m_fTime
@@ -135,7 +139,7 @@ SfxItemPresentation MediaItem::GetPresentation( SfxItemPresentation,
bool MediaItem::QueryValue( com::sun::star::uno::Any& rVal, sal_uInt8 ) const
{
- uno::Sequence< uno::Any > aSeq( 9 );
+ uno::Sequence< uno::Any > aSeq( 10 );
aSeq[ 0 ] <<= m_pImpl->m_URL;
aSeq[ 1 ] <<= m_pImpl->m_nMaskSet;
@@ -146,6 +150,7 @@ bool MediaItem::QueryValue( com::sun::star::uno::Any& rVal, sal_uInt8 ) const
aSeq[ 6 ] <<= m_pImpl->m_bLoop;
aSeq[ 7 ] <<= m_pImpl->m_bMute;
aSeq[ 8 ] <<= m_pImpl->m_eZoom;
+ aSeq[ 9 ] <<= m_pImpl->m_sMimeType;
rVal <<= aSeq;
@@ -157,7 +162,7 @@ bool MediaItem::PutValue( const com::sun::star::uno::Any& rVal, sal_uInt8 )
uno::Sequence< uno::Any > aSeq;
bool bRet = false;
- if( ( rVal >>= aSeq ) && ( aSeq.getLength() == 9 ) )
+ if( ( rVal >>= aSeq ) && ( aSeq.getLength() == 10 ) )
{
sal_Int32 nInt32 = 0;
@@ -171,6 +176,7 @@ bool MediaItem::PutValue( const com::sun::star::uno::Any& rVal, sal_uInt8 )
aSeq[ 6 ] >>= m_pImpl->m_bLoop;
aSeq[ 7 ] >>= m_pImpl->m_bMute;
aSeq[ 8 ] >>= m_pImpl->m_eZoom;
+ aSeq[ 9 ] >>= m_pImpl->m_sMimeType;
bRet = true;
}
@@ -185,6 +191,9 @@ void MediaItem::merge( const MediaItem& rMediaItem )
if( AVMEDIA_SETMASK_URL & nMaskSet )
setURL( rMediaItem.getURL(), rMediaItem.getTempURL(), rMediaItem.getReferer() );
+ if( AVMEDIA_SETMASK_MIME_TYPE & nMaskSet )
+ setMimeType( rMediaItem.getMimeType() );
+
if( AVMEDIA_SETMASK_STATE & nMaskSet )
setState( rMediaItem.getState() );
@@ -235,6 +244,17 @@ const OUString& MediaItem::getReferer() const
return m_pImpl->m_Referer;
}
+void MediaItem::setMimeType( const OUString& rMimeType )
+{
+ m_pImpl->m_nMaskSet |= AVMEDIA_SETMASK_MIME_TYPE;
+ m_pImpl->m_sMimeType = rMimeType;
+}
+
+OUString MediaItem::getMimeType() const
+{
+ return !m_pImpl->m_sMimeType.isEmpty() ? m_pImpl->m_sMimeType : AVMEDIA_MIMETYPE_COMMON;
+}
+
void MediaItem::setState( MediaState eState )
{
m_pImpl->m_eState = eState;
diff --git a/avmedia/source/inc/mediamisc.hxx b/avmedia/source/inc/mediamisc.hxx
index 9d04cd6..19d5edc 100644
--- a/avmedia/source/inc/mediamisc.hxx
+++ b/avmedia/source/inc/mediamisc.hxx
@@ -37,6 +37,13 @@ class ResMgr;
#endif
#endif
+#define AVMEDIA_OPENGL_MANAGER_SERVICE_NAME "com.sun.star.media.Manager_OpenGL"
+
+// Mime types
+#define AVMEDIA_MIMETYPE_COMMON "application/vnd.sun.star.media"
+#define AVMEDIA_MIMETYPE_JSON "application/vnd.gltf+json"
+
+
namespace avmedia
{
ResMgr* GetResMgr();
diff --git a/avmedia/source/viewer/mediawindow_impl.cxx b/avmedia/source/viewer/mediawindow_impl.cxx
index 43416d3..f24c6e1 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 fd8bab7..e001863 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;
diff --git a/include/avmedia/mediaitem.hxx b/include/avmedia/mediaitem.hxx
index 7fec0bd..4ccb6fe 100644
--- a/include/avmedia/mediaitem.hxx
+++ b/include/avmedia/mediaitem.hxx
@@ -38,6 +38,7 @@
#define AVMEDIA_SETMASK_VOLUMEDB ((sal_uInt32)(0x00000020))
#define AVMEDIA_SETMASK_ZOOM ((sal_uInt32)(0x00000040))
#define AVMEDIA_SETMASK_URL ((sal_uInt32)(0x00000080))
+#define AVMEDIA_SETMASK_MIME_TYPE ((sal_uInt32)(0x00000100))
#define AVMEDIA_SETMASK_ALL ((sal_uInt32)(0xffffffff))
class SvStream;
@@ -111,6 +112,8 @@ public:
const OUString& rReferer);
const OUString& getURL() const;
+ void setMimeType( const OUString& rMimeType );
+ OUString getMimeType() const;
const OUString& getTempURL() const;
const OUString& getReferer() const;
diff --git a/include/svl/solar.hrc b/include/svl/solar.hrc
index c399a1a..8978487 100644
--- a/include/svl/solar.hrc
+++ b/include/svl/solar.hrc
@@ -23,7 +23,7 @@
// defines ------------------------------------------------------------------
#define OWN_ATTR_VALUE_START 3900
-#define OWN_ATTR_VALUE_END 3991
+#define OWN_ATTR_VALUE_END 3992
#define RID_SFX_START 260
// RID_SFX_END 9999
diff --git a/include/svx/svdomedia.hxx b/include/svx/svdomedia.hxx
index b9690e0..b8c4c67 100644
--- a/include/svx/svdomedia.hxx
+++ b/include/svx/svdomedia.hxx
@@ -60,7 +60,7 @@ public:
public:
- void setURL( const OUString& rURL, const OUString& rReferer );
+ void setURL( const OUString& rURL, const OUString& rReferer, const OUString& rMimeType = OUString() );
const OUString& getURL() const;
void setMediaProperties( const ::avmedia::MediaItem& rState );
diff --git a/include/svx/unoshprp.hxx b/include/svx/unoshprp.hxx
index 665712e..40b4f64 100644
--- a/include/svx/unoshprp.hxx
+++ b/include/svx/unoshprp.hxx
@@ -179,7 +179,8 @@
#define OWN_ATTR_MEDIA_STREAM (OWN_ATTR_VALUE_START+89)
#define OWN_ATTR_MEDIA_TEMPFILEURL (OWN_ATTR_VALUE_START+90)
#define OWN_ATTR_INTEROPGRABBAG (OWN_ATTR_VALUE_START+91)
-// ATTENTION: maximum is OWN_ATTR_VALUE_START+91, see include/svl/solar.hrc
+#define OWN_ATTR_MEDIA_MIMETYPE (OWN_ATTR_VALUE_START+92)
+// ATTENTION: maximum is OWN_ATTR_VALUE_START+92, see include/svl/solar.hrc
// #FontWork#
#define FONTWORK_PROPERTIES \
diff --git a/sd/source/ui/inc/View.hxx b/sd/source/ui/inc/View.hxx
index 85936ed..234d1f3 100644
--- a/sd/source/ui/inc/View.hxx
+++ b/sd/source/ui/inc/View.hxx
@@ -149,7 +149,7 @@ public:
const Point& rPos, const Size& rSize,
bool const bLink );
- SdrMediaObj* InsertMediaObj( const OUString& rURL, sal_Int8& rAction,
+ SdrMediaObj* InsertMediaObj( const OUString& rURL, const OUString& rMimeType, sal_Int8& rAction,
const Point& rPos, const Size& rSize );
bool PasteRTFTable( SotStorageStreamRef xStm, SdrPage* pPage, sal_uLong nPasteOptions );
diff --git a/sd/source/ui/view/sdview4.cxx b/sd/source/ui/view/sdview4.cxx
index 770d292..04a3c85 100644
--- a/sd/source/ui/view/sdview4.cxx
+++ b/sd/source/ui/view/sdview4.cxx
@@ -286,7 +286,7 @@ SdrMediaObj* View::InsertMediaURL( const OUString& rMediaURL, sal_Int8& rAction,
if (!bRet) { return 0; }
}
- return InsertMediaObj( realURL, rAction, rPos, rSize );
+ return InsertMediaObj( realURL, "application/vnd.sun.star.media", rAction, rPos, rSize );
}
SdrMediaObj* View::Insert3DModelURL(
@@ -307,10 +307,10 @@ SdrMediaObj* View::Insert3DModelURL(
if (!bRet) { return 0; }
}
- return InsertMediaObj( sRealURL, rAction, rPos, rSize );
+ return InsertMediaObj( sRealURL, "application/vnd.gltf+json", rAction, rPos, rSize );
}
-SdrMediaObj* View::InsertMediaObj( const OUString& rMediaURL, sal_Int8& rAction,
+SdrMediaObj* View::InsertMediaObj( const OUString& rMediaURL, const OUString& rMimeType, sal_Int8& rAction,
const Point& rPos, const Size& rSize )
{
SdrEndTextEdit();
@@ -335,7 +335,7 @@ SdrMediaObj* View::InsertMediaObj( const OUString& rMediaURL, sal_Int8& rAction,
if( mnAction == DND_ACTION_LINK && pPickObj && pPV && pPickObj->ISA( SdrMediaObj ) )
{
pNewMediaObj = static_cast< SdrMediaObj* >( pPickObj->Clone() );
- pNewMediaObj->setURL( rMediaURL, ""/*TODO?*/ );
+ pNewMediaObj->setURL( rMediaURL, ""/*TODO?*/, rMimeType );
BegUndo(SD_RESSTR(STR_UNDO_DRAGDROP));
ReplaceObjectAtView(pPickObj, *pPV, pNewMediaObj);
@@ -371,7 +371,7 @@ SdrMediaObj* View::InsertMediaObj( const OUString& rMediaURL, sal_Int8& rAction,
if (sh != 0 && sh->HasName()) {
referer = sh->GetMedium()->GetName();
}
- pNewMediaObj->setURL( rMediaURL, referer );
+ pNewMediaObj->setURL( rMediaURL, referer, rMimeType );
if( pPickObj )
{
diff --git a/svx/source/svdraw/svdomedia.cxx b/svx/source/svdraw/svdomedia.cxx
index e60b446..8bc8f4d 100644
--- a/svx/source/svdraw/svdomedia.cxx
+++ b/svx/source/svdraw/svdomedia.cxx
@@ -244,10 +244,11 @@ void SdrMediaObj::AdjustToMaxRect( const Rectangle& rMaxRect, bool bShrinkOnly /
-void SdrMediaObj::setURL( const OUString& rURL, const OUString& rReferer )
+void SdrMediaObj::setURL( const OUString& rURL, const OUString& rReferer, const OUString& rMimeType )
{
::avmedia::MediaItem aURLItem;
-
+ if( !rMimeType.isEmpty() )
+ m_pImpl->m_MediaProperties.setMimeType(rMimeType);
aURLItem.setURL( rURL, "", rReferer );
setMediaProperties( aURLItem );
}
@@ -418,6 +419,9 @@ void SdrMediaObj::mediaPropertiesChanged( const ::avmedia::MediaItem& rNewProper
const sal_uInt32 nMaskSet = rNewProperties.getMaskSet();
// use only a subset of MediaItem properties for own own properties
+ if( AVMEDIA_SETMASK_MIME_TYPE & nMaskSet )
+ m_pImpl->m_MediaProperties.setMimeType( rNewProperties.getMimeType() );
+
if( ( AVMEDIA_SETMASK_URL & nMaskSet ) &&
( rNewProperties.getURL() != getURL() ))
{
diff --git a/svx/source/unodraw/unoprov.cxx b/svx/source/unodraw/unoprov.cxx
index 61518d2..a17c36c 100644
--- a/svx/source/unodraw/unoprov.cxx
+++ b/svx/source/unodraw/unoprov.cxx
@@ -730,6 +730,7 @@ SfxItemPropertyMapEntry const * ImplGetSvxMediaShapePropertyMap()
{ OUString(UNO_NAME_MISC_OBJ_DESCRIPTION), OWN_ATTR_MISC_OBJ_DESCRIPTION , ::getCppuType((const OUString*)0), 0, 0},
{OUString("PrivateStream"), OWN_ATTR_MEDIA_STREAM, cppu::UnoType<css::io::XInputStream>::get(), ::com::sun::star::beans::PropertyAttribute::READONLY, 0},
{OUString("PrivateTempFileURL"), OWN_ATTR_MEDIA_TEMPFILEURL, ::getCppuType((const OUString*)0), ::com::sun::star::beans::PropertyAttribute::READONLY, 0},
+ { OUString("MediaMimeType"), OWN_ATTR_MEDIA_MIMETYPE, ::getCppuType((const OUString*)0), 0, 0},
{ OUString(), 0, css::uno::Type(), 0, 0 }
};
diff --git a/svx/source/unodraw/unoshap4.cxx b/svx/source/unodraw/unoshap4.cxx
index e422239..239328d 100644
--- a/svx/source/unodraw/unoshap4.cxx
+++ b/svx/source/unodraw/unoshap4.cxx
@@ -805,7 +805,8 @@ SvxMediaShape::~SvxMediaShape() throw()
bool SvxMediaShape::setPropertyValueImpl( const OUString& rName, const SfxItemPropertySimpleEntry* pProperty, const ::com::sun::star::uno::Any& rValue ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException)
{
- if( (pProperty->nWID >= OWN_ATTR_MEDIA_URL) && (pProperty->nWID <= OWN_ATTR_MEDIA_ZOOM) )
+ if( ((pProperty->nWID >= OWN_ATTR_MEDIA_URL) && (pProperty->nWID <= OWN_ATTR_MEDIA_ZOOM))
+ || (pProperty->nWID == OWN_ATTR_MEDIA_MIMETYPE) )
{
SdrMediaObj* pMedia = static_cast< SdrMediaObj* >( mpObj.get() );
::avmedia::MediaItem aItem;
@@ -872,6 +873,17 @@ bool SvxMediaShape::setPropertyValueImpl( const OUString& rName, const SfxItemPr
}
break;
+ case OWN_ATTR_MEDIA_MIMETYPE:
+ {
+ OUString sMimeType;
+ if( rValue >>= sMimeType )
+ {
+ bOk = true;
+ aItem.setMimeType( sMimeType );
+ }
+ }
+ break;
+
default:
OSL_FAIL("SvxMediaShape::setPropertyValueImpl(), unknown argument!");
}
@@ -897,7 +909,8 @@ bool SvxMediaShape::getPropertyValueImpl( const OUString& rName, const SfxItemPr
if ( ((pProperty->nWID >= OWN_ATTR_MEDIA_URL) &&
(pProperty->nWID <= OWN_ATTR_MEDIA_ZOOM))
|| (pProperty->nWID == OWN_ATTR_MEDIA_STREAM)
- || (pProperty->nWID == OWN_ATTR_MEDIA_TEMPFILEURL))
+ || (pProperty->nWID == OWN_ATTR_MEDIA_TEMPFILEURL)
+ || (pProperty->nWID == OWN_ATTR_MEDIA_MIMETYPE))
{
SdrMediaObj* pMedia = static_cast< SdrMediaObj* >( mpObj.get() );
const ::avmedia::MediaItem aItem( pMedia->getMediaProperties() );
@@ -932,6 +945,10 @@ bool SvxMediaShape::getPropertyValueImpl( const OUString& rName, const SfxItemPr
rValue <<= aItem.getTempURL();
break;
+ case OWN_ATTR_MEDIA_MIMETYPE:
+ rValue <<= aItem.getMimeType();
+ break;
+
default:
OSL_FAIL("SvxMediaShape::getPropertyValueImpl(), unknown property!");
}
diff --git a/xmloff/source/draw/shapeexport.cxx b/xmloff/source/draw/shapeexport.cxx
index 3a24c71..912f8c1 100644
--- a/xmloff/source/draw/shapeexport.cxx
+++ b/xmloff/source/draw/shapeexport.cxx
@@ -3205,15 +3205,6 @@ static void lcl_StoreJsonExternals(
}
}
-static OUString lcl_GetMimeType(const OUString& aMediaURL)
-{
- // TODO: Find a better way to find out the mime type, maybe via propset
- if( aMediaURL.endsWith(".json") )
- return OUString("application/vnd.gltf+json");
- else
- return OUString("application/vnd.sun.star.media");
-}
-
void XMLShapeExport::ImpExportMediaShape(
const uno::Reference< drawing::XShape >& xShape,
XmlShapeType eShapeType, sal_Int32 nFeatures, com::sun::star::awt::Point* pRefPoint)
@@ -3245,7 +3236,9 @@ void XMLShapeExport::ImpExportMediaShape(
mrExport.AddAttribute ( XML_NAMESPACE_XLINK, XML_ACTUATE, XML_ONLOAD );
// export mime-type
- mrExport.AddAttribute( XML_NAMESPACE_DRAW, XML_MIME_TYPE, lcl_GetMimeType(aMediaURL) );
+ OUString sMimeType;
+ xPropSet->getPropertyValue("MediaMimeType") >>= sMimeType;
+ mrExport.AddAttribute( XML_NAMESPACE_DRAW, XML_MIME_TYPE, sMimeType );
// write plugin
SvXMLElementExport aOBJ(mrExport, XML_NAMESPACE_DRAW, XML_PLUGIN, !( nFeatures & SEF_EXPORT_NO_WS ), true);
diff --git a/xmloff/source/draw/ximpshap.cxx b/xmloff/source/draw/ximpshap.cxx
index aefffce..902c179 100644
--- a/xmloff/source/draw/ximpshap.cxx
+++ b/xmloff/source/draw/ximpshap.cxx
@@ -3206,6 +3206,8 @@ void SdXMLPluginShapeContext::EndElement()
OUString("MediaURL"),
uno::makeAny(maHref));
+ xProps->setPropertyValue("MediaMimeType", uno::makeAny(maMimeType) );
+
for( sal_Int32 nParam = 0; nParam < maParams.getLength(); ++nParam )
{
const OUString& rName = maParams[ nParam ].Name;
More information about the Libreoffice-commits
mailing list