tdf#148923 PPTX import: fix incorrect image in media file
Linked media file was imported with incorrect image,
if the Impress couldn't play the media file.
Regression from commit 9564747d2fd5d2c859a359dd7fa6242c6859c0d7
(tdf#53970 PPTX: fix import of linked media files).
Change-Id: Ib277a61e83c3794376d2c090b7f742707e779832
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/134394
Tested-by: Jenkins
Tested-by: László Németh <nemeth@numbertext.org>
Reviewed-by: László Németh <nemeth@numbertext.org>
diff --git a/avmedia/source/viewer/mediawindow.cxx b/avmedia/source/viewer/mediawindow.cxx
index d6649a2..c9b7f9b 100644
--- a/avmedia/source/viewer/mediawindow.cxx
+++ b/avmedia/source/viewer/mediawindow.cxx
@@ -363,7 +363,9 @@ uno::Reference< media::XPlayer > MediaWindow::createPlayer( const OUString& rURL
return priv::MediaWindowImpl::createPlayer( rURL, rReferer, pMimeType );
}
uno::Reference< graphic::XGraphic > MediaWindow::grabFrame(const css::uno::Reference<css::media::XPlayer>& xPlayer)
uno::Reference<graphic::XGraphic>
MediaWindow::grabFrame(const uno::Reference<media::XPlayer>& xPlayer,
const uno::Reference<graphic::XGraphic>& rGraphic)
{
uno::Reference< graphic::XGraphic > xRet;
std::unique_ptr< Graphic > xGraphic;
@@ -401,7 +403,11 @@ uno::Reference< graphic::XGraphic > MediaWindow::grabFrame(const css::uno::Refer
}
if (xGraphic)
{
if (rGraphic)
xGraphic.reset(new Graphic(rGraphic));
xRet = xGraphic->GetXGraphic();
}
return xRet;
}
diff --git a/include/avmedia/mediawindow.hxx b/include/avmedia/mediawindow.hxx
index f398f7e..8f48ba5 100644
--- a/include/avmedia/mediawindow.hxx
+++ b/include/avmedia/mediawindow.hxx
@@ -134,7 +134,9 @@ namespace avmedia
static css::uno::Reference< css::media::XPlayer > createPlayer( const OUString& rURL, const OUString& rReferer, const OUString* pMimeType = nullptr );
static css::uno::Reference<css::graphic::XGraphic> grabFrame(const css::uno::Reference<css::media::XPlayer>& rPlayer);
static css::uno::Reference<css::graphic::XGraphic>
grabFrame(const css::uno::Reference<css::media::XPlayer>& rPlayer,
const css::uno::Reference<css::graphic::XGraphic>& rGraphic = nullptr);
static css::uno::Reference< css::graphic::XGraphic > grabFrame(const OUString& rURL, const OUString& rReferer,
const OUString& sMimeType, rtl::Reference<PlayerListener> xPreferredPixelSizeListener);
diff --git a/svx/source/svdraw/svdomedia.cxx b/svx/source/svdraw/svdomedia.cxx
index 9e011a6..8ab9d45 100644
--- a/svx/source/svdraw/svdomedia.cxx
+++ b/svx/source/svdraw/svdomedia.cxx
@@ -161,7 +161,9 @@ uno::Reference< graphic::XGraphic > const & SdrMediaObj::getSnapshot() const
m_xImpl->m_xPlayerListener.set(new avmedia::PlayerListener(
[this, xCachedSnapshot, aRealURL, sReferer, sMimeType](const css::uno::Reference<css::media::XPlayer>& rPlayer){
SolarMutexGuard g;
m_xImpl->m_xCachedSnapshot = avmedia::MediaWindow::grabFrame(rPlayer);
uno::Reference<graphic::XGraphic> xGraphic
= m_xImpl->m_MediaProperties.getGraphic().GetXGraphic();
m_xImpl->m_xCachedSnapshot = avmedia::MediaWindow::grabFrame(rPlayer, xGraphic);
ActionChanged();
}));