QtPlayer::m_xMediaPlayer can be null, e.g. in a PPTX file
created in PowerPoint that contains an external video link to
Youtube, so handle that case gracefully instead of asserting/crashing.
Backtrace of assert getting triggered without this change in place:
1 __pthread_kill_implementation pthread_kill.c 44 0x7ffff789e95c
2 __pthread_kill_internal pthread_kill.c 89 0x7ffff789e9ff
3 __GI_raise raise.c 26 0x7ffff7849cc2
4 __GI_abort abort.c 73 0x7ffff78324ac
5 __assert_fail_base assert.c 118 0x7ffff7832420
6 avmedia::qt::QtPlayer::stop QtPlayer.cxx 75 0x7fff980b1675
7 avmedia::qt::QtPlayer::disposing QtPlayer.cxx 281 0x7fff980b34f7
8 cppu::WeakComponentImplHelperBase::dispose implbase.cxx 104 0x7ffff5b3de60
9 cppu::PartialWeakComponentImplHelper<com::sun::star::media::XPlayer, com::sun::star::media::XPlayerNotifier, com::sun::star::lang::XServiceInfo>::dispose compbase.hxx 90 0x7fff980b0455
10 avmedia::qt::QtManager::createPlayer QtManager.cxx 32 0x7fff980afc7e
11 non-virtual thunk to avmedia::qt::QtManager::createPlayer(rtl::OUString const&) 0x7fff980afdbc
12 avmedia::priv::MediaWindowImpl::createPlayer mediawindow_impl.cxx 212 0x7ffff0bf0d40
13 avmedia::priv::MediaWindowImpl::createPlayer mediawindow_impl.cxx 193 0x7ffff0bf0a7e
14 avmedia::MediaWindow::createPlayer mediawindow.cxx 364 0x7ffff0be5860
15 slideshow::internal::ViewMediaShape::implInitializeMediaPlayer viewmediashape.cxx 391 0x7fff65284f52
16 slideshow::internal::ViewMediaShape::implInitialize viewmediashape.cxx 309 0x7fff652839ab
17 slideshow::internal::ViewMediaShape::startMedia viewmediashape.cxx 107 0x7fff652832b1
18 slideshow::internal::(anonymous namespace)::MediaShape::implStartIntrinsicAnimation mediashape.cxx 212 0x7fff6526578e
19 slideshow::internal::ExternalShapeBase::ExternalShapeBaseListener::enableAnimations externalshapebase.cxx 68 0x7fff65259ccd
[...]
Change-Id: I6978f27d9b756a0fa8492d06bed57e805ca23a0c
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/183228
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
(cherry picked from commit
b1576ba17a4111f02fc6f8e27c09c78dbd7fd963)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/183230
Reviewed-by: Michael Stahl <michael.stahl@allotropia.de>
Gbp-Pq: Name qt-avmedia-handle-null-media-player.diff
{
osl::MutexGuard aGuard(m_aMutex);
- assert(m_xMediaPlayer);
- // don't use QMediaPlayer::stop because XPlayer::stop should leave the position unchanged
- m_xMediaPlayer->pause();
+ if (m_xMediaPlayer)
+ {
+ // don't use QMediaPlayer::stop because XPlayer::stop should leave the position unchanged
+ m_xMediaPlayer->pause();
+ }
}
sal_Bool SAL_CALL QtPlayer::isPlaying()
QtPlayer::~QtPlayer()
{
- // ensure output objects get deleted as QMediaPlayer doesn't take ownership of them
- std::unique_ptr<QObject> xVideoWidget(m_xMediaPlayer->videoOutput());
- std::unique_ptr<QAudioOutput> xAudioOutput(m_xMediaPlayer->audioOutput());
+ if (m_xMediaPlayer)
+ {
+ // ensure output objects get deleted as QMediaPlayer doesn't take ownership of them
+ std::unique_ptr<QObject> xVideoWidget(m_xMediaPlayer->videoOutput());
+ std::unique_ptr<QAudioOutput> xAudioOutput(m_xMediaPlayer->audioOutput());
+ }
+
m_xMediaPlayer.reset();
}