With the refactoring from previous commits in place, it's
clear that all callers pass a non-null SfxBindings*
param.
Switch the param to a reference, to make that clear
and prepare for further refactoring.
Change-Id: Id9f1487dba4b84860f9afa52ff9ffb4dd7b1d2c6
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/208387
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
With refactoring from previous commits in place, it's
now clear that all callers pass a non-null
SfxChildWinInfo*. Pass by reference instead to make
that clear, which also allows to drop some null
checks.
Change-Id: I39bfe179c68afecf9b7aa209feb69d33e57e5388
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/208371
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
Switch the parameter from a pointer to a reference.
The only 2 callers in SfxChildWindow::CreateChildWindow
always pass a non-null param.
Using a reference makes clear that the param is always
non-null and makes clear that those implementations previously
unconditionally dereferencing the pointer were unproblematic.
Change-Id: Ia2b893aac6c94c3b0e1024cc5500da2463bf9996
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/208312
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
Tested-by: Jenkins
Switch the parameter from a pointer to a reference.
The only 2 callers in SfxChildWindow::CreateChildWindow
always pass a non-null param.
Using a reference makes clear that the param is always
non-null, allows dropping some null checks and makes
clear that those implementations previously unconditionally
dereferencing the pointer were unproblematic.
Change-Id: I6734dfe6fe4fa1cb6aa80f4e67eb69603e8d86fc
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/208300
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
In the past, weld.hxx used to contain the class
definitions for weld::Widget and all subclasses.
By now, weld::Widget and almost all subclasses have
been moved to separate headers, to make it easier
to keep the overview and to avoid having to
recompile ~all UI code when one class changes.
By now, only weld::Button is left in weld.hxx.
Rename the header to Button.hxx.
Drop weld.hxx includes and instead add Button.hxx
includes (or weld::Button forward declarations) where
weld::Button is used.
(Don't simply replace all weld.hxx includes with
Button.hxx ones, since many of them were for the
use of other widgets that have since been moved
to their own headers.)
Add further includes where needed now that the
(direct or transitive) includes of weld.hxx were removed.
Change-Id: I8ea6201446a418d5e38b46337059dcd517ee29d7
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/205937
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
Tested-by: Jenkins
Move the class out of weld.hxx into its own header, in
order to make it easier to keep an overview and to avoid
having to recompile ~all UI code when the class is
modified.
Adjust includes in files that were implicitly depending
on transitive includes that are no longer present because
the more specific include/weld/Container.hxx is included
further down now instead of include/weld/weld.hxx.
Change-Id: I04e6bb72ce446b746dfdf88b45c7df9d0ccda473
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/205899
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
Tested-by: Jenkins
An additional fix for tdf#170681. It loads media into QMediaPlayer in a separate
thread to retrieve the size in the getPreferredPlayerWindowSize() function.
The implementation is not the best - in the separate thread, the media
is reloaded, but alas, this is the best I could achieve.
Moving QMediaPlayer between threads does not move the
QMediaPlayer backend (ffmpeg), and after loading, the
player remains "dead." Creating two players in two different
threads and then transferring the loaded buffer between them
also didn't work. There is currently no way to read metadata
without loading the file into QMediaPlayer. At the moment,
I believe it's not possible to do better within Qt's
limitations. If the QMediaPlayer issues are resolved,
the solution can be improved.
https://qt-project.atlassian.net/browse/QTBUG-125865https://qt-project.atlassian.net/browse/QTBUG-128853
Change-Id: I1d6efe0819b299427536be833ec7c4262e894f3d
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/203390
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
This is the equivalent to vcl commit
Change-Id: Ia52f5cfb8360e3b0de19404879d59131c63756b0
Author: Michael Weghorn <m.weghorn@posteo.de>
Date: Thu Mar 26 10:59:25 2026 +0100
qt: Include <sal/config.h>, arrange includes more consistently
in Qt-specific avmedia code. See the above commit for more
details/background.
Change-Id: I64c043b75e41fd89c02dfc6caf1359b003cd07ba
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/202729
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
Triggering event processing in the soffice process in
QtFrameGrabber::grabFrame is problematic. To avoid
this, using separated QThread (and QEeventLoop)
Change-Id: Id51c14c09842e7a003b6da665d85f67605fdf697
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/199083
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
Similar to how previous commit
Change-Id: I052f122e991bec745af88d3f43847e4d77fb4ba4
Author: Michael Weghorn <m.weghorn@posteo.de>
Date: Thu Mar 12 11:40:22 2026 +0100
vcl: Get Toolkit from SalInstance, not SystemEnvData
had done for the Toolkit, also retrieve the Platform
from the SalInstance instead of storing it in the
frame/object-specific SystemEnvData.
Also stop letting the availability be dependent on
#elif defined( UNX )
and rename Platform::Invalid to Platform::Other.
Initially, the latter is used everywhere where
nothing was explicitly set so far (and for the
non-UNX platforms that didn't have SystemEnvData::platform
at all so far).
This can be further adjusted in the future.
Not making it UNX-specific also removes one challenge
on the way to make the qt6 VCL plugin available on Windows
(see WIP change at [1]) because the existing logic
can now be used on all platforms.
[1] https://gerrit.libreoffice.org/c/core/+/199615
Change-Id: I383ad8ab287680f1d50dfc65d7d4d83eab3af5c8
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/201537
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
SystemEnvData holds data specific to a single
frame/object, but the toolkit used is specific
to the SalInstance/vcl plugin.
Instead of having a SystemEnvData::toolkit member
that needs to be set for each object, introduce
a SalInstance::GetToolkit getter and a corresponding
Application::GetToolkit that calls it.
Change-Id: I052f122e991bec745af88d3f43847e4d77fb4ba4
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/201536
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
Tested-by: Jenkins
Due to issues with QtFrameGrabber,
commit 08533ca4e2
Author: Michael Weghorn <m.weghorn@posteo.de>
Date: Fri May 2 17:52:19 2025 +0200
tdf#166055 avmedia qt: Use GStreamer frame grabber by default
switched from using QtFrameGrabber by default to using
the Gstreamer-based grabber by default.
Since then, QtFrameGrabber is only used if either
of these is true:
1) explicitly enabled by setting the
SAL_VCL_QT_USE_QT_FRAME_GRABBER environment
variable
2) no GStreamer-based grabber is returned by
createPlatformFrameGrabber
The tdf#170681 scenario of dragging and dropping
an audio-only file from the gallery in Impress
shows that 2) is also reached then because the
preferred size of the audio-only file in
Player::createFrameGrabber is empty, and thus no
frame grabber is created.
This apparently (at least in some configurations) results in
the QtFrameGrabber problems like crashes that the
above-mentioned commit was supposed to avoid,
until they get addressed a different way.
Therefore, adjust the logic to only create a
QtFrameGrabber when explicitly enabled, i.e.
for 1), but no longer for 2).
Change-Id: Ic95303e812819a9c432543992773b334995ddd31
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/199356
Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com>
Tested-by: Jenkins
Move the class out of weld.hxx into its own header, in
order to make it easier to keep an overview and to avoid
having to recompile ~all UI code when the class is
modified.
Change-Id: I5b23b02151c75bb49831a2bbf8d515eb0b54415e
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/199068
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
Tested-by: Jenkins
this was skipped in previous runs, since it contains some code behind #if
After inspecting these, it seems like the removals should not cause trouble.
Change-Id: If1e3e3c7c0fc14ed6e8b51174a0e7f1220fdbc8b
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/197496
Tested-by: Jenkins
Reviewed-by: Gabor Kelemen <gabor.kelemen@collabora.com>
Found after running bin/find-unneeded-includes --headersfwd include/vcl/[d-g]*
This shaves off about 150M input
Change-Id: I2b15257451d4b392dca3e5d07f4a443ee653b04c
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/196395
Tested-by: Jenkins
Reviewed-by: Gabor Kelemen <gabor.kelemen@collabora.com>
Found after running bin/find-unneeded-includes --headersfwd include/vcl/[A-Z]*
This shaves off about 100M input, not bad for such a small amount
of files checked
This time --headersfwd skips files that contain #if defs,
in hope of not breaking builds that are not checked by CI
(...except for include/vcl/BitmapTools.hxx - this was cleaned accidentally,
due to a bug in the bin/find-unneeded-includes script that is fixed
by the previous commit 930ff2b830
- but let's keep this anyway, it seems fine)
Change-Id: Ia8e49d94f6adb3cdbedbc40ffa56dbf846c9b6e4
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/196235
Reviewed-by: Gabor Kelemen <gabor.kelemen@collabora.com>
Tested-by: Jenkins
This is in preparation of moving code out of weld.hxx
to separate headers/source files, in order to make it
easier to keep an overview and to avoid having to
recompile ~all UI code when anything changes.
Also move weldutils.cxx to a new vcl/source/weld
directory.
Change-Id: Ia75b42f21e560dd248307282a522f186a64cd742
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/195777
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
utl::MediaDescriptor was just a SequenceAsHashMap with a few added
methods. It made it more difficult to assign a SequenceAsHashMap to
MediaDescriptor, without real upsides. In many places, the class was
used not as media descriptor, but just as helper to create sequences.
This change puts the string constants and the former methods into a
namespace utl::MediaDescriptor.
It would be also good to drop comphelper::NamedValueCollection, which
is basically a twin of comphelper::SequenceAsHashMap (TODO).
Change-Id: Ia9b69c5a2ad153ecc654944c419c1880252ed86e
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/195163
Tested-by: Jenkins
Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
CppunitTest_slideshow_engine occasionally failed at least on
<https://ci.libreoffice.org/job/gerrit_linux_gcc_release/>, with a
MissingPluginInstallerThread still executing during exit. What happened was
that the join() in MissingPluginInstaller::detach was executed before the
launch() in the MissingPluginInstaller launchUi link was called. So that call
to join() did nothing (cf. the documentation of osl_joinWithThread in
include/osl/thread.h: "Returns immediately if Thread is NULL.") and then the
call to create() started executing the thread during exit.
Change-Id: I5141eba64e6631cbf41026af4bbee4fc0a285a4f
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/194686
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <stephan.bergmann@collabora.com>
Code-Style: Stephan Bergmann <stephan.bergmann@collabora.com>
After recent commit 851fb75779
recheck these directories in include/ again
to test drive the new --headersfwd mode of bin/find-unneeded-includes
Change-Id: I0ede437c4f9958cd98210ed1760a5b98ea8bd1ad
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/192377
Tested-by: Jenkins
Reviewed-by: Gabor Kelemen <gabor.kelemen@collabora.com>
if media file cannot be played on Windows with new Media Foundation api.
More info shows up in the popup error window and in SAL_WARN().
Change-Id: Ib4e8eb5ef24e5f84e6d135c81ce25cf8bac5e958
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/190378
Tested-by: Jenkins
Reviewed-by: Balazs Varga <balazs.varga@collabora.com>
sd.check fails in CppunitTest_sd_export_tests-ooxml2 because
of not finished async calls before closing the unit test files.
Workaround to not create any media player objects (temporary) for
unit test files.
Co-authored-by: Mike Kaganski <mike.kaganski@collabora.com>
Change-Id: I93c8108a9806f2f6f171e07467afd4e79eae7ee8
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/189886
Tested-by: Jenkins
Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
> In file included from core/avmedia/source/qt6/QtPlayer.cxx:12:
> In file included from /usr/include/qt6/QtCore/QCoreApplication:1:
> In file included from /usr/include/qt6/QtCore/qcoreapplication.h:7:
> In file included from /usr/include/qt6/QtCore/qglobal.h:45:
> /usr/include/qt6/QtCore/qtypeinfo.h:56:27: error: 'is_trivial_v<QMediaPlayer::MediaStatus>' is deprecated: use 'is_trivially_default_constructible_v && is_trivially_copyable_v' instead [-Werror,-Wdeprecated-declarations]
> 56 | isComplex = !std::is_trivial_v<T>,
> | ^
[...]
> /usr/lib/gcc/x86_64-redhat-linux/15/../../../../include/c++/15/type_traits:3530:3: note: 'is_trivial_v<QMediaPlayer::MediaStatus>' has been explicitly marked deprecated here
> 3530 | _GLIBCXX26_DEPRECATED_SUGGEST("is_trivially_default_constructible_v && is_trivially_copyable_v")
> | ^
etc. on Fedora 42 and --with-latest-c++
Change-Id: I566d1c3d514fe4c366ac81a844afec0822cc5815
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/189571
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <stephan.bergmann@collabora.com>
Otherwise, this triggers the following assertion:
soffice.bin: .../vcl/source/app/dbggui.cxx:36: void ImplDbgTestSolarMutex(bool): Assertion `ImplGetSVData()->mpDefInst->GetYieldMutex()->IsCurrentThread() && "SolarMutex not owned!"' failed.
when opening an Impress presenation with a slide containing
a video with SAL_VCL_QT_USE_QT_FRAME_GRABBER=1, potentially
since
commit 88e9af00f2
Date: Wed Aug 6 09:49:42 2025 +0200
BitmapEx->Bitmap in PngImageReader
and follow-up commit
commit 32627a5807
Date: Wed Aug 6 15:48:28 2025 +0200
blind fix for qt6 build
Backtrace:
Thread 1 received signal SIGABRT, Aborted.
__pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=6, no_tid=no_tid@entry=0) at ./nptl/pthread_kill.c:44
warning: 44 ./nptl/pthread_kill.c: No such file or directory
(rr) bt
#0 __pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=6, no_tid=no_tid@entry=0) at ./nptl/pthread_kill.c:44
#1 0x00007fbf6409e9ff in __pthread_kill_internal (threadid=<optimized out>, signo=6) at ./nptl/pthread_kill.c:89
#2 0x00007fbf64049cc2 in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26
#3 0x00007fbf640324ac in __GI_abort () at ./stdlib/abort.c:73
#4 0x00007fbf64032420 in __assert_fail_base (fmt=<optimized out>, assertion=<optimized out>, file=<optimized out>, line=36, function=<optimized out>) at ./assert/assert.c:118
#5 0x00007fbf5b3889ec in ImplDbgTestSolarMutex (owned=true) at /home/michi/development/git/libreoffice/vcl/source/app/dbggui.cxx:36
#6 0x00007fbf6352b124 in DbgTestSolarMutex (owned=true) at /home/michi/development/git/libreoffice/tools/source/debug/debug.cxx:54
#7 0x00007fbf5b24fafb in VirtualDevice::AcquireGraphics (this=0x557da1d5e290) at /home/michi/development/git/libreoffice/vcl/source/gdi/virdev.cxx:49
#8 0x00007fbf5aecf733 in OutputDevice::DrawRect (this=0x557da1d5e290, rRect=...) at /home/michi/development/git/libreoffice/vcl/source/outdev/rect.cxx:67
#9 0x00007fbf5aee0999 in OutputDevice::DrawColorWallpaper (this=0x557da1d5e290, nX=0, nY=0, nWidth=721, nHeight=401, rWallpaper=...) at /home/michi/development/git/libreoffice/vcl/source/outdev/wallpaper.cxx:90
#10 0x00007fbf5aedefcf in OutputDevice::DrawWallpaper (this=0x557da1d5e290, nX=0, nY=0, nWidth=721, nHeight=401, rWallpaper=...) at /home/michi/development/git/libreoffice/vcl/source/outdev/wallpaper.cxx:70
#11 0x00007fbf5aedeeab in OutputDevice::DrawWallpaper (this=0x557da1d5e290, rRect=..., rWallpaper=...) at /home/michi/development/git/libreoffice/vcl/source/outdev/wallpaper.cxx:53
#12 0x00007fbf5b2523b0 in VirtualDevice::InnerImplSetOutputSizePixel (this=0x557da1d5e290, rNewSize=Size = {...}, bErase=true, bAlphaMaskTransparent=true) at /home/michi/development/git/libreoffice/vcl/source/gdi/virdev.cxx:295
#13 0x00007fbf5b2527dd in VirtualDevice::SetOutputSizePixel (this=0x557da1d5e290, rNewSize=Size = {...}, bErase=true, bAlphaMaskTransparent=true) at /home/michi/development/git/libreoffice/vcl/source/gdi/virdev.cxx:350
#14 0x00007fbf5b2ac951 in Bitmap::Bitmap (this=0x7fffdcfcae00, rBitmapEx=...) at /home/michi/development/git/libreoffice/vcl/source/bitmap/bitmap.cxx:146
#15 0x00007fbf5b5e8e6f in vcl::PngImageReader::read (this=0x7fffdcfcb128, rBitmap=...) at /home/michi/development/git/libreoffice/vcl/source/filter/png/PngImageReader.cxx:820
#16 0x00007fbf2c1be088 in (anonymous namespace)::toXGraphic (rImage=...) at /home/michi/development/git/libreoffice/avmedia/source/qt6/QtFrameGrabber.cxx:36
#17 0x00007fbf2c1bda8e in avmedia::qt::QtFrameGrabber::onVideoFrameChanged (this=0x7fbf24003b00, rFrame=...) at /home/michi/development/git/libreoffice/avmedia/source/qt6/QtFrameGrabber.cxx:73
#18 0x00007fbf2c1c33d4 in QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul>, QtPrivate::List<QVideoFrame const&>, void, void (avmedia::qt::QtFrameGrabber::*)(QVideoFrame const&)>::call(void (avmedia::qt::QtFrameGrabber::*)(QVideoFrame const&), avmedia::qt::QtFrameGrabber*, void**)::{lambda()#1}::operator()() const (this=0x7fffdcfcb300) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:127
#19 0x00007fbf2c1c3359 in QtPrivate::FunctorCallBase::call_internal<void, QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul>, QtPrivate::List<QVideoFrame const&>, void, void (avmedia::qt::QtFrameGrabber::*)(QVideoFrame const&)>::call(void (avmedia::qt::QtFrameGrabber::*)(QVideoFrame const&), avmedia::qt::QtFrameGrabber*, void**)::{lambda()#1}>(void**, QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul>, QtPrivate::List<QVideoFrame const&>, void, void (avmedia::qt::QtFrameGrabber::*)(QVideoFrame const&)>::call(void (avmedia::qt::QtFrameGrabber::*)(QVideoFrame const&), avmedia::qt::QtFrameGrabber*, void**)::{lambda()#1}&&) (args=0x7fbf24003bd8, fn=...)
at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:65
#20 0x00007fbf2c1c3323 in QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul>, QtPrivate::List<QVideoFrame const&>, void, void (avmedia::qt::QtFrameGrabber::*)(QVideoFrame const&)>::call
(f=(void (avmedia::qt::QtFrameGrabber::*)(class avmedia::qt::QtFrameGrabber * const, const class QVideoFrame &)) 0x7fbf2c1bda40 <avmedia::qt::QtFrameGrabber::onVideoFrameChanged(QVideoFrame const&)>, o=0x7fbf24003b00, arg=0x7fbf24003bd8) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:126
#21 0x00007fbf2c1c329d in QtPrivate::FunctionPointer<void (avmedia::qt::QtFrameGrabber::*)(QVideoFrame const&)>::call<QtPrivate::List<QVideoFrame const&>, void>
(f=(void (avmedia::qt::QtFrameGrabber::*)(class avmedia::qt::QtFrameGrabber * const, const class QVideoFrame &)) 0x7fbf2c1bda40 <avmedia::qt::QtFrameGrabber::onVideoFrameChanged(QVideoFrame const&)>, o=0x7fbf24003b00, arg=0x7fbf24003bd8) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:174
#22 0x00007fbf2c1c31c6 in QtPrivate::QCallableObject<void (avmedia::qt::QtFrameGrabber::*)(QVideoFrame const&), QtPrivate::List<QVideoFrame const&>, void>::impl
(which=1, this_=0x557d9d23f1c0, r=0x7fbf24003b00, a=0x7fbf24003bd8, ret=0x0) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:545
#23 0x00007fbf51907b62 in QtPrivate::QSlotObjectBase::call (this=0x557d9d23f1c0, r=0x7fbf24003b00, a=0x7fbf24003bd8) at qtbase/src/corelib/kernel/qobjectdefs_impl.h:461
#24 0x00007fbf51b1a02c in QMetaCallEvent::placeMetaCall (this=0x7fbf24003b90, object=0x7fbf24003b00) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobject.cpp:544
#25 0x00007fbf51b1c1c1 in QObject::event (this=0x7fbf24003b00, e=0x7fbf24003b90) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobject.cpp:1465
#26 0x00007fbf4f9e6130 in QApplicationPrivate::notify_helper (this=0x557d975ccb40, receiver=0x7fbf24003b00, e=0x7fbf24003b90) at /home/michi/development/git/qt5/qtbase/src/widgets/kernel/qapplication.cpp:3307
#27 0x00007fbf4f9ea038 in QApplication::notify (this=0x557d975bdec0, receiver=0x7fbf24003b00, e=0x7fbf24003b90) at /home/michi/development/git/qt5/qtbase/src/widgets/kernel/qapplication.cpp:3257
#28 0x00007fbf51a52ac9 in QCoreApplication::notifyInternal2 (receiver=0x7fbf24003b00, event=0x7fbf24003b90) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qcoreapplication.cpp:1109
#29 0x00007fbf51a53739 in QCoreApplication::sendEvent (receiver=0x7fbf24003b00, event=0x7fbf24003b90) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qcoreapplication.cpp:1549
#30 0x00007fbf51a5466a in QCoreApplicationPrivate::sendPostedEvents (receiver=0x0, event_type=0, data=0x557d975f3770) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qcoreapplication.cpp:1904
#31 0x00007fbf51a5357c in QCoreApplication::sendPostedEvents (receiver=0x0, event_type=0) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qcoreapplication.cpp:1757
#32 0x00007fbf5205bba1 in postEventSourceDispatch (s=0x557d9761ac80) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qeventdispatcher_glib.cpp:246
#33 0x00007fbf561043c5 in ??? () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
#34 0x00007fbf561065f7 in ??? () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
#35 0x00007fbf56106d60 in g_main_context_iteration () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
#36 0x00007fbf5205addb in QEventDispatcherGlib::processEvents (this=0x557d975bf280, flags=...) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qeventdispatcher_glib.cpp:399
#37 0x00007fbf5119f838 in QPAEventDispatcherGlib::processEvents (this=0x557d975bf280, flags=...) at /home/michi/development/git/qt5/qtbase/src/gui/platform/unix/qeventdispatcher_glib.cpp:89
#38 0x00007fbf52a19b84 in QtInstance::ImplYield (this=0x557d976494e0, bWait=false, bHandleAllCurrentEvents=true) at vcl/qt6/../qt5/QtInstance.cxx:503
#39 0x00007fbf52a1ce71 in QtInstance::DoYield (this=0x557d976494e0, bWait=false, bHandleAllCurrentEvents=true) at vcl/qt6/../qt5/QtInstance.cxx:512
#40 0x00007fbf5b45f3a6 in ImplYield (i_bWait=false, i_bAllEvents=true) at /home/michi/development/git/libreoffice/vcl/source/app/svapp.cxx:385
#41 0x00007fbf5b45f667 in Scheduler::ProcessEventsToIdle () at /home/michi/development/git/libreoffice/vcl/source/app/svapp.cxx:435
#42 0x00007fbf2c1be3cd in avmedia::qt::QtFrameGrabber::grabFrame (this=0x7fbf24003b00, fMediaTime=0) at /home/michi/development/git/libreoffice/avmedia/source/qt6/QtFrameGrabber.cxx:100
#43 0x00007fbf2c1be4ce in non-virtual thunk to avmedia::qt::QtFrameGrabber::grabFrame(double) () at /home/michi/development/git/libreoffice/instdir/program/../program/libavmediaqt6.so
#44 0x00007fbf5d3e5b13 in avmedia::MediaWindow::grabFrame (xPlayer=uno::Reference to (avmedia::qt::QtPlayer *) 0x557d9c991168, rGraphic=empty uno::Reference)
at /home/michi/development/git/libreoffice/avmedia/source/viewer/mediawindow.cxx:384
#45 0x00007fbf5e430b5f in SdrMediaObj::getSnapshot() const::$_0::operator()(com::sun::star::uno::Reference<com::sun::star::media::XPlayer> const&) const
(this=0x557d9c98fea0, rPlayer=uno::Reference to (avmedia::qt::QtPlayer *) 0x557d9c991168) at /home/michi/development/git/libreoffice/svx/source/svdraw/svdomedia.cxx:195
#46 0x00007fbf5e430add 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 *) 0x557d9c991168) at /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/invoke.h:61
#47 0x00007fbf5e430a8d 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 *) 0x557d9c991168) at /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/invoke.h:111
#48 0x00007fbf5e430905 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 *) 0x557d9c991168) at /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/std_function.h:290
#49 0x00007fbf5d3ec066 in std::function<void(com::sun::star::uno::Reference<com::sun::star::media::XPlayer> const&)>::operator() (this=0x557d9c975aa8, __args=uno::Reference to (avmedia::qt::QtPlayer *) 0x557d9c991168)
at /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/std_function.h:591
#50 0x00007fbf5d3e8261 in avmedia::PlayerListener::callPlayerWindowSizeAvailable (this=0x557d9c975a60, rPlayer=uno::Reference to (avmedia::qt::QtPlayer *) 0x557d9c991168) at include/avmedia/mediawindow.hxx:74
#51 0x00007fbf5d3e5eab in avmedia::MediaWindow::grabFrame (rURL="file:///tmp/7qg9UE.ogg", rReferer="", sMimeType="audio/ogg", xPreferredPixelSizeListener=rtl::Reference to 0x557d9c975a60)
at /home/michi/development/git/libreoffice/avmedia/source/viewer/mediawindow.cxx:434
#52 0x00007fbf5e42e93c in SdrMediaObj::getSnapshot (this=0x557d9921fd10) at /home/michi/development/git/libreoffice/svx/source/svdraw/svdomedia.cxx:199
#53 0x00007fbf5e17a1a9 in sdr::contact::ViewContactOfSdrMediaObj::createViewIndependentPrimitive2DSequence (this=0x557d997790d0, rVisitor=...)
at /home/michi/development/git/libreoffice/svx/source/sdr/contact/viewcontactofsdrmediaobj.cxx:122
#54 0x00007fbf5e19363b in sdr::contact::ViewContact::getViewIndependentPrimitive2DContainer (this=0x557d997790d0, rVisitor=...) at /home/michi/development/git/libreoffice/svx/source/sdr/contact/viewcontact.cxx:261
#55 0x00007fbf5e3c8a34 in SdrObject::RecalcBoundRect (this=0x557d9921fd10) at /home/michi/development/git/libreoffice/svx/source/svdraw/svdobj.cxx:988
#56 0x00007fbf5e3c8959 in SdrObject::GetCurrentBoundRect (this=0x557d9921fd10) at /home/michi/development/git/libreoffice/svx/source/svdraw/svdobj.cxx:958
#57 0x00007fbf5e4b91d0 in SdrObjList::RecalcRects (this=0x557d9925ec30) at /home/michi/development/git/libreoffice/svx/source/svdraw/svdpage.cxx:242
#58 0x00007fbf5e4bcf99 in SdrObjList::GetAllObjBoundRect (this=0x557d9925ec30) at /home/michi/development/git/libreoffice/svx/source/svdraw/svdpage.cxx:740
#59 0x00007fbf5e4e1142 in SdrPageView::InvalidateAllWin (this=0x557d9c973a00) at /home/michi/development/git/libreoffice/svx/source/svdraw/svdpagv.cxx:202
#60 0x00007fbf5e4e3301 in SdrPageView::SetHelpLines (this=0x557d9c973a00, rHLL=...) at /home/michi/development/git/libreoffice/svx/source/svdraw/svdpagv.cxx:687
#61 0x00007fbf2fe0a543 in sd::DrawViewShell::SwitchPage (this=0x557d990dc4b0, nSelectedPage=0, bAllowChangeFocus=true, bUpdateScrollbars=true) at /home/michi/development/git/libreoffice/sd/source/ui/view/drviews1.cxx:1050
#62 0x00007fbf2fe0869d in sd::DrawViewShell::ChangeEditMode (this=0x557d990dc4b0, eEMode=EditMode::Page, bIsLayerModeActive=false) at /home/michi/development/git/libreoffice/sd/source/ui/view/drviews1.cxx:409
#63 0x00007fbf2fe566cc in sd::DrawViewShell::ReadFrameViewData (this=0x557d990dc4b0, pView=0x557d9c970370) at /home/michi/development/git/libreoffice/sd/source/ui/view/drviews5.cxx:291
#64 0x00007fbf2fe6f3e1 in sd::DrawViewShell::Construct (this=0x557d990dc4b0, pDocSh=0x557d98f74bd0, eInitialPageKind=PageKind::Standard) at /home/michi/development/git/libreoffice/sd/source/ui/view/drviewsa.cxx:304
#65 0x00007fbf2fe6ea0d in sd::DrawViewShell::DrawViewShell (this=0x557d990dc4b0, rViewShellBase=..., pParentWindow=0x557d99842f80, ePageKind=PageKind::Standard, pFrameViewArgument=0x0)
at /home/michi/development/git/libreoffice/sd/source/ui/view/drviewsa.cxx:126
#66 0x00007fbf2f9caedd in std::_Construct<sd::DrawViewShell, sd::ViewShellBase&, vcl::Window*, PageKind, sd::FrameView*&>
(__p=0x557d990dc4b0, __args=..., __args=@0x7fffdcfcfcd0: 0x557d99842f80, __args=@0x7fffdcfcfccc: PageKind::Standard, __args=@0x7fffdcfcfcf0: 0x0)
at /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/stl_construct.h:119
#67 0x00007fbf2f9caafe in std::allocator_traits<std::allocator<void> >::construct<sd::DrawViewShell, sd::ViewShellBase&, vcl::Window*, PageKind, sd::FrameView*&>
(__p=0x557d990dc4b0, __args=..., __args=@0x7fffdcfcfcd0: 0x557d99842f80, __args=@0x7fffdcfcfccc: PageKind::Standard, __args=@0x7fffdcfcfcf0: 0x0)
at /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/alloc_traits.h:706
#68 std::_Sp_counted_ptr_inplace<sd::DrawViewShell, std::allocator<void>, (__gnu_cxx::_Lock_policy)2>::_Sp_counted_ptr_inplace<sd::ViewShellBase&, vcl::Window*, PageKind, sd::FrameView*&>
(this=0x557d990dc4a0, __a=..., __args=..., __args=@0x7fffdcfcfcd0: 0x557d99842f80, __args=@0x7fffdcfcfccc: PageKind::Standard, __args=@0x7fffdcfcfcf0: 0x0)
at /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/shared_ptr_base.h:607
#69 0x00007fbf2f9ca8f7 in std::__shared_count<(__gnu_cxx::_Lock_policy)2>::__shared_count<sd::DrawViewShell, std::allocator<void>, sd::ViewShellBase&, vcl::Window*, PageKind, sd::FrameView*&>
(this=0x7fffdcfcfce0, __p=@0x7fffdcfcfcd8: 0x0, __a=..., __args=..., __args=@0x7fffdcfcfcd0: 0x557d99842f80, __args=@0x7fffdcfcfccc: PageKind::Standard, __args=@0x7fffdcfcfcf0: 0x0)
at /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/shared_ptr_base.h:970
#70 0x00007fbf2f9ca81a in std::__shared_ptr<sd::DrawViewShell, (__gnu_cxx::_Lock_policy)2>::__shared_ptr<std::allocator<void>, sd::ViewShellBase&, vcl::Window*, PageKind, sd::FrameView*&>
(this=0x7fffdcfcfcd8, __tag=..., __args=..., __args=@0x7fffdcfcfcd0: 0x557d99842f80, __args=@0x7fffdcfcfccc: PageKind::Standard, __args=@0x7fffdcfcfcf0: 0x0)
at /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/shared_ptr_base.h:1713
#71 0x00007fbf2f9ca792 in std::shared_ptr<sd::DrawViewShell>::shared_ptr<std::allocator<void>, sd::ViewShellBase&, vcl::Window*, PageKind, sd::FrameView*&>
(this=0x7fffdcfcfcd8, __tag=..., __args=..., __args=@0x7fffdcfcfcd0: 0x557d99842f80, __args=@0x7fffdcfcfccc: PageKind::Standard, __args=@0x7fffdcfcfcf0: 0x0)
at /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/shared_ptr.h:463
#72 0x00007fbf2f9c4911 in std::make_shared<sd::DrawViewShell, sd::ViewShellBase&, vcl::Window*, PageKind, sd::FrameView*&>
(__args=..., __args=@0x7fffdcfcfcd0: 0x557d99842f80, __args=@0x7fffdcfcfccc: PageKind::Standard, __args=@0x7fffdcfcfcf0: 0x0) at /usr/lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/shared_ptr.h:1007
#73 0x00007fbf2f9c11f3 in sd::framework::BasicViewFactory::CreateViewShell (this=0x557d9963e1a0, rxViewId=rtl::Reference to 0x557d998d8910, rWindow=..., pFrameView=0x0)
at /home/michi/development/git/libreoffice/sd/source/ui/framework/factories/BasicViewFactory.cxx:284
#74 0x00007fbf2f9c0553 in sd::framework::BasicViewFactory::CreateView (this=0x557d9963e1a0, rxViewId=rtl::Reference to 0x557d998d8910, rWindow=..., rxPane=rtl::Reference to 0x557d9c953020, pFrameView=0x0, bIsCenterPane=true)
at /home/michi/development/git/libreoffice/sd/source/ui/framework/factories/BasicViewFactory.cxx:241
#75 0x00007fbf2f9bffcb in sd::framework::BasicViewFactory::createResource (this=0x557d9963e1a0, rxViewId=rtl::Reference to 0x557d998d8910)
at /home/michi/development/git/libreoffice/sd/source/ui/framework/factories/BasicViewFactory.cxx:167
#76 0x00007fbf2f994c48 in sd::framework::ConfigurationControllerResourceManager::ActivateResource (this=0x557d9963f120, rxResourceId=rtl::Reference to 0x557d998d8910, rxConfiguration=rtl::Reference to 0x557d999b0dc0)
at /home/michi/development/git/libreoffice/sd/source/ui/framework/configuration/ConfigurationControllerResourceManager.cxx:130
#77 0x00007fbf2f9945f8 in sd::framework::ConfigurationControllerResourceManager::ActivateResources (this=0x557d9963f120, rResources=std::__debug::vector of length 5, capacity 5 = {...}, rxConfiguration=rtl::Reference to 0x557d999b0dc0)
at /home/michi/development/git/libreoffice/sd/source/ui/framework/configuration/ConfigurationControllerResourceManager.cxx:75
#78 0x00007fbf2f99d07a in sd::framework::ConfigurationUpdater::UpdateCore (this=0x557d999afee0, rClassifier=...) at /home/michi/development/git/libreoffice/sd/source/ui/framework/configuration/ConfigurationUpdater.cxx:251
#79 0x00007fbf2f99c61c in sd::framework::ConfigurationUpdater::UpdateConfiguration (this=0x557d999afee0) at /home/michi/development/git/libreoffice/sd/source/ui/framework/configuration/ConfigurationUpdater.cxx:161
#80 0x00007fbf2f99c09b in sd::framework::ConfigurationUpdater::RequestUpdate (this=0x557d999afee0, rxRequestedConfiguration=rtl::Reference to 0x557d998c8ed0)
at /home/michi/development/git/libreoffice/sd/source/ui/framework/configuration/ConfigurationUpdater.cxx:108
#81 0x00007fbf2f96fe69 in sd::framework::ChangeRequestQueueProcessor::ProcessOneEvent (this=0x557d999b0e60) at /home/michi/development/git/libreoffice/sd/source/ui/framework/configuration/ChangeRequestQueueProcessor.cxx:158
#82 0x00007fbf2f982909 in sd::framework::ConfigurationController::ProcessEvent (this=0x557d999b0bf0) at /home/michi/development/git/libreoffice/sd/source/ui/framework/configuration/ConfigurationController.cxx:157
#83 0x00007fbf2fdbc797 in sd::ViewShellBase::LateInit (this=0x557d99242e30, rsDefaultView="") at /home/michi/development/git/libreoffice/sd/source/ui/view/ViewShellBase.cxx:345
#84 0x00007fbf2fd78a33 in sd::ImpressViewShellBase::CreateInstance (rFrame=..., pOldView=0x0) at /home/michi/development/git/libreoffice/sd/source/ui/view/ImpressViewShellBase.cxx:45
#85 0x00007fbf60a31855 in SfxViewFactory::CreateInstance (this=0x557d991cd6a0, rFrame=..., pOldSh=0x0) at /home/michi/development/git/libreoffice/sfx2/source/view/viewfac.cxx:26
#86 0x00007fbf60840fbf in SfxBaseModel::createViewController (this=0x557d9913bc50, i_rViewName="Default", i_rArguments=empty uno::Sequence, i_rFrame=uno::Reference to ((anonymous namespace)::XFrameImpl *) 0x557d98f32e40)
at /home/michi/development/git/libreoffice/sfx2/source/doc/sfxbasemodel.cxx:4355
#87 0x00007fbf60841a9f in non-virtual thunk to SfxBaseModel::createViewController(rtl::OUString const&, com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> const&, com::sun::star::uno::Reference<com::sun::star::frame::XFrame> const&) () at /home/michi/development/git/libreoffice/instdir/program/libsfxlo.so
#88 0x00007fbf609dc0f4 in (anonymous namespace)::SfxFrameLoader_Impl::impl_createDocumentView
(i_rModel=uno::Reference to (SdXImpressDocument *) 0x557d9913bce0, i_rFrame=uno::Reference to ((anonymous namespace)::XFrameImpl *) 0x557d98f32e40, i_rViewFactoryArgs=..., i_rViewName="Default")
at /home/michi/development/git/libreoffice/sfx2/source/view/frmload.cxx:586
#89 0x00007fbf609d96ac in (anonymous namespace)::SfxFrameLoader_Impl::load (this=0x557d99388d30, rArgs=uno::Sequence of length 12 = {...}, _rTargetFrame=uno::Reference to ((anonymous namespace)::XFrameImpl *) 0x557d98f32e40)
at /home/michi/development/git/libreoffice/sfx2/source/view/frmload.cxx:813
#90 0x00007fbf615c72c4 in framework::LoadEnv::impl_loadContent (this=0x557d98866fa8) at /home/michi/development/git/libreoffice/framework/source/loadenv/loadenv.cxx:1180
#91 0x00007fbf615c4425 in framework::LoadEnv::start (this=0x557d98866fa8) at /home/michi/development/git/libreoffice/framework/source/loadenv/loadenv.cxx:415
#92 0x00007fbf615c20d2 in framework::LoadEnv::startLoading
(this=0x557d98866fa8, sURL="file:///home/michi/git/computer-doc/misc/impress_presentations_with_audio_and_video/slide_with_video.odp", lMediaDescriptor=uno::Sequence of length 4 = {...}, xBaseFrame=uno::Reference to (framework::Desktop *) 0x557d978a34b8, sTarget="_default", nSearchFlags=0, eFeature=(LoadEnvFeatures::WorkWithUI | LoadEnvFeatures::AllowContentHandler)) at /home/michi/development/git/libreoffice/framework/source/loadenv/loadenv.cxx:311
#93 0x00007fbf6145aaa1 in framework::LoadDispatcher::impl_dispatch (this=0x557d98866f50, rURL=..., lArguments=uno::Sequence of length 4 = {...}, xListener=empty uno::Reference)
at /home/michi/development/git/libreoffice/framework/source/dispatch/loaddispatcher.cxx:107
#94 0x00007fbf6145b801 in framework::LoadDispatcher::dispatchWithReturnValue (this=0x557d98866f50, rURL=..., lArguments=uno::Sequence of length 4 = {...})
at /home/michi/development/git/libreoffice/framework/source/dispatch/loaddispatcher.cxx:60
#95 0x00007fbf6145b8a4 in non-virtual thunk to framework::LoadDispatcher::dispatchWithReturnValue(com::sun::star::util::URL const&, com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> const&) ()
at /home/michi/development/git/libreoffice/framework/source/dispatch/loaddispatcher.cxx:60
#96 0x00007fbf629f10c0 in comphelper::SynchronousDispatch::dispatch
(xStartPoint=uno::Reference to (framework::Desktop *) 0x557d978a34a8, sURL="file:///home/michi/git/computer-doc/misc/impress_presentations_with_audio_and_video/slide_with_video.odp", sTarget="_default", lArguments=uno::Sequence of length 4 = {...}) at /home/michi/development/git/libreoffice/comphelper/source/misc/synchronousdispatch.cxx:62
#97 0x00007fbf64377054 in desktop::DispatchWatcher::executeDispatchRequests (this=0x557d99219bb0, aDispatchRequestsList=std::__debug::vector of length 1, capacity 1 = {...}, bNoTerminate=false, pFlags=0x7fffdcfd6994)
at /home/michi/development/git/libreoffice/desktop/source/app/dispatchwatcher.cxx:531
#98 0x00007fbf64395488 in desktop::RequestHandler::ExecuteCmdLineRequests (aRequest=..., noTerminate=false) at /home/michi/development/git/libreoffice/desktop/source/app/officeipcthread.cxx:1317
#99 0x00007fbf6432ee7f in desktop::Desktop::OpenClients () at /home/michi/development/git/libreoffice/desktop/source/app/app.cxx:2218
#100 0x00007fbf6432cdf3 in desktop::Desktop::OpenClients_Impl (this=0x7fffdcfda450) at /home/michi/development/git/libreoffice/desktop/source/app/app.cxx:1978
#101 0x00007fbf6432b45d in desktop::Desktop::LinkStubOpenClients_Impl (instance=0x7fffdcfda450, data=0x0) at /home/michi/development/git/libreoffice/desktop/source/app/app.cxx:1962
#102 0x00007fbf5ac98231 in Link<void*, void>::Call (this=0x557d98fba098, data=0x0) at include/tools/link.hxx:105
#103 0x00007fbf5ac93af1 in ImplHandleUserEvent (pSVEvent=0x557d98fba090) at /home/michi/development/git/libreoffice/vcl/source/window/winproc.cxx:2312
#104 0x00007fbf5ac90a1f in ImplWindowFrameProc (_pWindow=0x557d988b22c0, nEvent=SalEvent::UserEvent, pEvent=0x557d98fba090) at /home/michi/development/git/libreoffice/vcl/source/window/winproc.cxx:2876
#105 0x00007fbf529fb3ec in SalFrame::CallCallback (this=0x557d988b3f20, nEvent=SalEvent::UserEvent, pEvent=0x557d98fba090) at vcl/inc/salframe.hxx:310
#106 0x00007fbf52a1d2af in QtInstance::ProcessEvent (this=0x557d976494e0, aEvent=...) at vcl/qt6/../qt5/QtInstance.cxx:594
#107 0x00007fbf5b393fbd in SalUserEventList::DispatchUserEvents(bool)::$_0::operator()() const (this=0x7fffdcfd88a0) at /home/michi/development/git/libreoffice/vcl/source/app/salusereventlist.cxx:119
#108 0x00007fbf5b393e8b in SalUserEventList::DispatchUserEvents (this=0x557d97649518, bHandleAllCurrentEvents=false) at /home/michi/development/git/libreoffice/vcl/source/app/salusereventlist.cxx:120
#109 0x00007fbf52a19a91 in QtInstance::ImplYield (this=0x557d976494e0, bWait=true, bHandleAllCurrentEvents=false) at vcl/qt6/../qt5/QtInstance.cxx:490
#110 0x00007fbf52a1ce71 in QtInstance::DoYield (this=0x557d976494e0, bWait=true, bHandleAllCurrentEvents=false) at vcl/qt6/../qt5/QtInstance.cxx:512
#111 0x00007fbf5b45f3a6 in ImplYield (i_bWait=true, i_bAllEvents=false) at /home/michi/development/git/libreoffice/vcl/source/app/svapp.cxx:385
#112 0x00007fbf5b45ecbf in Application::Yield () at /home/michi/development/git/libreoffice/vcl/source/app/svapp.cxx:488
#113 0x00007fbf5b45eaa0 in Application::Execute () at /home/michi/development/git/libreoffice/vcl/source/app/svapp.cxx:360
#114 0x00007fbf64329435 in desktop::Desktop::Main (this=0x7fffdcfda450) at /home/michi/development/git/libreoffice/desktop/source/app/app.cxx:1678
#115 0x00007fbf5b48b2c6 in ImplSVMain () at /home/michi/development/git/libreoffice/vcl/source/app/svmain.cxx:230
#116 0x00007fbf5b48cdb9 in SVMain () at /home/michi/development/git/libreoffice/vcl/source/app/svmain.cxx:248
#117 0x00007fbf643a30ea in soffice_main () at /home/michi/development/git/libreoffice/desktop/source/app/sofficemain.cxx:122
#118 0x0000557d789219fd in sal_main () at /home/michi/development/git/libreoffice/desktop/source/app/main.c:51
#119 0x0000557d789219d7 in main (argc=2, argv=0x7fffdcfda658) at /home/michi/development/git/libreoffice/desktop/source/app/main.c:49
Change-Id: I1e2265e38d7c93171146df4f58666e9cf22bdaf6
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/189036
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
be played on Windows with new Media Foundation api. Replace
avmedia::MediaWindow::executeFormatErrorBox which caused crash.
follow up of: 65d72f816a
Change-Id: I03be99ac486f64f1181be69fdcea316b8ac79c98
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/188910
Tested-by: Jenkins
Reviewed-by: Balazs Varga <balazs.varga@collabora.com>
now that Bitmap can handle transparency
Also add a utility method Bitmap::GetPixelColor, to use
in unit test code.
One of the unit tests needed tweaking because we are
converting back and forth a few times which adds some
inaccuracy.
Change-Id: I760c7da8845488e547b16ed243819fe3288b0985
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/188537
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Tested-by: Jenkins
Call comphelper::getProcessComponentContext directly
in MediaWindowImpl::createPlayer instead of passing
the XComponentContext as a param.
Change-Id: If349dfe1b5a8216ba971233249bb135c1a7d2019
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/184914
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
Tested-by: Jenkins
As described in tdf#166055, QtFrameGrabber currently
still causes issues (freezes or crashes).
The QtMultimedia API does not provide a simple
way to synchronously retrieve a video frame, so
the current approach is to connect to the
QVideoSink::videoFrameChanged signal and start
playing the video until the first frame arrives.
There are various QtMultimedia plugins/backends
(at least GStreamer and ffmpeg for Linux). Some
use multiple threads internally. Some logic
needs to be run in the main thread however, so
it's not possible to move things to a separate
thread/event loop to decouple it from the main
thread.
As a consequence, there is a need to trigger
event processing while waiting for the frame,
as QVideoSink::videoFrameChanged would otherwise
never be called.
Triggering event processing can have bad side-effects
however, as seen in tdf#166055, e.g. leading to
endless recursion or crashes when processing LO events.
See also
commit 697405b533
Author: Michael Weghorn <m.weghorn@posteo.de>
Date: Wed Apr 9 09:42:45 2025 +0200
tdf#166055 qt avmedia: Provide media/player size right away
for more background and some thoughts.
For now, avoid the problem by using
the GStreamer based frame grabber even with
QtPlayer by default.
This means that the QtMultimedia
framework is still used for video playback with the
qt6 VCL plugin, where LO's GStreamer implementation
doesn't work properly, see
commit 441d8ed9be
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
. However, in order to preview images (that are e.g. shown
in Impress when not in presentation mode) the LO GStreamer
backend is used now.
(That works fine, no UI interaction is needed
for that.)
Adjust QtPlayer::createFrameGrabber accordingly
to return the LO default platform player/frame grabber
implementation (which is the GStreamer one on Linux), see also
MediaWindowImpl::createPlayer. Use the service to
avoid having to link GStreamer libraries.
However, allow to force the use of QtFrameGrabber
by setting environment variable
SAL_VCL_QT_USE_QT_FRAME_GRABBER.
Change-Id: Ibe5c42adf6e8f699f33e5f089bd2f6076c3de4f7
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/184912
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
Adjust the code after
commit 70162a33fd
Date: Tue Apr 15 14:17:21 2025 +0900
vcl: Introduce ImportOutput to return BitmapEx or Animation
to address the following build failure for the --enable-qt6 build:
/home/michi/development/git/libreoffice/avmedia/source/qt6/QtFrameGrabber.cxx:36:13: error: no matching member function for call to 'read'
36 | aReader.read(aGraphic);
| ~~~~~~~~^~~~
/home/michi/development/git/libreoffice/include/vcl/filter/PngImageReader.hxx:58:10: note: candidate function not viable: no known conversion from 'Graphic' to 'BitmapEx &' for 1st argument
58 | bool read(BitmapEx& rBitmap);
| ^ ~~~~~~~~~~~~~~~~~
/home/michi/development/git/libreoffice/include/vcl/filter/PngImageReader.hxx:59:10: note: candidate function not viable: no known conversion from 'Graphic' to 'ImportOutput &' for 1st argument
59 | bool read(ImportOutput& rImportOutput);
| ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/michi/development/git/libreoffice/include/vcl/filter/PngImageReader.hxx:61:14: note: candidate function not viable: requires 0 arguments, but 1 was provided
61 | BitmapEx read();
| ^
1 error generated.
Change-Id: I7d322f66a09f76851e9045e8e90684ac35bb48f6
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/184424
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
Instead of having one for vcl in vcl/inc/qt5/QtTools.hxx
and one in avmedia/source/qt6/QtFrameGrabber.cxx,
move the existing implementation to
include/vcl/qt/QtUtils.hxx and use it everywhere.
Change-Id: I8576ab0fe2fd12bb25ae262e59acb8412ef8be0c
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/184057
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
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 441d8ed9be
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