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();
            }));