summaryrefslogtreecommitdiff
path: root/xmloff/source/xforms
diff options
context:
space:
mode:
authorMichael Weghorn <m.weghorn@posteo.de>2025-04-09 09:42:45 +0200
committerMichael Weghorn <m.weghorn@posteo.de>2025-04-09 12:19:23 +0200
commit697405b533a8ae5b6a8f5bd184b9344a96f71c69 (patch)
tree7f93329b4829d6adec8f7e9bd0c668fd93ce0665 /xmloff/source/xforms
parent7ab40eb75d305e6684d5bea0452cb57ae9e7a5aa (diff)
tdf#166055 qt avmedia: Provide media/player size right away
There are 2 potential approaches for providing the preferred player size based on the media (which generally matches the the video resolution) in an XPlayer implementation: 1) by implementing the css::media::XPlayerNotifier interface in addition and notifying listeners when the preferred player size is available, in which case XPlayer::getPreferredPlayerWindowSize doesn't need to return the proper size before then 2) by not implementing that interface, but returning the correct value in XPlayer::getPreferredPlayerWindowSize right from the start. (See MediaWindow::isMediaURL and MediaWindow::grabFrame for how both approaches are supported there.) So far, QtPlayer was implementing approach 1), i.e. the css::media::XPlayerNotifier interface, like GtkPlayer does (by which the QtPlayer implementation was inspired, see commit 441d8ed9be0e7f831b455a69b8688dcb79a8bc00 Author: Michael Weghorn <m.weghorn@posteo.de> Date: Mon May 20 16:25:09 2024 +0200 tdf#145735 avmedia qt: Use QtMultimedia for Qt 6 media playback ), while all other XPlayer implementations don't do that. With the previous implementation, listeners would be notified when the QMediaPlayer::mediaStatus [1] transitioned to one of the states where the media has been loaded, i.e. the information on video resolution can reliably be retrieved. Given the current implementation of avmedia's PlayerWindow and the call to Scheduler::ProcessEventsToIdle (frame #12404 below) in avmedia::qt::QtFrameGrabber::grabFrame (frame #12405) in order to allow video playback to then be able to retrieve a video frame, the current implementation with signals/slots resulted in infinite recursion. Fix/avoid the problem by no longer implementing the XPlayerNotifier interface, but ensuring that the media is past the QMediaPlayer::LoadingMedia status in QtPlayer's XPlayer::getPreferredPlayerWindowSize implementation instead (by starting to play the media and then processing events until that's the case). (Running some of the logic in a separate thread came to mind as a potential alternative solution, but then some of the QtMultimedia library logic seems to expect to be run in the main thread. What would probably work as an alternative would be to run the logic to retrieve a video frame in a separate process/helper program instead, but that would also imply further overhead.) Sample backtrace of infinite recursion with the default ffmpeg QtMultimedia media backend prior to this commit with the qt6 VCL plugin on Wayland when inserting a video (not every time, but quite often): [...] #12353 0x00007fffeec62967 in Scheduler::ProcessEventsToIdle () at /home/michi/development/git/libreoffice/vcl/source/app/svapp.cxx:435 #12354 0x00007fffdd867acd in avmedia::qt::QtFrameGrabber::grabFrame (this=0x55555e3dd060, fMediaTime=3) at /home/michi/development/git/libreoffice/avmedia/source/qt6/QtFrameGrabber.cxx:103 #12355 0x00007fffdd867bce in non-virtual thunk to avmedia::qt::QtFrameGrabber::grabFrame(double) () at /home/michi/development/git/libreoffice/instdir/program/../program/libavmediaqt6.so #12356 0x00007ffff0be5a43 in avmedia::MediaWindow::grabFrame (xPlayer=uno::Reference to (avmedia::qt::QtPlayer *) 0x7fffd4005ac8, rGraphic=empty uno::Reference) at /home/michi/development/git/libreoffice/avmedia/source/viewer/mediawindow.cxx:385 #12357 0x00007ffff1c3282f in SdrMediaObj::getSnapshot() const::$_0::operator()(com::sun::star::uno::Reference<com::sun::star::media::XPlayer> const&) const (this=0x555557523ca0, rPlayer=uno::Reference to (avmedia::qt::QtPlayer *) 0x7fffd4005ac8) at /home/michi/development/git/libreoffice/svx/source/svdraw/svdomedia.cxx:195 #12358 0x00007ffff1c327ad in std::__invoke_impl<void, SdrMediaObj::getSnapshot() const::$_0&, com::sun::star::uno::Reference<com::sun::star::media::XPlayer> const&>(std::__invoke_other, SdrMediaObj::getSnapshot() const::$_0&, com::sun::star::uno::Reference<com::sun::star::media::XPlayer> const&) (__f=..., __args=uno::Reference to (avmedia::qt::QtPlayer *) 0x7fffd4005ac8) at /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/invoke.h:61 #12359 0x00007ffff1c3275d in std::__invoke_r<void, SdrMediaObj::getSnapshot() const::$_0&, com::sun::star::uno::Reference<com::sun::star::media::XPlayer> const&>(SdrMediaObj::getSnapshot() const::$_0&, com::sun::star::uno::Reference<com::sun::star::media::XPlayer> const&) (__fn=..., __args=uno::Reference to (avmedia::qt::QtPlayer *) 0x7fffd4005ac8) at /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/invoke.h:111 #12360 0x00007ffff1c325d5 in std::_Function_handler<void(com::sun::star::uno::Reference<com::sun::star::media::XPlayer> const&), SdrMediaObj::getSnapshot() const::$_0>::_M_invoke (__functor=..., __args=uno::Reference to (avmedia::qt::QtPlayer *) 0x7fffd4005ac8) at /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/std_function.h:290 #12361 0x00007ffff0bebf96 in std::function<void(com::sun::star::uno::Reference<com::sun::star::media::XPlayer> const&)>::operator() (this=0x55555e9ea148, __args=uno::Reference to (avmedia::qt::QtPlayer *) 0x7fffd4005ac8) at /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/std_function.h:591 #12362 0x00007ffff0be8191 in avmedia::PlayerListener::callPlayerWindowSizeAvailable (this=0x55555e9ea100, rPlayer=uno::Reference to (avmedia::qt::QtPlayer *) 0x7fffd4005ac8) at include/avmedia/mediawindow.hxx:74 #12363 0x00007ffff0be676f in avmedia::PlayerListener::preferredPlayerWindowSizeAvailable (this=0x55555e9ea100) at /home/michi/development/git/libreoffice/avmedia/source/viewer/mediawindow.cxx:496 #12364 0x00007fffdd8708f0 in avmedia::qt::QtPlayer::notifyListeners (this=0x7fffd4005a60) at /home/michi/development/git/libreoffice/avmedia/source/qt6/QtPlayer.cxx:386 #12365 0x00007fffdd870718 in avmedia::qt::QtPlayer::notifyIfReady (this=0x7fffd4005a60) at /home/michi/development/git/libreoffice/avmedia/source/qt6/QtPlayer.cxx:324 #12366 0x00007fffdd875636 in QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul>, QtPrivate::List<QMediaPlayer::MediaStatus>, void, void (avmedia::qt::QtPlayer::*)(QMediaPlayer::MediaStatus)>::call(void (avmedia::qt::QtPlayer::*)(QMediaPlayer::MediaStatus), avmedia::qt::QtPlayer*, void**)::{lambda()#1}::operator()() const (this=0x7fffffff7560) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:127 #12367 0x00007fffdd8755b9 in QtPrivate::FunctorCallBase::call_internal<void, QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul>, QtPrivate::List<QMediaPlayer::MediaStatus>, void, void (avmedia::qt::QtPlayer::*)(QMediaPlayer::MediaStatus)>::call(void (avmedia::qt::QtPlayer::*)(QMediaPlayer::MediaStatus), avmedia::qt::QtPlayer*, void**)::{lambda()#1}>(void**, QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul>, QtPrivate::List<QMediaPlayer::MediaStatus>, void, void (avmedia::qt::QtPlayer::*)(QMediaPlayer::MediaStatus)>::call(void (avmedia::qt::QtPlayer::*)(QMediaPlayer::MediaStatus), avmedia::qt::QtPlayer*, void**)::{lambda()#1}&&) (args=0x7fffffff7930, fn=...) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:65 #12368 0x00007fffdd875583 in QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul>, QtPrivate::List<QMediaPlayer::MediaStatus>, void, void (avmedia::qt::QtPlayer::*)(QMediaPlayer::MediaStatus)>::call (f=(void (avmedia::qt::QtPlayer::*)(class avmedia::qt::QtPlayer * const, enum QMediaPlayer::MediaStatus)) 0x7fffdd8706c0 <avmedia::qt::QtPlayer::notifyIfReady(QMediaPlayer::MediaStatus)>, o=0x7fffd4005a60, arg=0x7fffffff7930) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:126 #12369 0x00007fffdd8754fd in QtPrivate::FunctionPointer<void (avmedia::qt::QtPlayer::*)(QMediaPlayer::MediaStatus)>::call<QtPrivate::List<QMediaPlayer::MediaStatus>, void> (f=(void (avmedia::qt::QtPlayer::*)(class avmedia::qt::QtPlayer * const, enum QMediaPlayer::MediaStatus)) 0x7fffdd8706c0 <avmedia::qt::QtPlayer::notifyIfReady(QMediaPlayer::MediaStatus)>, o=0x7fffd4005a60, arg=0x7fffffff7930) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:174 #12370 0x00007fffdd875426 in QtPrivate::QCallableObject<void (avmedia::qt::QtPlayer::*)(QMediaPlayer::MediaStatus), QtPrivate::List<QMediaPlayer::MediaStatus>, void>::impl (which=1, this_=0x55555ea5ce20, r=0x7fffd4005a60, a=0x7fffffff7930, ret=0x0) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:545 #12371 0x00007fffe51050d2 in QtPrivate::QSlotObjectBase::call (this=0x55555ea5ce20, r=0x7fffd4005a60, a=0x7fffffff7930) at qtbase/src/corelib/kernel/qobjectdefs_impl.h:461 #12372 0x00007fffe5328554 in doActivate<false> (sender=0x555567c57080, signal_index=5, argv=0x7fffffff7930) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobject.cpp:4241 #12373 0x00007fffe531e763 in QMetaObject::activate (sender=0x555567c57080, m=0x7fffe29e91f8 <QMediaPlayer::staticMetaObject>, local_signal_index=2, argv=0x7fffffff7930) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobject.cpp:4301 #12374 0x00007fffe272fbab in QMetaObject::activate<void, QMediaPlayer::MediaStatus> (sender=0x555567c57080, mo=0x7fffe29e91f8 <QMediaPlayer::staticMetaObject>, local_signal_index=2, ret=0x0, args=@0x7fffffff7974: QMediaPlayer::LoadedMedia) at qtbase/src/corelib/kernel/qobjectdefs.h:319 #12375 0x00007fffe272a7ed in QMediaPlayer::mediaStatusChanged (this=0x555567c57080, _t1=QMediaPlayer::LoadedMedia) at qtmultimedia/src/multimedia/Multimedia_autogen/include/moc_qmediaplayer.cpp:563 #12376 0x00007fffe272a79c in QMediaPlayerPrivate::setStatus (this=0x55555eaa23c0, s=QMediaPlayer::LoadedMedia) at /home/michi/development/git/qt5/qtmultimedia/src/multimedia/playback/qmediaplayer.cpp:118 #12377 0x00007fffe271f553 in QPlatformMediaPlayer::mediaStatusChanged (this=0x7fffd4005300, status=QMediaPlayer::LoadedMedia) at /home/michi/development/git/qt5/qtmultimedia/src/multimedia/platform/qplatformmediaplayer.cpp:32 #12378 0x00007fffa28f0e5c in QFFmpegMediaPlayer::mediaStatusChanged (this=0x7fffd40052f0, status=QMediaPlayer::LoadedMedia) at /home/michi/development/git/qt5/qtmultimedia/src/plugins/multimedia/ffmpeg/qffmpegmediaplayer.cpp:131 #12379 0x00007fffa28f1c0a in QFFmpegMediaPlayer::setMediaAsync (this=0x7fffd40052f0, mediaDataHolder=..., cancelToken=std::shared_ptr<QFFmpeg::CancelToken> (use count 3, weak count 0) = {...}) at /home/michi/development/git/qt5/qtmultimedia/src/plugins/multimedia/ffmpeg/qffmpegmediaplayer.cpp:269 #12380 0x00007fffa28f36de in QFFmpegMediaPlayer::setMedia(QUrl const&, QIODevice*)::$_0::operator()() const::{lambda()#1}::operator()() const (this=0x7fff34001870) at /home/michi/development/git/qt5/qtmultimedia/src/plugins/multimedia/ffmpeg/qffmpegmediaplayer.cpp:211 #12381 0x00007fffa28f3688 in QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, void, QFFmpegMediaPlayer::setMedia(QUrl const&, QIODevice*)::$_0::operator()() const::{lambda()#1}>::call(QFFmpegMediaPlayer::setMedia(QUrl const&, QIODevice*)::$_0::operator()() const::{lambda()#1}&, void**)::{lambda()#1}::operator()() const (this=0x7fffffff7d30) at qtbase/src/corelib/kernel/qobjectdefs_impl.h:116 #12382 0x00007fffa28f3669 in QtPrivate::FunctorCallBase::call_internal<void, QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, void, QFFmpegMediaPlayer::setMedia(QUrl const&, QIODevice*)::$_0::operator()() const::{lambda()#1}>::call(QFFmpegMediaPlayer::setMedia(QUrl const&, QIODevice*)::$_0::operator()() const::{lambda()#1}&, void**)::{lambda()#1}>(void**, QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, void, QFFmpegMediaPlayer::setMedia(QUrl const&, QIODevice*)::$_0::operator()() const::{lambda()#1}>::call(QFFmpegMediaPlayer::setMedia(QUrl const&, QIODevice*)::$_0::operator()() const::{lambda()#1}&, void**)::{lambda()#1}&&) (args=0x7fff340c3048, fn=...) at qtbase/src/corelib/kernel/qobjectdefs_impl.h:65 #12383 0x00007fffa28f3632 in QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, void, QFFmpegMediaPlayer::setMedia(QUrl const&, QIODevice*)::$_0::operator()() const::{lambda()#1}>::call(QFFmpegMediaPlayer::setMedia(QUrl const&, QIODevice*)::$_0::operator()() const::{lambda()#1}&, void**) (f=..., arg=0x7fff340c3048) at qtbase/src/corelib/kernel/qobjectdefs_impl.h:115 #12384 0x00007fffa28f35c1 in QtPrivate::FunctorCallable<QFFmpegMediaPlayer::setMedia(QUrl const&, QIODevice*)::$_0::operator()() const::{lambda()#1}>::call<QtPrivate::List<>, void>(QFFmpegMediaPlayer::setMedia(QUrl const&, QIODevice*)::$_0::operator()() const::{lambda()#1}&, void*, void**) (f=..., arg=0x7fff340c3048) at qtbase/src/corelib/kernel/qobjectdefs_impl.h:337 #12385 0x00007fffa28f350d in QtPrivate::QCallableObject<QFFmpegMediaPlayer::setMedia(QUrl const&, QIODevice*)::$_0::operator()() const::{lambda()#1}, QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) (which=1, this_=0x7fff34001860, r=0x7fffd40052f0, a=0x7fff340c3048, ret=0x0) at qtbase/src/corelib/kernel/qobjectdefs_impl.h:547 #12386 0x00007fffe51050d2 in QtPrivate::QSlotObjectBase::call (this=0x7fff34001860, r=0x7fffd40052f0, a=0x7fff340c3048) at qtbase/src/corelib/kernel/qobjectdefs_impl.h:461 #12387 0x00007fffe5312adc in QMetaCallEvent::placeMetaCall (this=0x7fff340c3000, object=0x7fffd40052f0) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobject.cpp:620 #12388 0x00007fffe5314831 in QObject::event (this=0x7fffd40052f0, e=0x7fff340c3000) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobject.cpp:1429 #12389 0x00007fffe31e2ea0 in QApplicationPrivate::notify_helper (this=0x55555557cb40, receiver=0x7fffd40052f0, e=0x7fff340c3000) at /home/michi/development/git/qt5/qtbase/src/widgets/kernel/qapplication.cpp:3309 #12390 0x00007fffe31e6da8 in QApplication::notify (this=0x55555556ea60, receiver=0x7fffd40052f0, e=0x7fff340c3000) at /home/michi/development/git/qt5/qtbase/src/widgets/kernel/qapplication.cpp:3259 #12391 0x00007fffe524f159 in QCoreApplication::notifyInternal2 (receiver=0x7fffd40052f0, event=0x7fff340c3000) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qcoreapplication.cpp:1111 #12392 0x00007fffe524fdc9 in QCoreApplication::sendEvent (receiver=0x7fffd40052f0, event=0x7fff340c3000) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qcoreapplication.cpp:1551 #12393 0x00007fffe5250d08 in QCoreApplicationPrivate::sendPostedEvents (receiver=0x0, event_type=0, data=0x5555555a3f80) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qcoreapplication.cpp:1891 #12394 0x00007fffe524fc0c in QCoreApplication::sendPostedEvents (receiver=0x0, event_type=0) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qcoreapplication.cpp:1745 #12395 0x00007fffe5853b11 in postEventSourceDispatch (s=0x5555555ca600) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qeventdispatcher_glib.cpp:246 #12396 0x00007fffe9f03f45 in ??? () at /lib/x86_64-linux-gnu/libglib-2.0.so.0 #12397 0x00007fffe9f06177 in ??? () at /lib/x86_64-linux-gnu/libglib-2.0.so.0 #12398 0x00007fffe9f068e0 in g_main_context_iteration () at /lib/x86_64-linux-gnu/libglib-2.0.so.0 #12399 0x00007fffe5852d4b in QEventDispatcherGlib::processEvents (this=0x555555558690, flags=...) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qeventdispatcher_glib.cpp:399 #12400 0x00007fffe4986d88 in QPAEventDispatcherGlib::processEvents (this=0x555555558690, flags=...) at /home/michi/development/git/qt5/qtbase/src/gui/platform/unix/qeventdispatcher_glib.cpp:89 #12401 0x00007fffe61d5314 in QtInstance::ImplYield (this=0x5555555fa9c0, bWait=false, bHandleAllCurrentEvents=true) at vcl/qt6/../qt5/QtInstance.cxx:503 #12402 0x00007fffe61d85c1 in QtInstance::DoYield (this=0x5555555fa9c0, bWait=false, bHandleAllCurrentEvents=true) at vcl/qt6/../qt5/QtInstance.cxx:512 #12403 0x00007fffeec626a6 in ImplYield (i_bWait=false, i_bAllEvents=true) at /home/michi/development/git/libreoffice/vcl/source/app/svapp.cxx:385 #12404 0x00007fffeec62967 in Scheduler::ProcessEventsToIdle () at /home/michi/development/git/libreoffice/vcl/source/app/svapp.cxx:435 #12405 0x00007fffdd867acd in avmedia::qt::QtFrameGrabber::grabFrame (this=0x5555696d1210, fMediaTime=3) at /home/michi/development/git/libreoffice/avmedia/source/qt6/QtFrameGrabber.cxx:103 #12406 0x00007fffdd867bce in non-virtual thunk to avmedia::qt::QtFrameGrabber::grabFrame(double) () at /home/michi/development/git/libreoffice/instdir/program/../program/libavmediaqt6.so #12407 0x00007ffff0be5a43 in avmedia::MediaWindow::grabFrame (xPlayer=uno::Reference to (avmedia::qt::QtPlayer *) 0x55556778be68, rGraphic=empty uno::Reference) at /home/michi/development/git/libreoffice/avmedia/source/viewer/mediawindow.cxx:385 #12408 0x00007ffff1c3282f in SdrMediaObj::getSnapshot() const::$_0::operator()(com::sun::star::uno::Reference<com::sun::star::media::XPlayer> const&) const (this=0x5555696652b0, rPlayer=uno::Reference to (avmedia::qt::QtPlayer *) 0x55556778be68) at /home/michi/development/git/libreoffice/svx/source/svdraw/svdomedia.cxx:195 #12409 0x00007ffff1c327ad in std::__invoke_impl<void, SdrMediaObj::getSnapshot() const::$_0&, com::sun::star::uno::Reference<com::sun::star::media::XPlayer> const&>(std::__invoke_other, SdrMediaObj::getSnapshot() const::$_0&, com::sun::star::uno::Reference<com::sun::star::media::XPlayer> const&) (__f=..., __args=uno::Reference to (avmedia::qt::QtPlayer *) 0x55556778be68) at /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/invoke.h:61 #12410 0x00007ffff1c3275d in std::__invoke_r<void, SdrMediaObj::getSnapshot() const::$_0&, com::sun::star::uno::Reference<com::sun::star::media::XPlayer> const&>(SdrMediaObj::getSnapshot() const::$_0&, com::sun::star::uno::Reference<com::sun::star::media::XPlayer> const&) (__fn=..., __args=uno::Reference to (avmedia::qt::QtPlayer *) 0x55556778be68) at /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/invoke.h:111 #12411 0x00007ffff1c325d5 in std::_Function_handler<void(com::sun::star::uno::Reference<com::sun::star::media::XPlayer> const&), SdrMediaObj::getSnapshot() const::$_0>::_M_invoke (__functor=..., __args=uno::Reference to (avmedia::qt::QtPlayer *) 0x55556778be68) at /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/std_function.h:290 #12412 0x00007ffff0bebf96 in std::function<void(com::sun::star::uno::Reference<com::sun::star::media::XPlayer> const&)>::operator() (this=0x7ffeac001728, __args=uno::Reference to (avmedia::qt::QtPlayer *) 0x55556778be68) at /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/std_function.h:591 #12413 0x00007ffff0be8191 in avmedia::PlayerListener::callPlayerWindowSizeAvailable (this=0x7ffeac0016e0, rPlayer=uno::Reference to (avmedia::qt::QtPlayer *) 0x55556778be68) at include/avmedia/mediawindow.hxx:74 #12414 0x00007ffff0be676f in avmedia::PlayerListener::preferredPlayerWindowSizeAvailable (this=0x7ffeac0016e0) at /home/michi/development/git/libreoffice/avmedia/source/viewer/mediawindow.cxx:496 #12415 0x00007fffdd8708f0 in avmedia::qt::QtPlayer::notifyListeners (this=0x55556778be00) at /home/michi/development/git/libreoffice/avmedia/source/qt6/QtPlayer.cxx:386 #12416 0x00007fffdd870718 in avmedia::qt::QtPlayer::notifyIfReady (this=0x55556778be00) at /home/michi/development/git/libreoffice/avmedia/source/qt6/QtPlayer.cxx:324 #12417 0x00007fffdd875636 in QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul>, QtPrivate::List<QMediaPlayer::MediaStatus>, void, void (avmedia::qt::QtPlayer::*)(QMediaPlayer::MediaStatus)>::call(void (avmedia::qt::QtPlayer::*)(QMediaPlayer::MediaStatus), avmedia::qt::QtPlayer*, void**)::{lambda()#1}::operator()() const (this=0x7fffffffa280) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:127 #12418 0x00007fffdd8755b9 in QtPrivate::FunctorCallBase::call_internal<void, QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul>, QtPrivate::List<QMediaPlayer::MediaStatus>, void, void (avmedia::qt::QtPlayer::*)(QMediaPlayer::MediaStatus)>::call(void (avmedia::qt::QtPlayer::*)(QMediaPlayer::MediaStatus), avmedia::qt::QtPlayer*, void**)::{lambda()#1}>(void**, QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul>, QtPrivate::List<QMediaPlayer::MediaStatus>, void, void (avmedia::qt::QtPlayer::*)(QMediaPlayer::MediaStatus)>::call(void (avmedia::qt::QtPlayer::*)(QMediaPlayer::MediaStatus), avmedia::qt::QtPlayer*, void**)::{lambda()#1}&&) (args=0x7fffffffa650, fn=...) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:65 #12419 0x00007fffdd875583 in QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul>, QtPrivate::List<QMediaPlayer::MediaStatus>, void, void (avmedia::qt::QtPlayer::*)(QMediaPlayer::MediaStatus)>::call (f=(void (avmedia::qt::QtPlayer::*)(class avmedia::qt::QtPlayer * const, enum QMediaPlayer::MediaStatus)) 0x7fffdd8706c0 <avmedia::qt::QtPlayer::notifyIfReady(QMediaPlayer::MediaStatus)>, o=0x55556778be00, arg=0x7fffffffa650) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:126 #12420 0x00007fffdd8754fd in QtPrivate::FunctionPointer<void (avmedia::qt::QtPlayer::*)(QMediaPlayer::MediaStatus)>::call<QtPrivate::List<QMediaPlayer::MediaStatus>, void> (f=(void (avmedia::qt::QtPlayer::*)(class avmedia::qt::QtPlayer * const, enum QMediaPlayer::MediaStatus)) 0x7fffdd8706c0 <avmedia::qt::QtPlayer::notifyIfReady(QMediaPlayer::MediaStatus)>, o=0x55556778be00, arg=0x7fffffffa650) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:174 #12421 0x00007fffdd875426 in QtPrivate::QCallableObject<void (avmedia::qt::QtPlayer::*)(QMediaPlayer::MediaStatus), QtPrivate::List<QMediaPlayer::MediaStatus>, void>::impl (which=1, this_=0x55555ebc9d50, r=0x55556778be00, a=0x7fffffffa650, ret=0x0) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:545 #12422 0x00007fffe51050d2 in QtPrivate::QSlotObjectBase::call (this=0x55555ebc9d50, r=0x55556778be00, a=0x7fffffffa650) at qtbase/src/corelib/kernel/qobjectdefs_impl.h:461 #12423 0x00007fffe5328554 in doActivate<false> (sender=0x5555696e2b20, signal_index=5, argv=0x7fffffffa650) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobject.cpp:4241 #12424 0x00007fffe531e763 in QMetaObject::activate (sender=0x5555696e2b20, m=0x7fffe29e91f8 <QMediaPlayer::staticMetaObject>, local_signal_index=2, argv=0x7fffffffa650) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobject.cpp:4301 #12425 0x00007fffe272fbab in QMetaObject::activate<void, QMediaPlayer::MediaStatus> (sender=0x5555696e2b20, mo=0x7fffe29e91f8 <QMediaPlayer::staticMetaObject>, local_signal_index=2, ret=0x0, args=@0x7fffffffa694: QMediaPlayer::LoadedMedia) at qtbase/src/corelib/kernel/qobjectdefs.h:319 #12426 0x00007fffe272a7ed in QMediaPlayer::mediaStatusChanged (this=0x5555696e2b20, _t1=QMediaPlayer::LoadedMedia) at qtmultimedia/src/multimedia/Multimedia_autogen/include/moc_qmediaplayer.cpp:563 #12427 0x00007fffe272a79c in QMediaPlayerPrivate::setStatus (this=0x5555696ece40, s=QMediaPlayer::LoadedMedia) at /home/michi/development/git/qt5/qtmultimedia/src/multimedia/playback/qmediaplayer.cpp:118 #12428 0x00007fffe271f553 in QPlatformMediaPlayer::mediaStatusChanged (this=0x55556961c710, status=QMediaPlayer::LoadedMedia) at /home/michi/development/git/qt5/qtmultimedia/src/multimedia/platform/qplatformmediaplayer.cpp:32 #12429 0x00007fffa28f0e5c in QFFmpegMediaPlayer::mediaStatusChanged (this=0x55556961c700, status=QMediaPlayer::LoadedMedia) at /home/michi/development/git/qt5/qtmultimedia/src/plugins/multimedia/ffmpeg/qffmpegmediaplayer.cpp:131 #12430 0x00007fffa28f1c0a in QFFmpegMediaPlayer::setMediaAsync (this=0x55556961c700, mediaDataHolder=..., cancelToken=std::shared_ptr<QFFmpeg::CancelToken> (use count 3, weak count 0) = {...}) at /home/michi/development/git/qt5/qtmultimedia/src/plugins/multimedia/ffmpeg/qffmpegmediaplayer.cpp:269 #12431 0x00007fffa28f36de in QFFmpegMediaPlayer::setMedia(QUrl const&, QIODevice*)::$_0::operator()() const::{lambda()#1}::operator()() const (this=0x7fff3c354ce0) at /home/michi/development/git/qt5/qtmultimedia/src/plugins/multimedia/ffmpeg/qffmpegmediaplayer.cpp:211 #12432 0x00007fffa28f3688 in QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, void, QFFmpegMediaPlayer::setMedia(QUrl const&, QIODevice*)::$_0::operator()() const::{lambda()#1}>::call(QFFmpegMediaPlayer::setMedia(QUrl const&, QIODevice*)::$_0::operator()() const::{lambda()#1}&, void**)::{lambda()#1}::operator()() const (this=0x7fffffffaa50) at qtbase/src/corelib/kernel/qobjectdefs_impl.h:116 #12433 0x00007fffa28f3669 in QtPrivate::FunctorCallBase::call_internal<void, QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, void, QFFmpegMediaPlayer::setMedia(QUrl const&, QIODevice*)::$_0::operator()() const::{lambda()#1}>::call(QFFmpegMediaPlayer::setMedia(QUrl const&, QIODevice*)::$_0::operator()() const::{lambda()#1}&, void**)::{lambda()#1}>(void**, QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, void, QFFmpegMediaPlayer::setMedia(QUrl const&, QIODevice*)::$_0::operator()() const::{lambda()#1}>::call(QFFmpegMediaPlayer::setMedia(QUrl const&, QIODevice*)::$_0::operator()() const::{lambda()#1}&, void**)::{lambda()#1}&&) (args=0x7fff3c0045b8, fn=...) at qtbase/src/corelib/kernel/qobjectdefs_impl.h:65 #12434 0x00007fffa28f3632 in QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, void, QFFmpegMediaPlayer::setMedia(QUrl const&, QIODevice*)::$_0::operator()() const::{lambda()#1}>::call(QFFmpegMediaPlayer::setMedia(QUrl const&, QIODevice*)::$_0::operator()() const::{lambda()#1}&, void**) (f=..., arg=0x7fff3c0045b8) at qtbase/src/corelib/kernel/qobjectdefs_impl.h:115 #12435 0x00007fffa28f35c1 in QtPrivate::FunctorCallable<QFFmpegMediaPlayer::setMedia(QUrl const&, QIODevice*)::$_0::operator()() const::{lambda()#1}>::call<QtPrivate::List<>, void>(QFFmpegMediaPlayer::setMedia(QUrl const&, QIODevice*)::$_0::operator()() const::{lambda()#1}&, void*, void**) (f=..., arg=0x7fff3c0045b8) at qtbase/src/corelib/kernel/qobjectdefs_impl.h:337 #12436 0x00007fffa28f350d in QtPrivate::QCallableObject<QFFmpegMediaPlayer::setMedia(QUrl const&, QIODevice*)::$_0::operator()() const::{lambda()#1}, QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) (which=1, this_=0x7fff3c354cd0, r=0x55556961c700, a=0x7fff3c0045b8, ret=0x0) at qtbase/src/corelib/kernel/qobjectdefs_impl.h:547 #12437 0x00007fffe51050d2 in QtPrivate::QSlotObjectBase::call (this=0x7fff3c354cd0, r=0x55556961c700, a=0x7fff3c0045b8) at qtbase/src/corelib/kernel/qobjectdefs_impl.h:461 #12438 0x00007fffe5312adc in QMetaCallEvent::placeMetaCall (this=0x7fff3c004570, object=0x55556961c700) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobject.cpp:620 #12439 0x00007fffe5314831 in QObject::event (this=0x55556961c700, e=0x7fff3c004570) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobject.cpp:1429 #12440 0x00007fffe31e2ea0 in QApplicationPrivate::notify_helper (this=0x55555557cb40, receiver=0x55556961c700, e=0x7fff3c004570) at /home/michi/development/git/qt5/qtbase/src/widgets/kernel/qapplication.cpp:3309 #12441 0x00007fffe31e6da8 in QApplication::notify (this=0x55555556ea60, receiver=0x55556961c700, e=0x7fff3c004570) at /home/michi/development/git/qt5/qtbase/src/widgets/kernel/qapplication.cpp:3259 #12442 0x00007fffe524f159 in QCoreApplication::notifyInternal2 (receiver=0x55556961c700, event=0x7fff3c004570) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qcoreapplication.cpp:1111 #12443 0x00007fffe524fdc9 in QCoreApplication::sendEvent (receiver=0x55556961c700, event=0x7fff3c004570) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qcoreapplication.cpp:1551 #12444 0x00007fffe5250d08 in QCoreApplicationPrivate::sendPostedEvents (receiver=0x0, event_type=0, data=0x5555555a3f80) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qcoreapplication.cpp:1891 #12445 0x00007fffe524fc0c in QCoreApplication::sendPostedEvents (receiver=0x0, event_type=0) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qcoreapplication.cpp:1745 #12446 0x00007fffe5853b11 in postEventSourceDispatch (s=0x5555555ca600) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qeventdispatcher_glib.cpp:246 #12447 0x00007fffe9f03f45 in ??? () at /lib/x86_64-linux-gnu/libglib-2.0.so.0 #12448 0x00007fffe9f06177 in ??? () at /lib/x86_64-linux-gnu/libglib-2.0.so.0 #12449 0x00007fffe9f068e0 in g_main_context_iteration () at /lib/x86_64-linux-gnu/libglib-2.0.so.0 #12450 0x00007fffe5852d4b in QEventDispatcherGlib::processEvents (this=0x555555558690, flags=...) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qeventdispatcher_glib.cpp:399 #12451 0x00007fffe4986d88 in QPAEventDispatcherGlib::processEvents (this=0x555555558690, flags=...) at /home/michi/development/git/qt5/qtbase/src/gui/platform/unix/qeventdispatcher_glib.cpp:89 #12452 0x00007fffe61d52c2 in QtInstance::ImplYield (this=0x5555555fa9c0, bWait=true, bHandleAllCurrentEvents=false) at vcl/qt6/../qt5/QtInstance.cxx:501 #12453 0x00007fffe61d85c1 in QtInstance::DoYield (this=0x5555555fa9c0, bWait=true, bHandleAllCurrentEvents=false) at vcl/qt6/../qt5/QtInstance.cxx:512 #12454 0x00007fffeec626a6 in ImplYield (i_bWait=true, i_bAllEvents=false) at /home/michi/development/git/libreoffice/vcl/source/app/svapp.cxx:385 #12455 0x00007fffeec61fbf in Application::Yield () at /home/michi/development/git/libreoffice/vcl/source/app/svapp.cxx:488 #12456 0x00007fffeec61da0 in Application::Execute () at /home/michi/development/git/libreoffice/vcl/source/app/svapp.cxx:360 #12457 0x00007ffff7b28029 in desktop::Desktop::Main (this=0x7fffffffd620) at /home/michi/development/git/libreoffice/desktop/source/app/app.cxx:1680 #12458 0x00007fffeec83ee6 in ImplSVMain () at /home/michi/development/git/libreoffice/vcl/source/app/svmain.cxx:231 #12459 0x00007fffeec85b19 in SVMain () at /home/michi/development/git/libreoffice/vcl/source/app/svmain.cxx:249 #12460 0x00007ffff7ba238a in soffice_main () at /home/michi/development/git/libreoffice/desktop/source/app/sofficemain.cxx:122 #12461 0x00005555555559fd in sal_main () at /home/michi/development/git/libreoffice/desktop/source/app/main.c:51 #12462 0x00005555555559d7 in main (argc=2, argv=0x7fffffffd828) at /home/michi/development/git/libreoffice/desktop/source/app/main.c:49 (Note that different QtPlayer objects are involved, i.e. it's not always the same QtPlayer object whose signal triggers another recursive call.) Backtrace when using the gstreamer backend using QT_MEDIA_BACKEND=gstreamer was comparable. [1] https://doc.qt.io/qt-6/qmediaplayer.html#mediaStatus-prop Change-Id: I8d928d0fd124d9b3f4f1947efe0d4d690e1d8851 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/183867 Reviewed-by: Michael Weghorn <m.weghorn@posteo.de> Tested-by: Jenkins
Diffstat (limited to 'xmloff/source/xforms')
0 files changed, 0 insertions, 0 deletions