Trouble Building QMultimedia and FFMpeg on Debian x86_64
-
HI All,
I'm stumped at building Qt on Debian X86_64.
The FFMPEG plugin with FFMPEG-7.0.0 will not link at all:
/home/alisi/kde/src/qtmultimedia/src/plugins/multimedia/ffmpeg/qffmpegencodingformatcontext.cpp:90:48: error: invalid conversion from ‘int ()(void, uint8_t*, int)’ {aka ‘int ()(void, unsigned char*, int)’} to ‘int ()(void, const uint8_t*, int)’ {aka ‘int ()(void, const unsigned char*, int)’} [-fpermissive]
90 | &writeQIODevice, &seekQIODevice);
| ^~~~~~~~~~~~~~~
| |
| int ()(void, uint8_t*, int) {aka int ()(void, unsigned char*, int)}
In file included from /home/alisi/src/ffmpeg-7.0/libavformat/avformat.h:319,
from /home/alisi/kde/src/qtmultimedia/src/plugins/multimedia/ffmpeg/qffmpegdefs_p.h:19,
from /home/alisi/kde/src/qtmultimedia/src/plugins/multimedia/ffmpeg/qffmpegencodingformatcontext_p.h:7,
from /home/alisi/kde/src/qtmultimedia/src/plugins/multimedia/ffmpeg/qffmpegencodingformatcontext.cpp:4:
/home/alisi/src/ffmpeg-7.0/libavformat/avio.h:404:25: note: initializing argument 6 of ‘AVIOContext* avio_alloc_context(unsigned char*, int, int, void*, int ()(void, uint8_t*, int), int ()(void, const uint8_t*, int), int64_t ()(void, int64_t, int))’
404 | int (*write_packet)(void *opaque, const uint8_t *buf, int buf_size),
|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
[18/46] Building CXX object src/multimediawidgets/CMakeFiles/MultimediaWidgets.dir/qvideowidget.cpp.o
[19/46] Building CXX object src/plugins/multimedia/ffmpeg/CMakeFiles/QFFmpegMediaPlugin.dir/qffmpegsymbolsresolveutils.cpp.o
[20/46] Building CXX object src/multimediaquick/CMakeFiles/MultimediaQuickPrivate.dir/.rcc/qmlcache/MultimediaQuickPrivate_Video_qml.cpp.o
[21/46] Building CXX object src/plugins/multimedia/gstreamer/CMakeFiles/QGstreamerMediaPluginPrivate.dir/mediacapture/qgstreamercamera.cpp.o
[22/46] Building CXX object src/plugins/multimedia/ffmpeg/CMakeFiles/QFFmpegMediaPlugin.dir/qv4l2camera.cpp.o
[23/46] Building CXX object src/plugins/multimedia/ffmpeg/CMakeFiles/QFFmpegMediaPlugin.dir/qeglfsscreencapture.cpp.o
[24/46] Building CXX object src/plugins/multimedia/gstreamer/CMakeFiles/QGstreamerMediaPluginPrivate.dir/mediacapture/qgstreamermediacapture.cpp.o
[25/46] Building CXX object src/plugins/multimedia/gstreamer/CMakeFiles/QGstreamerMediaPluginPrivate.dir/common/qgstsubtitlesink.cpp.o
[26/46] Building CXX object src/plugins/multimedia/ffmpeg/CMakeFiles/QFFmpegMediaPlugin.dir/recordingengine/qffmpegvideoframeencoder.cpp.o
[27/46] Building CXX object src/plugins/multimedia/ffmpeg/CMakeFiles/QFFmpegMediaPlugin.dir/qv4l2cameradevices.cpp.o
[28/46] Building CXX object src/plugins/multimedia/ffmpeg/CMakeFiles/QFFmpegMediaPlugin.dir/qx11surfacecapture.cpp.o
[29/46] Building CXX object src/plugins/multimedia/gstreamer/CMakeFiles/QGstreamerMediaPluginPrivate.dir/qgstreamerintegration.cpp.o
[30/46] Building CXX object src/plugins/multimedia/ffmpeg/CMakeFiles/QFFmpegMediaPlugin.dir/qffmpeghwaccel_vaapi.cpp.o
[31/46] Building CXX object src/plugins/multimedia/gstreamer/CMakeFiles/QGstreamerMediaPluginPrivate.dir/qgstreamervideodevices.cpp.o
[32/46] Building CXX object src/plugins/multimedia/gstreamer/CMakeFiles/QGstreamerMediaPluginPrivate.dir/mediacapture/qgstreamermediaencoder.cpp.o
[33/46] Building CXX object src/plugins/multimedia/gstreamer/CMakeFiles/QGstreamerMediaPluginPrivate.dir/qgstreamerformatinfo.cpp.o
[34/46] Building CXX object src/plugins/multimedia/gstreamer/CMakeFiles/QGstreamerMediaPluginPrivate.dir/mediacapture/qgstreamerimagecapture.cpp.o
[35/46] Building CXX object src/multimediaquick/CMakeFiles/MultimediaQuickPrivate.dir/multimediaquickprivate_qmltyperegistrations.cpp.o
ninja: build stopped: subcommand failed.and here's the system info:
OS: Debian GNU/Linux 12 (bookworm) x86_64
,$$P'$$$. Kernel: 6.9.1 ',$$P ,ggs.
$$b: Uptime: 12 hours, 10 mins
d$$' ,$P"' . $$$ Packages: 5036 (dpkg), 42 (flatpak) $$P d$' , $$P Shell: bash 5.2.15 $$: $$. - ,d$$' Resolution: 3440x1440 $$; Y$b._ _,d$P' DE: Plasma 5.27.5 Y$$.
."Y$$$$P"' WM: kwin
$$b "-.__ Theme: [Plasma], Breeze [GTK3]
Y$$ Icons: [Plasma], breeze-dark [GTK2/3]
Y$$. Terminal: konsole
$$b. CPU: AMD Ryzen 9 5950X (32) @ 3.400GHz
Y$$b. GPU: AMD ATI Radeon RX 6700/6700 XT/6750 XT / 6800M/6850M XT
`"Y$b._ Memory: 18610MiB / 64220MiBCan anyone help me with this one, please??
-
Hi and welcome to devnet,
Which version of Qt are you trying to build ?
Why not use your distribution ffmpeg libraries ? -
Ffmpeg 7 changed a signature of a callback. Either use an older ffmpeg version or fix the callback signature by yourself - afair only a 'const' was added.
-
Hi and welcome to devnet,
Which version of Qt are you trying to build ?
Why not use your distribution ffmpeg libraries ?@SGaist Hello! Thank you for the welcome.
I'm rather new at building QT, I usually just use Debian and the provided Qt5 libraries. BUT, I am trying to get into Qt6 and KDE6 which is totally, completely, not usable inside the current Debian deb packages available. So I thought, "why not just build it?"
It turns out it's a bit more complicated than I originally thought :)
The reason I was using FFMpeg 7.x.x is because I was using it for another project and I already had the sources available in my projects folder, and actually compiled and ready to go. Unfortunately It sounds like those libraries won't work for me.
(I compiled FFMPEG 7.x.x. for access to newer AMD hardware encoding routines for my Radeon card.)
@Christian Ehrlicher - As I stated above :) I was just trying to use 7.x.x to make it work with what I had in-hand. I will be happy to use an earlier branch if that helps!!
This is a large project and there are a lot of gotchas. It's definitely been an experience and I definitely appreciate the guidance. I'll try with a recent 6.x.x version and see what happens!!
Thanks,
-Alisi -
@SGaist ; @Christian-Ehrlicher you guys are the best. FFMpeg-6.1.1 links and compiles with QT just fine!
Thank you very much again.