From df7aae6f1bc6470955e02df056ee0ee008b19662 Mon Sep 17 00:00:00 2001 From: mappu Date: Mon, 4 Nov 2024 23:15:10 +1300 Subject: [PATCH] qmultimedia: add support in genbindings --- cmd/genbindings/config-allowlist.go | 6 ++++ cmd/genbindings/config-libraries.go | 44 +++++++++++++++++++++++++++++ docker/genbindings.Dockerfile | 2 ++ 3 files changed, 52 insertions(+) diff --git a/cmd/genbindings/config-allowlist.go b/cmd/genbindings/config-allowlist.go index 5c7f8c96..4f966dfa 100644 --- a/cmd/genbindings/config-allowlist.go +++ b/cmd/genbindings/config-allowlist.go @@ -409,8 +409,14 @@ func AllowType(p CppParameter, isReturnType bool) error { "QPlatformWindow", // e.g. qwindow.h, as below "QPlatformSurface", // e.g. qsurface.h. as below "QPlatformMenu", // e.g. QMenu_PlatformMenu. Defined in the QPA, could probably expose as uintptr + "QPlatformMediaCaptureSession", // Qt 6 Multimedia qmediacapturesession.h + "QPlatformMediaRecorder", // Qt 6 Multimedia qmediarecorder.h + "QPlatformVideoSink", // Qt 6 Multimedia qvideosink.h "QTextDocument::ResourceProvider", // Qt 6 typedef for unsupported std::function "QTransform::Affine", // Qt 6 qtransform.h - public method returning private type + "QAbstractAudioBuffer", // Qt 5 Multimedia, this is a private/internal type only + "QAbstractVideoBuffer", // Works in Qt 5, but in Qt 6 Multimedia this type is used in qvideoframe.h but is not defined anywhere (it was later added in Qt 6.8) + "QRhi", // Qt 6 unstable types, used in Multimedia "____last____": return ErrTooComplex } diff --git a/cmd/genbindings/config-libraries.go b/cmd/genbindings/config-libraries.go index 78325d8c..5fc155fb 100644 --- a/cmd/genbindings/config-libraries.go +++ b/cmd/genbindings/config-libraries.go @@ -78,6 +78,22 @@ func ProcessLibraries(clangBin, outDir, extraLibsDir string) { ClangMatchSameHeaderDefinitionOnly, ) + generate( + "qt/multimedia", + []string{ + // Theoretically, QtMultimediaWidgets and QtMultimedia are different + // packages, but QtMultimedia qcamera.h has a dependency on qvideowidget. + // Bind them together since our base /qt/ package is Widgets anyway. + "/usr/include/x86_64-linux-gnu/qt5/QtMultimedia", + "/usr/include/x86_64-linux-gnu/qt5/QtMultimediaWidgets", + }, + AllowAllHeaders, + clangBin, + pkgConfigCflags("Qt5MultimediaWidgets"), + outDir, + ClangMatchSameHeaderDefinitionOnly, + ) + // Depends on QtCore/Gui/Widgets, QPrintSupport generate( "qt-restricted-extras/qscintilla", @@ -183,4 +199,32 @@ func ProcessLibraries(clangBin, outDir, extraLibsDir string) { outDir, ClangMatchSameHeaderDefinitionOnly, ) + + // Qt 6 QtMultimedia + generate( + "qt6/multimedia", + []string{ + "/usr/include/x86_64-linux-gnu/qt6/QtMultimedia", + "/usr/include/x86_64-linux-gnu/qt6/QtMultimediaWidgets", + }, + AllowAllHeaders, + clangBin, + "--std=c++17 "+pkgConfigCflags("Qt6MultimediaWidgets"), + outDir, + ClangMatchSameHeaderDefinitionOnly, + ) + + // Qt 6 Spatial Audio (on Debian this is a dependency of Qt6Multimedia) + generate( + "qt6/spatialaudio", + []string{ + "/usr/include/x86_64-linux-gnu/qt6/QtSpatialAudio", + }, + AllowAllHeaders, + clangBin, + "--std=c++17 "+pkgConfigCflags("Qt6SpatialAudio"), + outDir, + ClangMatchSameHeaderDefinitionOnly, + ) + } diff --git a/docker/genbindings.Dockerfile b/docker/genbindings.Dockerfile index 9286fef2..31898be3 100644 --- a/docker/genbindings.Dockerfile +++ b/docker/genbindings.Dockerfile @@ -4,7 +4,9 @@ RUN DEBIAN_FRONTEND=noninteractive apt-get update && \ apt-get install --no-install-recommends -qyy \ golang-go \ qtbase5-dev \ + qtmultimedia5-dev \ qt6-base-dev \ + qt6-multimedia-dev \ libqscintilla2-qt5-dev \ clang \ git \