[neon/forks/pyqt5/Neon/release-lts] /: New upstream version 5.15.0+dfsg

Dmitry Shachnev null at kde.org
Wed May 26 11:29:29 BST 2021


Git commit fb3cba80b68e4cabf62531fb65f356ac0b17ca33 by Dmitry Shachnev.
Committed on 01/06/2020 at 09:54.
Pushed by jriddell into branch 'Neon/release-lts'.

New upstream version 5.15.0+dfsg

M  +166  -0    ChangeLog
M  +8    -0    NEWS
M  +2    -2    PKG-INFO
M  +4    -0    __init__.py
M  +19   -4    configure.py
M  +29   -10   project.py
M  +2    -2    pyproject.toml
M  +3    -1    pyuic/uic/Compiler/qtproxies.py
M  +3    -2    pyuic/uic/__init__.py
M  +1    -5    qpy/QtCore/qpycore_qobject_helpers.cpp
M  +15   -0    sip/QtAndroidExtras/qandroidjniobject.sip
M  +1    -1    sip/QtCore/QtCoremod.sip
M  +51   -0    sip/QtCore/qbytearray.sip
M  +3    -0    sip/QtCore/qconcatenatetablesproxymodel.sip
M  +3    -0    sip/QtCore/qdatastream.sip
M  +5    -0    sip/QtCore/qdatetime.sip
M  +6    -0    sip/QtCore/qfile.sip
M  +3    -0    sip/QtCore/qfileinfo.sip
M  +2    -2    sip/QtCore/qglobal.sip
M  +6    -0    sip/QtCore/qidentityproxymodel.sip
M  +20   -0    sip/QtCore/qitemselectionmodel.sip
M  +3    -0    sip/QtCore/qmetaobject.sip
M  +17   -0    sip/QtCore/qmetatype.sip
M  +6    -0    sip/QtCore/qnamespace.sip
M  +114  -0    sip/QtCore/qpycore_qvector.sip
M  +6    -0    sip/QtCore/qresource.sip
M  +20   -0    sip/QtCore/qrunnable.sip
M  +12   -0    sip/QtCore/qsignalmapper.sip
M  +23   -0    sip/QtCore/qsortfilterproxymodel.sip
M  +3    -0    sip/QtCore/qthread.sip
M  +56   -0    sip/QtCore/qthreadpool.sip
M  +6    -0    sip/QtCore/qtranslator.sip
M  +1    -1    sip/QtCore/qwaitcondition.sip
M  +8    -2    sip/QtCore/qxmlstream.sip
M  +20   -0    sip/QtGui/qbrush.sip
M  +3    -0    sip/QtGui/qevent.sip
M  +9    -0    sip/QtGui/qpdfwriter.sip
M  +4    -4    sip/QtGui/qpolygon.sip
M  +3    -0    sip/QtGui/qscreen.sip
M  +8    -0    sip/QtGui/qwindow.sip
M  +2    -0    sip/QtHelp/QtHelpmod.sip
M  +3    -0    sip/QtHelp/qcompressedhelpinfo.sip
M  +22   -5    sip/QtHelp/qhelpenginecore.sip
M  +11   -0    sip/QtHelp/qhelpfilterengine.sip
C  +10   -12   sip/QtHelp/qhelpfiltersettingswidget.sip [from: sip/QtHelp/qcompressedhelpinfo.sip - 064% similarity]
M  +11   -0    sip/QtHelp/qhelpindexwidget.sip
C  +16   -2    sip/QtHelp/qhelplink.sip [from: sip/QtQuick/qsgmaterialrhishader.sip - 079% similarity]
M  +37   -0    sip/QtMultimedia/QtMultimediamod.sip
M  +61   -19   sip/QtMultimedia/qabstractvideosurface.sip
A  +58   -0    sip/QtMultimedia/qaudiodecodercontrol.sip
C  +12   -18   sip/QtMultimedia/qaudioencodersettingscontrol.sip [from: sip/QtCore/qwaitcondition.sip - 054% similarity]
C  +19   -16   sip/QtMultimedia/qaudioinputselectorcontrol.sip [from: sip/QtHelp/qcompressedhelpinfo.sip - 055% similarity]
C  +19   -16   sip/QtMultimedia/qaudiooutputselectorcontrol.sip [from: sip/QtHelp/qcompressedhelpinfo.sip - 054% similarity]
C  +15   -13   sip/QtMultimedia/qaudiorolecontrol.sip [from: sip/QtHelp/qcompressedhelpinfo.sip - 062% similarity]
M  +3    -0    sip/QtMultimedia/qcamera.sip
C  +14   -16   sip/QtMultimedia/qcameracapturebufferformatcontrol.sip [from: sip/QtHelp/qcompressedhelpinfo.sip - 057% similarity]
C  +14   -16   sip/QtMultimedia/qcameracapturedestinationcontrol.sip [from: sip/QtHelp/qcompressedhelpinfo.sip - 053% similarity]
A  +56   -0    sip/QtMultimedia/qcameracontrol.sip
A  +60   -0    sip/QtMultimedia/qcameraexposurecontrol.sip
A  +54   -0    sip/QtMultimedia/qcamerafeedbackcontrol.sip
C  +15   -11   sip/QtMultimedia/qcameraflashcontrol.sip [from: sip/QtQml/qqmlextensionplugin.sip - 059% similarity]
A  +49   -0    sip/QtMultimedia/qcamerafocuscontrol.sip
A  +48   -0    sip/QtMultimedia/qcameraimagecapturecontrol.sip
A  +57   -0    sip/QtMultimedia/qcameraimageprocessingcontrol.sip
C  +10   -11   sip/QtMultimedia/qcamerainfocontrol.sip [from: sip/QtQml/qqmlextensionplugin.sip - 065% similarity]
C  +15   -11   sip/QtMultimedia/qcameralockscontrol.sip [from: sip/QtQml/qqmlextensionplugin.sip - 056% similarity]
A  +63   -0    sip/QtMultimedia/qcameraviewfindersettingscontrol.sip
A  +49   -0    sip/QtMultimedia/qcamerazoomcontrol.sip
C  +14   -16   sip/QtMultimedia/qcustomaudiorolecontrol.sip [from: sip/QtHelp/qcompressedhelpinfo.sip - 061% similarity]
C  +12   -18   sip/QtMultimedia/qimageencodercontrol.sip [from: sip/QtCore/qwaitcondition.sip - 055% similarity]
C  +12   -9    sip/QtMultimedia/qmediaaudioprobecontrol.sip [from: sip/QtCore/qrunnable.sip - 068% similarity]
C  +12   -11   sip/QtMultimedia/qmediaavailabilitycontrol.sip [from: sip/QtQml/qqmlextensionplugin.sip - 064% similarity]
C  +12   -16   sip/QtMultimedia/qmediacontainercontrol.sip [from: sip/QtHelp/qcompressedhelpinfo.sip - 060% similarity]
C  +16   -26   sip/QtMultimedia/qmediagaplessplaybackcontrol.sip [from: sip/QtRemoteObjects/qremoteobjectreplica.sip - 053% similarity]
C  +13   -16   sip/QtMultimedia/qmedianetworkaccesscontrol.sip [from: sip/QtHelp/qcompressedhelpinfo.sip - 060% similarity]
M  +3    -0    sip/QtMultimedia/qmediaplayer.sip
A  +72   -0    sip/QtMultimedia/qmediaplayercontrol.sip
A  +56   -0    sip/QtMultimedia/qmediarecordercontrol.sip
C  +21   -23   sip/QtMultimedia/qmediastreamscontrol.sip [from: sip/QtRemoteObjects/qremoteobjectreplica.sip - 053% similarity]
C  +12   -9    sip/QtMultimedia/qmediavideoprobecontrol.sip [from: sip/QtCore/qrunnable.sip - 068% similarity]
C  +16   -16   sip/QtMultimedia/qmetadatareadercontrol.sip [from: sip/QtHelp/qcompressedhelpinfo.sip - 057% similarity]
C  +17   -26   sip/QtMultimedia/qmetadatawritercontrol.sip [from: sip/QtRemoteObjects/qremoteobjectreplica.sip - 053% similarity]
A  +52   -0    sip/QtMultimedia/qradiodatacontrol.sip
A  +73   -0    sip/QtMultimedia/qradiotunercontrol.sip
C  +18   -25   sip/QtMultimedia/qvideodeviceselectorcontrol.sip [from: sip/QtRemoteObjects/qremoteobjectreplica.sip - 053% similarity]
C  +12   -22   sip/QtMultimedia/qvideoencodersettingscontrol.sip [from: sip/QtHelp/qhelpfilterengine.sip - 050% similarity]
M  +3    -0    sip/QtMultimedia/qvideoframe.sip
C  +10   -9    sip/QtMultimedia/qvideorenderercontrol.sip [from: sip/QtCore/qrunnable.sip - 066% similarity]
A  +60   -0    sip/QtMultimedia/qvideowindowcontrol.sip
M  +1    -0    sip/QtMultimediaWidgets/QtMultimediaWidgetsmod.sip
M  +5    -0    sip/QtMultimediaWidgets/qgraphicsvideoitem.sip
M  +8    -2    sip/QtMultimediaWidgets/qvideowidget.sip
A  +54   -0    sip/QtMultimediaWidgets/qvideowidgetcontrol.sip
M  +3    -0    sip/QtNetwork/qabstractsocket.sip
M  +3    -0    sip/QtNetwork/qlocalsocket.sip
M  +6    -0    sip/QtNetwork/qnetworkaccessmanager.sip
M  +3    -0    sip/QtNetwork/qnetworkreply.sip
M  +20   -0    sip/QtNetwork/qnetworkrequest.sip
M  +10   -0    sip/QtNetwork/qsslcertificate.sip
M  +9    -0    sip/QtNetwork/qsslconfiguration.sip
M  +8    -0    sip/QtNetwork/qsslsocket.sip
M  +25   -9    sip/QtQml/qjsengine.sip
M  +2    -0    sip/QtQml/qqmlapplicationengine.sip
M  +16   -0    sip/QtQml/qqmlextensionplugin.sip
M  +3    -0    sip/QtQml/qqmlincubator.sip
M  +12   -0    sip/QtQml/qqmllist.sip
M  +3    -0    sip/QtQuick/qquickwindow.sip
M  +3    -0    sip/QtQuick/qsggeometry.sip
M  +102  -0    sip/QtQuick/qsgmaterialrhishader.sip
M  +17   -1    sip/QtQuick/qsgtexture.sip
C  +8    -5    sip/QtQuick3D/QtQuick3Dmod.sip [from: sip/QtXml/QtXmlmod.sip - 084% similarity]
C  +16   -2    sip/QtQuick3D/qquick3d.sip [from: sip/QtQuick/qsgmaterialrhishader.sip - 076% similarity]
A  +101  -0    sip/QtQuick3D/qquick3dgeometry.sip
A  +78   -0    sip/QtQuick3D/qquick3dobject.sip
M  +5    -0    sip/QtRemoteObjects/qremoteobjectnode.sip
M  +3    -0    sip/QtRemoteObjects/qremoteobjectreplica.sip
M  +11   -0    sip/QtSvg/qsvgrenderer.sip
M  +27   -0    sip/QtWebSockets/qwebsocket.sip
M  +12   -0    sip/QtWidgets/qbuttongroup.sip
M  +8    -0    sip/QtWidgets/qcombobox.sip
M  +5    -0    sip/QtWidgets/qpushbutton.sip
M  +3    -0    sip/QtWidgets/qsplashscreen.sip
M  +3    -0    sip/QtWidgets/qstyle.sip
M  +19   -0    sip/QtWidgets/qstyleoption.sip
M  +6    -0    sip/QtWidgets/qtabbar.sip
M  +6    -0    sip/QtWidgets/qtabwidget.sip
M  +5    -0    sip/QtWidgets/qwizard.sip
M  +1    -1    sip/QtXml/QtXmlmod.sip
M  +3    -0    sip/QtXml/qdom.sip

https://invent.kde.org/neon/forks/pyqt5/commit/fb3cba80b68e4cabf62531fb65f356ac0b17ca33

diff --git a/ChangeLog b/ChangeLog
index 637a3525..c8f3a325 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,171 @@
+2020-05-30  Phil Thompson  <phil at riverbankcomputing.com>
+
+	* NEWS:
+	Released as v5.15.0.
+	[5e7e90d17d36] [5.15.0]
+
+	* PyQt5.msp:
+	Added a missing private copy ctor.
+	[16609177df03]
+
+2020-05-29  Phil Thompson  <phil at riverbankcomputing.com>
+
+	* NEWS:
+	Updated the NEWS file.
+	[ca51bd410062]
+
+	* PyQt5.msp, lib/configure.py, lib/project.py:
+	Added the QtQuick3D module.
+	[089b9c6b4c44]
+
+2020-05-28  Phil Thompson  <phil at riverbankcomputing.com>
+
+	* PyQt5.msp:
+	Updated QtWebSockets, QtWidgets and QtXml for Qt v5.15.0.
+	[fe6404101c22]
+
+	* PyQt5.msp:
+	Updated QtQuick, QtRemoteObjects and QtSvg for Qt v5.15.0.
+	[fecc60c0fbb4]
+
+2020-05-27  Phil Thompson  <phil at riverbankcomputing.com>
+
+	* PyQt5.msp, lib/SubclassCode/QtQml.versions,
+	qpy/QtCore/qpycore_qvector.sip:
+	Updated QtMultimedia, QtMultimediaWidgets, QtNetwork and QtQml for
+	Qt v5.15.0.
+	[404a2ac8e061]
+
+	* PyQt5.msp, lib/SubclassCode/QtHelp.versions:
+	Updated QtGui and QtHelp for Qt v5.15.0.
+	[2b69e249eb5e]
+
+	* PyQt5.msp:
+	Updated QtCore for Qt v5.15.0.
+	[0f9c5a2e60af]
+
+2020-05-18  Phil Thompson  <phil at riverbankcomputing.com>
+
+	* QtAndroidExtras/qandroidjniobject.sip:
+	Fixes for the new callStaticMethod() overload.
+	[aab21130b519]
+
+	* NEWS, QtAndroidExtras/qandroidjniobject.sip:
+	Implemented the QAndroidJniObject.callStaticMethod() overload that
+	takes and returns a QJsonDocument.
+	[58a54fbe938b]
+
+2020-05-16  Phil Thompson  <phil at riverbankcomputing.com>
+
+	* PyQt5.msp:
+	Initial pass of Qt v5.15.0.
+	[5457742900e7]
+
+	* Merged the 5.14-maint branch.
+	[304e165b67aa]
+
+2020-05-09  Phil Thompson  <phil at riverbankcomputing.com>
+
+	* lib/pyproject.toml:
+	SIP v5.3 is now a minimum requirement.
+	[c88d94dfb85b] <5.14-maint>
+
+	* lib/pyproject.toml:
+	SIP v6 can be used as we don't use anything that will be removed.
+	[55ba9e69364a] <5.14-maint>
+
+	* lib/project.py:
+	Fix the ABI version of the sip module in anticipation of newer,
+	incompatible, versions.
+	[425fdef06f34] <5.14-maint>
+
+2020-05-07  Phil Thompson  <phil at riverbankcomputing.com>
+
+	* lib/__init__.py:
+	Added support for PyQt5 sub-packages (possibly the PyQt5.sip module)
+	that are built with setuptools rather than a modern pip.
+	[ddea00aec29a] <5.14-maint>
+
+	* PyQt5.msp:
+	Fixed memory leaks in the __getitem__ method of QPolygon, QPolygonF
+	and QXmlStreamAttributes.
+	[90e14744b854] <5.14-maint>
+
+2020-05-05  Phil Thompson  <phil at riverbankcomputing.com>
+
+	* PyQt5.msp:
+	Fixed QSGTexture.Filter.None.
+	[cfc9d0148a10] <5.14-maint>
+
+	* pyuic/uic/__init__.py:
+	Strengthened the warning at the top of .py files created by pyuic.
+	[00e1e859c348] <5.14-maint>
+
+2020-04-26  Phil Thompson  <phil at riverbankcomputing.com>
+
+	* PyQt5.msp:
+	Automatically convert QGradient to a sub-class if possible.
+	[dd812681dcc8] <5.14-maint>
+
+2020-04-22  Phil Thompson  <phil at riverbankcomputing.com>
+
+	* lib/pyproject.toml, rb-product:
+	Require a version of SIP with the race condition fix.
+	[2007cb6e7314] <5.14-maint>
+
+	* qpy/QtCore/qpycore_qobject_helpers.cpp:
+	Properly fixed the race condition. SIP v5.2.1 or later is also
+	required.
+	[9e9a0e6241e6] <5.14-maint>
+
+	* pyuic/uic/Compiler/qtproxies.py:
+	Added support for QUndoView to pyuic5.
+	[8cf7aa5ec0a2] <5.14-maint>
+
+2020-04-21  Phil Thompson  <phil at riverbankcomputing.com>
+
+	* PyQt5.msp:
+	Added the remaining QtMultimedia control classes.
+	[4089144a11e5] <5.14-maint>
+
+	* PyQt5.msp:
+	Added the remaining camera related control classes.
+	[b3848dbdaf58] <5.14-maint>
+
+	* PyQt5.msp, lib/SubclassCode/QtMultimedia.versions:
+	Implemented the first batch of QMultimedia control classes.
+	[294ec48d7628] <5.14-maint>
+
+	* PyQt5.msp:
+	Added QVideoWidgetControl to QtMultimediaWidgets.
+	[786636ae8eec] <5.14-maint>
+
+2020-04-20  Phil Thompson  <phil at riverbankcomputing.com>
+
+	* PyQt5.msp:
+	Added QtMutimedia.QMediaStreamsControl to see if it is useful.
+	[c7ca36894f1a] <5.14-maint>
+
+2020-04-18  Phil Thompson  <phil at riverbankcomputing.com>
+
+	* qpy/QtCore/qpycore_qobject_helpers.cpp:
+	Remove a potential race condition in qpycore_qobject_qt_metacall().
+	[897d3b6fd4c2] <5.14-maint>
+
+2020-04-08  Phil Thompson  <phil at riverbankcomputing.com>
+
+	* lib/project.py:
+	Build debug versions of the Designer and QML plugins and the DBus
+	module if any of the bindings modules ar ebeing built as debug
+	versions.
+	[46144794a070] <5.14-maint>
+
 2020-04-02  Phil Thompson  <phil at riverbankcomputing.com>
 
+	* .hgtags:
+	Added tag 5.14.2 for changeset f6efe33af484
+	[5feed10b3fc9] <5.14-maint>
+
 	* NEWS:
 	Released as v5.14.2.
 	[f6efe33af484] [5.14.2] <5.14-maint>
diff --git a/NEWS b/NEWS
index c7fe4e35..af2894b8 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,11 @@
+v5.15.0 1st June 2020
+  - Added support for Qt v5.15.0.
+  - Added the QtQuick3D module.
+  - Added a callStaticMethod() overload to QAndroidJniObject that takes a
+    QJsonDocument as the method argument and returns another QJsonDocument.
+  - Added the missing QMultimedia control classes.
+  - pyuic5 now supports QUndoView.
+
 v5.14.2 3rd April 2020
   - Added the missing QTextCodec.convertFromUnicode().
   - Added the OpenGL ES bindings.
diff --git a/PKG-INFO b/PKG-INFO
index cf0f42e2..29b613d8 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,13 +1,13 @@
 Metadata-Version: 2.1
 Name: PyQt5
-Version: 5.14.2
+Version: 5.15.0
 Requires-Python: >=3.5
 Summary: Python bindings for the Qt cross platform application toolkit
 Home-Page: https://www.riverbankcomputing.com/software/pyqt/
 Author: Riverbank Computing Limited
 Author-Email: info at riverbankcomputing.com
 License: GPL v3
-Requires-Dist: PyQt5-sip (>=12.7, <13)
+Requires-Dist: PyQt5-sip (>=12.8, <13)
 
 PyQt5 - Comprehensive Python Bindings for Qt v5
 ===============================================
diff --git a/__init__.py b/__init__.py
index 8ce6f217..6de6a05f 100644
--- a/__init__.py
+++ b/__init__.py
@@ -14,3 +14,7 @@
 # 
 # This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
 # WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+# Support PyQt5 sub-packages that have been created by setuptools.
+__path__ = __import__('pkgutil').extend_path(__path__, __name__)
diff --git a/configure.py b/configure.py
index 3b100b61..fdc86f23 100644
--- a/configure.py
+++ b/configure.py
@@ -28,8 +28,8 @@ import sys
 
 
 # Initialise the constants.
-PYQT_VERSION_STR = "5.14.2"
-SIP_MIN_VERSION = '4.19.20'
+PYQT_VERSION_STR = "5.15.0"
+SIP_MIN_VERSION = '4.19.23'
 
 
 class ModuleMetadata:
@@ -88,6 +88,7 @@ MODULE_METADATA = {
     'QtPrintSupport':       ModuleMetadata(qmake_QT=['printsupport']),
     'QtQml':                ModuleMetadata(qmake_QT=['qml'], qpy_lib=True),
     'QtQuick':              ModuleMetadata(qmake_QT=['quick'], qpy_lib=True),
+    'QtQuick3D':            ModuleMetadata(qmake_QT=['quick3d']),
     'QtQuickWidgets':       ModuleMetadata(qmake_QT=['quickwidgets']),
     'QtRemoteObjects':      ModuleMetadata(qmake_QT=['remoteobjects', '-gui']),
     'QtSensors':            ModuleMetadata(qmake_QT=['sensors']),
@@ -160,8 +161,8 @@ COMPOSITE_COMPONENTS = (
     'QtHelp', 'QtMultimediaWidgets', 'QtOpenGL',
         'QtPrintSupport', 'QtQuick', 'QtSql', 'QtSvg', 'QtTest',
     'QtWebKitWidgets', 'QtBluetooth', 'QtMacExtras', 'QtPositioning',
-        'QtWinExtras', 'QtX11Extras', 'QtQuickWidgets', 'QtWebSockets',
-        'Enginio', 'QtWebChannel',
+        'QtWinExtras', 'QtX11Extras', 'QtQuick3D', 'QtQuickWidgets',
+        'QtWebSockets', 'Enginio', 'QtWebChannel',
     'QtLocation', 'QtNfc', 'QtRemoteObjects'
 )
 
@@ -1353,6 +1354,9 @@ def check_modules(target_config, disabled_modules, verbose):
     if target_config.qt_version >= 0x050c00:
         check_5_12_modules(target_config, disabled_modules, verbose)
 
+    if target_config.qt_version >= 0x050f00:
+        check_5_15_modules(target_config, disabled_modules, verbose)
+
     # QtWebEngine needs to know if QtWebChannel is available.
     if 'QtWebChannel' not in target_config.pyqt_modules:
         target_config.pyqt_disabled_features.append('PyQt_WebChannel')
@@ -1482,6 +1486,17 @@ def check_5_12_modules(target_config, disabled_modules, verbose):
             'const char *v = QTREMOTEOBJECTS_VERSION_STR')
 
 
+def check_5_15_modules(target_config, disabled_modules, verbose):
+    """ Check which modules introduced in Qt v5.15 can be built and update the
+    target configuration accordingly.  target_config is the target
+    configuration.  disabled_modules is the list of modules that have been
+    explicitly disabled.  verbose is set if the output is to be displayed.
+    """
+
+    check_module(target_config, disabled_modules, verbose, 'QtQuick3D',
+            'qquick3d.h', 'QQuick3D::idealSurfaceFormat()')
+
+
 def generate_makefiles(target_config, verbose, parts, tracing, fatal_warnings, distinfo):
     """ Generate the makefiles to build everything.  target_config is the
     target configuration.  verbose is set if the output is to be displayed.
diff --git a/project.py b/project.py
index 8b24611d..338bd80e 100644
--- a/project.py
+++ b/project.py
@@ -33,7 +33,7 @@ class PyQt(PyQtProject):
     def __init__(self):
         """ Initialise the project. """
 
-        super().__init__(dunder_init=True, tag_prefix='Qt',
+        super().__init__(abi_version='12.8', dunder_init=True, tag_prefix='Qt',
                 console_scripts=[
                     'pylupdate5 = PyQt5.pylupdate_main:main',
                     'pyrcc5 = PyQt5.pyrcc_main:main',
@@ -44,7 +44,7 @@ class PyQt(PyQtProject):
             QtQml, QAxContainer, QtAndroidExtras, QtBluetooth, QtDBus,
             QtDesigner, Enginio, QtHelp, QtMacExtras, QtMultimedia,
             QtMultimediaWidgets, QtNetworkAuth, QtNfc, QtOpenGL, QtPositioning,
-            QtLocation, QtPrintSupport, QtQuick, QtQuickWidgets,
+            QtLocation, QtPrintSupport, QtQuick, QtQuick3D, QtQuickWidgets,
             QtRemoteObjects, QtSensors, QtSerialPort, QtSql, QtSvg, QtTest,
             QtWebChannel, QtWebKit, QtWebKitWidgets, QtWebSockets, QtWinExtras,
             QtX11Extras, QtXml, QtXmlPatterns, _QOpenGLFunctions_2_0,
@@ -189,20 +189,29 @@ del find_qt
         installable.files.append(os.path.join(self.root_dir, 'pyuic', 'uic'))
         self.installables.append(installable)
 
+        # If any set of bindings is being built as a debug version then assume
+        # the plugins and DBus support should as well.
+        for bindings in self.bindings.values():
+            if bindings.debug:
+                others_debug = True
+                break
+        else:
+            others_debug = self.py_debug
+
         # Add the plugins.  For the moment we don't include them in wheels.
         # This may change when we improve the bundling of Qt.
         if tool in ('build', 'install'):
             if self.designer_plugin and 'QtDesigner' in self.bindings:
                 self._add_plugin('designer', "Qt Designer", 'pyqt5',
-                        'designer')
+                        'designer', others_debug)
 
             if self.qml_plugin and 'QtQml' in self.bindings:
                 self._add_plugin('qmlscene', "qmlscene", 'pyqt5qmlplugin',
-                        'PyQt5')
+                        'PyQt5', others_debug)
 
         # Add the dbus-python support.
         if self.dbus_python:
-            self._add_dbus()
+            self._add_dbus(others_debug)
 
     def _add_composite_module(self, tool):
         """ Add the bindings for the composite module. """
@@ -224,7 +233,7 @@ del find_qt
 
         self.bindings['Qt'].sip_file = sip_file
 
-    def _add_dbus(self):
+    def _add_dbus(self, debug):
         """ Add the dbus-python support. """
 
         self.progress(
@@ -287,11 +296,11 @@ del find_qt
         buildable.include_dirs.extend(dbus_inc_dirs)
         buildable.library_dirs.extend(dbus_lib_dirs)
         buildable.libraries.extend(dbus_libs)
-        buildable.debug = self.py_debug
+        buildable.debug = debug
 
         self.buildables.append(buildable)
 
-    def _add_plugin(self, name, user_name, target_name, target_subdir):
+    def _add_plugin(self, name, user_name, target_name, target_subdir, debug):
         """ Add a plugin to the project buildables. """
 
         builder = self.builder
@@ -330,8 +339,7 @@ del find_qt
         with open(os.path.join(root_plugin_dir, name + '.pro-in')) as f:
             prj = f.read()
 
-        prj = prj.replace('@QTCONFIG@',
-                'debug' if self.py_debug else 'release')
+        prj = prj.replace('@QTCONFIG@', 'debug' if debug else 'release')
         prj = prj.replace('@PYINCDIR@',
                 builder.qmake_quote(self.py_include_dir))
         prj = prj.replace('@SIPINCDIR@', builder.qmake_quote(self.build_dir))
@@ -822,6 +830,17 @@ class QtQuick(PyQtBindings):
                 test_statement='new QQuickWindow()')
 
 
+class QtQuick3D(PyQtBindings):
+    """ The QtQuick3D bindings. """
+
+    def __init__(self, project):
+        """ Initialise the bindings. """
+
+        super().__init__(project, 'QtQuick3D', qmake_QT=['quick3d'],
+                test_headers=['qquick3d.h'],
+                test_statement='QQuick3D::idealSurfaceFormat()')
+
+
 class QtQuickWidgets(PyQtBindings):
     """ The QtQuickWidgets bindings. """
 
diff --git a/pyproject.toml b/pyproject.toml
index 7314e882..66917a68 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,12 +1,12 @@
 # Specify the build system requirements.
 [build-system]
-requires = ["sip >=5.0.1, <6", "PyQt-builder >=1.1.0, <2"]
+requires = ["sip >=5.3, <7", "PyQt-builder >=1.1.0, <2"]
 build-backend = "sipbuild.api"
 
 # Specify the PEP 566 metadata for the project.
 [tool.sip.metadata]
 name = "PyQt5"
-version = "5.14.2"
+version = "5.15.0"
 summary = "Python bindings for the Qt cross platform application toolkit"
 home-page = "https://www.riverbankcomputing.com/software/pyqt/"
 author = "Riverbank Computing Limited"
diff --git a/pyuic/uic/Compiler/qtproxies.py b/pyuic/uic/Compiler/qtproxies.py
index 551263f4..6fa866cc 100644
--- a/pyuic/uic/Compiler/qtproxies.py
+++ b/pyuic/uic/Compiler/qtproxies.py
@@ -1,6 +1,6 @@
 #############################################################################
 ##
-## Copyright (C) 2014 Riverbank Computing Limited.
+## Copyright (C) 2020 Riverbank Computing Limited.
 ## Copyright (C) 2006 Thorsten Marek.
 ## All right reserved.
 ##
@@ -416,6 +416,8 @@ class QtWidgets(ProxyNamespace):
             return QtWidgets.QHeaderView("%s.header()" % self,
                     False, (), noInstantiation=True)
 
+    class QUndoView(QListView): pass
+
     class QListWidgetItem(ProxyClass): pass
 
     class QListWidget(QListView):
diff --git a/pyuic/uic/__init__.py b/pyuic/uic/__init__.py
index 5173a758..edfbbb0e 100644
--- a/pyuic/uic/__init__.py
+++ b/pyuic/uic/__init__.py
@@ -1,6 +1,6 @@
 #############################################################################
 ##
-## Copyright (C) 2019 Riverbank Computing Limited.
+## Copyright (C) 2020 Riverbank Computing Limited.
 ## Copyright (C) 2006 Thorsten Marek.
 ## All right reserved.
 ##
@@ -49,7 +49,8 @@ _header = """# -*- coding: utf-8 -*-
 #
 # Created by: PyQt5 UI code generator %s
 #
-# WARNING! All changes made in this file will be lost!
+# WARNING: Any manual changes made to this file will be lost when pyuic5 is
+# run again.  Do not edit this file unless you know what you are doing.
 
 
 """
diff --git a/qpy/QtCore/qpycore_qobject_helpers.cpp b/qpy/QtCore/qpycore_qobject_helpers.cpp
index a03d9e62..ed9fd38d 100644
--- a/qpy/QtCore/qpycore_qobject_helpers.cpp
+++ b/qpy/QtCore/qpycore_qobject_helpers.cpp
@@ -64,11 +64,7 @@ int qpycore_qobject_qt_metacall(sipSimpleWrapper *pySelf, sipTypeDef *base,
     if (!pySelf)
         return -1;
 
-    SIP_BLOCK_THREADS
-    _id = qt_metacall_worker(pySelf, Py_TYPE(pySelf), base, _c, _id, _a);
-    SIP_UNBLOCK_THREADS
-
-    return _id;
+    return qt_metacall_worker(pySelf, Py_TYPE(pySelf), base, _c, _id, _a);
 }
 
 
diff --git a/sip/QtAndroidExtras/qandroidjniobject.sip b/sip/QtAndroidExtras/qandroidjniobject.sip
index 3e5fd60c..e1cfe75c 100644
--- a/sip/QtAndroidExtras/qandroidjniobject.sip
+++ b/sip/QtAndroidExtras/qandroidjniobject.sip
@@ -24,6 +24,7 @@ class QAndroidJniObject
 {
 %TypeHeaderCode
 #include <qandroidjniobject.h>
+#include <qjsondocument.h>
 %End
 
 public:
@@ -41,6 +42,20 @@ public:
         sipRes = QAndroidJniObject::callStaticMethod<int>(a0, a1);
 %End
 
+    static QJsonDocument callStaticMethod(const char *className, const char *methodName, const QJsonDocument &json);
+%MethodCode
+        QByteArray in = a2->toJson(QJsonDocument::Compact);
+        QAndroidJniObject jin = QAndroidJniObject::fromString(
+                QString::fromUtf8(in));
+
+        QAndroidJniObject jout = QAndroidJniObject::callStaticObjectMethod(a0,
+                a1, "(Ljava/lang/String;)Ljava/lang/String;",
+                jin.object<jstring>());
+
+        sipRes = new QJsonDocument(
+                QJsonDocument::fromJson(jout.toString().toUtf8()));
+%End
+
     bool isValid() const;
     QString toString() const;
 
diff --git a/sip/QtCore/QtCoremod.sip b/sip/QtCore/QtCoremod.sip
index 70d9aab0..61666495 100644
--- a/sip/QtCore/QtCoremod.sip
+++ b/sip/QtCore/QtCoremod.sip
@@ -22,7 +22,7 @@
 
 %Module(name=PyQt5.QtCore, call_super_init=True, default_VirtualErrorHandler=PyQt5, keyword_arguments="Optional", use_limited_api=True)
 
-%Timeline {Qt_5_0_0 Qt_5_0_1 Qt_5_0_2 Qt_5_1_0 Qt_5_1_1 Qt_5_2_0 Qt_5_2_1 Qt_5_3_0 Qt_5_3_1 Qt_5_3_2 Qt_5_4_0 Qt_5_4_1 Qt_5_4_2 Qt_5_5_0 Qt_5_5_1 Qt_5_6_0 Qt_5_6_1 Qt_5_6_2 Qt_5_6_3 Qt_5_6_4 Qt_5_6_5 Qt_5_6_6 Qt_5_6_7 Qt_5_6_8 Qt_5_6_9 Qt_5_7_0 Qt_5_7_1 Qt_5_8_0 Qt_5_8_1 Qt_5_9_0 Qt_5_9_1 Qt_5_9_2 Qt_5_9_3 Qt_5_9_4 Qt_5_9_5 Qt_5_9_6 Qt_5_9_7 Qt_5_9_8 Qt_5_9_9 Qt_5_10_0 Qt_5_10_1 Qt_5_11_0 Qt_5_11_1 Qt_5_11_2 Qt_5_11_3 Qt_5_12_0 Qt_5_12_1 Qt_5_12_2 Qt_5_12_3 Qt_5_12_4 Qt_5_13_0 Qt_5_14_0}
+%Timeline {Qt_5_0_0 Qt_5_0_1 Qt_5_0_2 Qt_5_1_0 Qt_5_1_1 Qt_5_2_0 Qt_5_2_1 Qt_5_3_0 Qt_5_3_1 Qt_5_3_2 Qt_5_4_0 Qt_5_4_1 Qt_5_4_2 Qt_5_5_0 Qt_5_5_1 Qt_5_6_0 Qt_5_6_1 Qt_5_6_2 Qt_5_6_3 Qt_5_6_4 Qt_5_6_5 Qt_5_6_6 Qt_5_6_7 Qt_5_6_8 Qt_5_6_9 Qt_5_7_0 Qt_5_7_1 Qt_5_8_0 Qt_5_8_1 Qt_5_9_0 Qt_5_9_1 Qt_5_9_2 Qt_5_9_3 Qt_5_9_4 Qt_5_9_5 Qt_5_9_6 Qt_5_9_7 Qt_5_9_8 Qt_5_9_9 Qt_5_10_0 Qt_5_10_1 Qt_5_11_0 Qt_5_11_1 Qt_5_11_2 Qt_5_11_3 Qt_5_12_0 Qt_5_12_1 Qt_5_12_2 Qt_5_12_3 Qt_5_12_4 Qt_5_13_0 Qt_5_14_0 Qt_5_15_0}
 
 %Platforms {WS_X11 WS_WIN WS_MACX}
 
diff --git a/sip/QtCore/qbytearray.sip b/sip/QtCore/qbytearray.sip
index d9a0a741..51440822 100644
--- a/sip/QtCore/qbytearray.sip
+++ b/sip/QtCore/qbytearray.sip
@@ -437,6 +437,12 @@ public:
         Base64UrlEncoding,
         KeepTrailingEquals,
         OmitTrailingEquals,
+%If (Qt_5_15_0 -)
+        IgnoreBase64DecodingErrors,
+%End
+%If (Qt_5_15_0 -)
+        AbortOnBase64DecodingErrors,
+%End
     };
 
 %End
@@ -473,6 +479,45 @@ public:
 %If (Qt_5_12_0 -)
     bool isLower() const;
 %End
+%If (Qt_5_15_0 -)
+
+    enum class Base64DecodingStatus
+    {
+        Ok,
+        IllegalInputLength,
+        IllegalCharacter,
+        IllegalPadding,
+    };
+
+%End
+%If (Qt_5_15_0 -)
+    static QByteArray::FromBase64Result fromBase64Encoding(const QByteArray &base64, QByteArray::Base64Options options = QByteArray::Base64Encoding);
+%End
+%If (Qt_5_15_0 -)
+
+    class FromBase64Result
+    {
+%TypeHeaderCode
+#include <qbytearray.h>
+%End
+
+    public:
+        QByteArray decoded;
+        QByteArray::Base64DecodingStatus decodingStatus;
+        void swap(QByteArray::FromBase64Result &other /Constrained/);
+        operator bool() const;
+%MethodCode
+            // This is required because SIP doesn't handle operator bool() properly.
+            sipRes = sipCpp->operator bool();
+%End
+
+        long __hash__() const;
+%MethodCode
+            sipRes = qHash(*sipCpp);
+%End
+    };
+
+%End
 };
 
 bool operator==(const QByteArray &a1, const QByteArray &a2);
@@ -493,3 +538,9 @@ quint16 qChecksum(const char *s /Array/, uint len /ArraySize/);
 %If (Qt_5_9_0 -)
 quint16 qChecksum(const char *s /Array/, uint len /ArraySize/, Qt::ChecksumType standard);
 %End
+%If (Qt_5_15_0 -)
+bool operator==(const QByteArray::FromBase64Result &lhs, const QByteArray::FromBase64Result &rhs);
+%End
+%If (Qt_5_15_0 -)
+bool operator!=(const QByteArray::FromBase64Result &lhs, const QByteArray::FromBase64Result &rhs);
+%End
diff --git a/sip/QtCore/qconcatenatetablesproxymodel.sip b/sip/QtCore/qconcatenatetablesproxymodel.sip
index d39acc25..1d45a0f8 100644
--- a/sip/QtCore/qconcatenatetablesproxymodel.sip
+++ b/sip/QtCore/qconcatenatetablesproxymodel.sip
@@ -88,6 +88,9 @@ public:
     virtual bool canDropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) const;
     virtual bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent);
     virtual QSize span(const QModelIndex &index) const;
+%If (Qt_5_15_0 -)
+    QList<QAbstractItemModel *> sourceModels() const;
+%End
 };
 
 %End
diff --git a/sip/QtCore/qdatastream.sip b/sip/QtCore/qdatastream.sip
index 67c1b765..4973bf83 100644
--- a/sip/QtCore/qdatastream.sip
+++ b/sip/QtCore/qdatastream.sip
@@ -87,6 +87,9 @@ public:
 %End
 %If (Qt_5_14_0 -)
         Qt_5_14,
+%End
+%If (Qt_5_15_0 -)
+        Qt_5_15,
 %End
     };
 
diff --git a/sip/QtCore/qdatetime.sip b/sip/QtCore/qdatetime.sip
index 96567da9..9d266397 100644
--- a/sip/QtCore/qdatetime.sip
+++ b/sip/QtCore/qdatetime.sip
@@ -179,8 +179,10 @@ public:
     qint64 toJulianDay() const;
     bool setDate(int year, int month, int date);
 %If (- Qt_5_7_0)
+%If (Qt_5_15_0 -)
     void getDate(int *year, int *month, int *day);
 %End
+%End
 %If (Qt_5_7_0 -)
     void getDate(int *year, int *month, int *day) const;
 %End
@@ -621,6 +623,9 @@ public:
     };
 
 %End
+%If (Qt_5_15_0 -)
+    QString toString(const QString &format, QCalendar cal) const;
+%End
 };
 
 QDataStream &operator<<(QDataStream &, const QDate & /Constrained/) /ReleaseGIL/;
diff --git a/sip/QtCore/qfile.sip b/sip/QtCore/qfile.sip
index 4a406abd..d565f83c 100644
--- a/sip/QtCore/qfile.sip
+++ b/sip/QtCore/qfile.sip
@@ -58,4 +58,10 @@ public:
     static QFileDevice::Permissions permissions(const QString &filename);
     virtual bool setPermissions(QFileDevice::Permissions permissionSpec);
     static bool setPermissions(const QString &filename, QFileDevice::Permissions permissionSpec);
+%If (Qt_5_15_0 -)
+    bool moveToTrash();
+%End
+%If (Qt_5_15_0 -)
+    static bool moveToTrash(const QString &fileName, QString *pathInTrash /Out/ = 0);
+%End
 };
diff --git a/sip/QtCore/qfileinfo.sip b/sip/QtCore/qfileinfo.sip
index 75fdca7b..d053bb10 100644
--- a/sip/QtCore/qfileinfo.sip
+++ b/sip/QtCore/qfileinfo.sip
@@ -104,6 +104,9 @@ public:
 %If (Qt_5_14_0 -)
     bool isShortcut() const;
 %End
+%If (Qt_5_15_0 -)
+    bool isJunction() const;
+%End
 };
 
 typedef QList<QFileInfo> QFileInfoList;
diff --git a/sip/QtCore/qglobal.sip b/sip/QtCore/qglobal.sip
index 613e50b8..ea9958c7 100644
--- a/sip/QtCore/qglobal.sip
+++ b/sip/QtCore/qglobal.sip
@@ -29,8 +29,8 @@ int PYQT_VERSION;
 const char *PYQT_VERSION_STR;
 
 %ModuleCode
-static int PYQT_VERSION = 0x050e02;
-static const char *PYQT_VERSION_STR = "5.14.2";
+static int PYQT_VERSION = 0x050f00;
+static const char *PYQT_VERSION_STR = "5.15.0";
 %End
 const int QT_VERSION;
 const char *QT_VERSION_STR;
diff --git a/sip/QtCore/qidentityproxymodel.sip b/sip/QtCore/qidentityproxymodel.sip
index 42f4cb97..fd1ccac6 100644
--- a/sip/QtCore/qidentityproxymodel.sip
+++ b/sip/QtCore/qidentityproxymodel.sip
@@ -51,4 +51,10 @@ public:
     virtual QVariant headerData(int section, Qt::Orientation orientation, int role) const;
 %End
     virtual QModelIndex sibling(int row, int column, const QModelIndex &idx) const;
+%If (Qt_5_15_0 -)
+    virtual bool moveRows(const QModelIndex &sourceParent, int sourceRow, int count, const QModelIndex &destinationParent, int destinationChild);
+%End
+%If (Qt_5_15_0 -)
+    virtual bool moveColumns(const QModelIndex &sourceParent, int sourceColumn, int count, const QModelIndex &destinationParent, int destinationChild);
+%End
 };
diff --git a/sip/QtCore/qitemselectionmodel.sip b/sip/QtCore/qitemselectionmodel.sip
index d237581f..29938265 100644
--- a/sip/QtCore/qitemselectionmodel.sip
+++ b/sip/QtCore/qitemselectionmodel.sip
@@ -94,10 +94,30 @@ public:
     virtual ~QItemSelectionModel();
     QModelIndex currentIndex() const;
     bool isSelected(const QModelIndex &index) const;
+%If (- Qt_5_15_0)
     bool isRowSelected(int row, const QModelIndex &parent) const;
+%End
+%If (Qt_5_15_0 -)
+    bool isRowSelected(int row, const QModelIndex &parent = QModelIndex()) const;
+%End
+%If (- Qt_5_15_0)
     bool isColumnSelected(int column, const QModelIndex &parent) const;
+%End
+%If (Qt_5_15_0 -)
+    bool isColumnSelected(int column, const QModelIndex &parent = QModelIndex()) const;
+%End
+%If (- Qt_5_15_0)
     bool rowIntersectsSelection(int row, const QModelIndex &parent) const;
+%End
+%If (Qt_5_15_0 -)
+    bool rowIntersectsSelection(int row, const QModelIndex &parent = QModelIndex()) const;
+%End
+%If (- Qt_5_15_0)
     bool columnIntersectsSelection(int column, const QModelIndex &parent) const;
+%End
+%If (Qt_5_15_0 -)
+    bool columnIntersectsSelection(int column, const QModelIndex &parent = QModelIndex()) const;
+%End
     QModelIndexList selectedIndexes() const;
     const QItemSelection selection() const;
 %If (Qt_5_5_0 -)
diff --git a/sip/QtCore/qmetaobject.sip b/sip/QtCore/qmetaobject.sip
index 8ac0b61d..7162230e 100644
--- a/sip/QtCore/qmetaobject.sip
+++ b/sip/QtCore/qmetaobject.sip
@@ -199,6 +199,9 @@ public:
 %If (Qt_5_14_0 -)
     int relativePropertyIndex() const;
 %End
+%If (Qt_5_15_0 -)
+    bool isRequired() const;
+%End
 };
 
 class QMetaClassInfo
diff --git a/sip/QtCore/qmetatype.sip b/sip/QtCore/qmetatype.sip
index 4e476ea8..6c84e67d 100644
--- a/sip/QtCore/qmetatype.sip
+++ b/sip/QtCore/qmetatype.sip
@@ -121,6 +121,9 @@ public:
 %End
 %If (Qt_5_12_0 -)
         QCborMap,
+%End
+%If (Qt_5_15_0 -)
+        QColorSpace,
 %End
         User,
     };
@@ -128,7 +131,12 @@ public:
     static int type(const char *typeName);
     static const char *typeName(int type);
     static bool isRegistered(int type);
+%If (- Qt_5_15_0)
     explicit QMetaType(const int type);
+%End
+%If (Qt_5_15_0 -)
+    explicit QMetaType(const int type = QMetaType::Type::UnknownType);
+%End
     ~QMetaType();
 
     enum TypeFlag
@@ -149,9 +157,18 @@ public:
 %If (Qt_5_13_0 -)
     int id() const;
 %End
+%If (Qt_5_15_0 -)
+    QByteArray name() const;
+%End
 
 private:
     QMetaType(const QMetaType &other);
 };
 
 QFlags<QMetaType::TypeFlag> operator|(QMetaType::TypeFlag f1, QFlags<QMetaType::TypeFlag> f2);
+%If (Qt_5_15_0 -)
+bool operator==(const QMetaType &a, const QMetaType &b);
+%End
+%If (Qt_5_15_0 -)
+bool operator!=(const QMetaType &a, const QMetaType &b);
+%End
diff --git a/sip/QtCore/qnamespace.sip b/sip/QtCore/qnamespace.sip
index 7c903dc6..88767a3c 100644
--- a/sip/QtCore/qnamespace.sip
+++ b/sip/QtCore/qnamespace.sip
@@ -1362,6 +1362,9 @@ namespace Qt
         MatchCaseSensitive,
         MatchWrap,
         MatchRecursive,
+%If (Qt_5_15_0 -)
+        MatchRegularExpression,
+%End
     };
 
     typedef QFlags<Qt::MatchFlag> MatchFlags;
@@ -1447,6 +1450,9 @@ namespace Qt
 %End
 %If (Qt_5_14_0 -)
         AA_DisableSessionManager,
+%End
+%If (Qt_5_15_0 -)
+        AA_DisableNativeVirtualKeyboard,
 %End
     };
 
diff --git a/sip/QtCore/qpycore_qvector.sip b/sip/QtCore/qpycore_qvector.sip
index f525f5ba..81d8be76 100644
--- a/sip/QtCore/qpycore_qvector.sip
+++ b/sip/QtCore/qpycore_qvector.sip
@@ -130,6 +130,120 @@ template<_TYPE_>
 };
 
 
+template<_TYPE_>
+%MappedType QVector<_TYPE_ *>
+        /TypeHintIn="Iterable[_TYPE_]", TypeHintOut="List[_TYPE_]",
+        TypeHintValue="[]"/
+{
+%TypeHeaderCode
+#include <qvector.h>
+%End
+
+%ConvertFromTypeCode
+    int gc_enabled = sipEnableGC(0);
+    PyObject *l = PyList_New(sipCpp->size());
+
+    if (l)
+    {
+        for (int i = 0; i < sipCpp->size(); ++i)
+        {
+            _TYPE_ *t = sipCpp->at(i);
+
+            // The explicit (void *) cast allows _TYPE_ to be const.
+            PyObject *tobj = sipConvertFromNewType((void *)t, sipType__TYPE_,
+                    sipTransferObj);
+
+            if (!tobj)
+            {
+                Py_DECREF(l);
+                l = 0;
+
+                break;
+            }
+
+            PyList_SetItem(l, i, tobj);
+        }
+    }
+
+    sipEnableGC(gc_enabled);
+
+    return l;
+%End
+
+%ConvertToTypeCode
+    PyObject *iter = PyObject_GetIter(sipPy);
+
+    if (!sipIsErr)
+    {
+        PyErr_Clear();
+        Py_XDECREF(iter);
+
+        return (iter
+#if PY_MAJOR_VERSION < 3
+                && !PyString_Check(sipPy)
+#endif
+                && !PyUnicode_Check(sipPy));
+    }
+
+    if (!iter)
+    {
+        *sipIsErr = 1;
+
+        return 0;
+    }
+
+    QVector<_TYPE_ *> *qv = new QVector<_TYPE_ *>;
+ 
+    for (Py_ssize_t i = 0; ; ++i)
+    {
+        PyErr_Clear();
+        PyObject *itm = PyIter_Next(iter);
+
+        if (!itm)
+        {
+            if (PyErr_Occurred())
+            {
+                delete qv;
+                Py_DECREF(iter);
+                *sipIsErr = 1;
+
+                return 0;
+            }
+
+            break;
+        }
+
+        _TYPE_ *t = reinterpret_cast<_TYPE_ *>(
+                sipForceConvertToType(itm, sipType__TYPE_, sipTransferObj, 0,
+                        0, sipIsErr));
+
+        if (*sipIsErr)
+        {
+            PyErr_Format(PyExc_TypeError,
+                    "index %zd has type '%s' but '_TYPE_' is expected", i,
+                    sipPyTypeName(Py_TYPE(itm)));
+
+            Py_DECREF(itm);
+            delete qv;
+            Py_DECREF(iter);
+
+            return 0;
+        }
+
+        qv->append(t);
+
+        Py_DECREF(itm);
+    }
+
+    Py_DECREF(iter);
+ 
+    *sipCppPtr = qv;
+ 
+    return sipGetState(sipTransferObj);
+%End
+};
+
+
 template<qreal, _TYPE_>
 %MappedType QVector<QPair<qreal, _TYPE_> >
         /TypeHintIn="Iterable[Tuple[float, _TYPE_]]",
diff --git a/sip/QtCore/qresource.sip b/sip/QtCore/qresource.sip
index 32adb203..347cc0b5 100644
--- a/sip/QtCore/qresource.sip
+++ b/sip/QtCore/qresource.sip
@@ -80,6 +80,12 @@ public:
 %If (Qt_5_13_0 -)
     QResource::Compression compressionAlgorithm() const;
 %End
+%If (Qt_5_15_0 -)
+    qint64 uncompressedSize() const;
+%End
+%If (Qt_5_15_0 -)
+    QByteArray uncompressedData() const;
+%End
 
 private:
     QResource(const QResource &);
diff --git a/sip/QtCore/qrunnable.sip b/sip/QtCore/qrunnable.sip
index bf0fe34e..c9de5721 100644
--- a/sip/QtCore/qrunnable.sip
+++ b/sip/QtCore/qrunnable.sip
@@ -32,4 +32,24 @@ public:
     virtual void run() = 0 /NewThread/;
     bool autoDelete() const;
     void setAutoDelete(bool _autoDelete);
+%If (Qt_5_15_0 -)
+    static QRunnable *create(SIP_PYCALLABLE functionToRun /KeepReference,TypeHint="Callable[[], None]"/) /Factory/;
+%MethodCode
+        sipRes = QRunnable::create([a0]() {
+            SIP_BLOCK_THREADS
+        
+            PyObject *res;
+        
+            res = PyObject_CallObject(a0, NULL);
+        
+            if (res)
+                Py_DECREF(res);
+            else
+                pyqt5_err_print();
+        
+            SIP_UNBLOCK_THREADS
+        });
+%End
+
+%End
 };
diff --git a/sip/QtCore/qsignalmapper.sip b/sip/QtCore/qsignalmapper.sip
index 5803ff8a..c0bdcaa5 100644
--- a/sip/QtCore/qsignalmapper.sip
+++ b/sip/QtCore/qsignalmapper.sip
@@ -50,6 +50,18 @@ signals:
     void mapped(const QString &);
     void mapped(QWidget *);
     void mapped(QObject *);
+%If (Qt_5_15_0 -)
+    void mappedInt(int);
+%End
+%If (Qt_5_15_0 -)
+    void mappedString(const QString &);
+%End
+%If (Qt_5_15_0 -)
+    void mappedWidget(QWidget *);
+%End
+%If (Qt_5_15_0 -)
+    void mappedObject(QObject *);
+%End
 
 public slots:
     void map();
diff --git a/sip/QtCore/qsortfilterproxymodel.sip b/sip/QtCore/qsortfilterproxymodel.sip
index c4ee314a..bdb090c4 100644
--- a/sip/QtCore/qsortfilterproxymodel.sip
+++ b/sip/QtCore/qsortfilterproxymodel.sip
@@ -114,4 +114,27 @@ public:
 
 protected:
     void invalidateFilter();
+
+signals:
+%If (Qt_5_15_0 -)
+    void dynamicSortFilterChanged(bool dynamicSortFilter);
+%End
+%If (Qt_5_15_0 -)
+    void filterCaseSensitivityChanged(Qt::CaseSensitivity filterCaseSensitivity);
+%End
+%If (Qt_5_15_0 -)
+    void sortCaseSensitivityChanged(Qt::CaseSensitivity sortCaseSensitivity);
+%End
+%If (Qt_5_15_0 -)
+    void sortLocaleAwareChanged(bool sortLocaleAware);
+%End
+%If (Qt_5_15_0 -)
+    void sortRoleChanged(int sortRole);
+%End
+%If (Qt_5_15_0 -)
+    void filterRoleChanged(int filterRole);
+%End
+%If (Qt_5_15_0 -)
+    void recursiveFilteringEnabledChanged(bool recursiveFilteringEnabled);
+%End
 };
diff --git a/sip/QtCore/qthread.sip b/sip/QtCore/qthread.sip
index 6ab15caf..16d7e7a6 100644
--- a/sip/QtCore/qthread.sip
+++ b/sip/QtCore/qthread.sip
@@ -61,6 +61,9 @@ public slots:
 
 public:
     bool wait(unsigned long msecs = ULONG_MAX) /ReleaseGIL/;
+%If (Qt_5_15_0 -)
+    bool wait(QDeadlineTimer deadline) [bool (QDeadlineTimer deadline = QDeadlineTimer(QDeadlineTimer::ForeverConstant::Forever))];
+%End
 
 signals:
     void started();
diff --git a/sip/QtCore/qthreadpool.sip b/sip/QtCore/qthreadpool.sip
index 960d5759..75063bd6 100644
--- a/sip/QtCore/qthreadpool.sip
+++ b/sip/QtCore/qthreadpool.sip
@@ -41,6 +41,34 @@ public:
         Py_END_ALLOW_THREADS
 %End
 
+%If (Qt_5_15_0 -)
+    void start(SIP_PYCALLABLE functionToRun /TypeHint="Callable[[], None]"/, int priority = 0) /ReleaseGIL/;
+%MethodCode
+        Py_INCREF(a0);
+        
+        Py_BEGIN_ALLOW_THREADS
+        
+        sipCpp->start([a0]() {
+            SIP_BLOCK_THREADS
+        
+            PyObject *res;
+        
+            res = PyObject_CallObject(a0, NULL);
+        
+            Py_DECREF(a0);
+        
+            if (res)
+                Py_DECREF(res);
+            else
+                pyqt5_err_print();
+        
+            SIP_UNBLOCK_THREADS
+        }, a1);
+        
+        Py_END_ALLOW_THREADS
+%End
+
+%End
     bool tryStart(QRunnable *runnable /GetWrapper/) /ReleaseGIL/;
 %MethodCode
         // We have to handle the object ownership manually.
@@ -52,6 +80,34 @@ public:
         Py_END_ALLOW_THREADS
 %End
 
+%If (Qt_5_15_0 -)
+    bool tryStart(SIP_PYCALLABLE functionToRun /TypeHint="Callable[[], None]"/) /ReleaseGIL/;
+%MethodCode
+        Py_INCREF(a0);
+        
+        Py_BEGIN_ALLOW_THREADS
+        
+        sipRes = sipCpp->tryStart([a0]() {
+            SIP_BLOCK_THREADS
+        
+            PyObject *res;
+        
+            res = PyObject_CallObject(a0, NULL);
+        
+            Py_DECREF(a0);
+        
+            if (res)
+                Py_DECREF(res);
+            else
+                pyqt5_err_print();
+        
+            SIP_UNBLOCK_THREADS
+        });
+        
+        Py_END_ALLOW_THREADS
+%End
+
+%End
 %If (Qt_5_9_0 -)
     bool tryTake(QRunnable *runnable /GetWrapper/) /ReleaseGIL/;
 %MethodCode
diff --git a/sip/QtCore/qtranslator.sip b/sip/QtCore/qtranslator.sip
index 638e3260..8bf070fd 100644
--- a/sip/QtCore/qtranslator.sip
+++ b/sip/QtCore/qtranslator.sip
@@ -34,4 +34,10 @@ public:
     bool load(const QString &fileName, const QString &directory = QString(), const QString &searchDelimiters = QString(), const QString &suffix = QString()) /ReleaseGIL/;
     bool load(const QLocale &locale, const QString &fileName, const QString &prefix = QString(), const QString &directory = QString(), const QString &suffix = QString()) /ReleaseGIL/;
     bool load(const uchar *data /Array/, int len /ArraySize/, const QString &directory = QString()) /PyName=loadFromData,ReleaseGIL/;
+%If (Qt_5_15_0 -)
+    QString language() const;
+%End
+%If (Qt_5_15_0 -)
+    QString filePath() const;
+%End
 };
diff --git a/sip/QtCore/qwaitcondition.sip b/sip/QtCore/qwaitcondition.sip
index 7a687a3b..4d2edb70 100644
--- a/sip/QtCore/qwaitcondition.sip
+++ b/sip/QtCore/qwaitcondition.sip
@@ -30,10 +30,10 @@ public:
     QWaitCondition();
     ~QWaitCondition();
     bool wait(QMutex *mutex, unsigned long msecs = ULONG_MAX) /ReleaseGIL/;
-    bool wait(QReadWriteLock *readWriteLock, unsigned long msecs = ULONG_MAX) /ReleaseGIL/;
 %If (Qt_5_12_0 -)
     bool wait(QMutex *lockedMutex, QDeadlineTimer deadline) /ReleaseGIL/;
 %End
+    bool wait(QReadWriteLock *readWriteLock, unsigned long msecs = ULONG_MAX) /ReleaseGIL/;
 %If (Qt_5_12_0 -)
     bool wait(QReadWriteLock *lockedReadWriteLock, QDeadlineTimer deadline) /ReleaseGIL/;
 %End
diff --git a/sip/QtCore/qxmlstream.sip b/sip/QtCore/qxmlstream.sip
index 6b1df359..3ea60fbb 100644
--- a/sip/QtCore/qxmlstream.sip
+++ b/sip/QtCore/qxmlstream.sip
@@ -117,7 +117,7 @@ Py_ssize_t idx = sipConvertFromSequenceIndex(a0, sipCpp->count());
 if (idx < 0)
     sipIsErr = 1;
 else
-    sipRes = new QXmlStreamAttribute(sipCpp->operator[]((int)idx));
+    sipRes = &sipCpp->operator[]((int)idx);
 %End
 
 // Some additional Python special methods.
@@ -191,7 +191,7 @@ else
 }
 %End
 
-QXmlStreamAttributes &operator[](SIP_PYSLICE slice);
+QXmlStreamAttributes operator[](SIP_PYSLICE slice);
 %MethodCode
 Py_ssize_t start, stop, step, slicelength;
 
@@ -386,6 +386,12 @@ public:
     QXmlStreamEntityResolver *entityResolver() const;
     bool readNextStartElement();
     void skipCurrentElement();
+%If (Qt_5_15_0 -)
+    int entityExpansionLimit() const;
+%End
+%If (Qt_5_15_0 -)
+    void setEntityExpansionLimit(int limit);
+%End
 
 private:
     QXmlStreamReader(const QXmlStreamReader &);
diff --git a/sip/QtGui/qbrush.sip b/sip/QtGui/qbrush.sip
index 2815d932..1db70b3c 100644
--- a/sip/QtGui/qbrush.sip
+++ b/sip/QtGui/qbrush.sip
@@ -123,6 +123,26 @@ class QGradient
 #include <qbrush.h>
 %End
 
+%ConvertToSubClassCode
+    switch (sipCpp->type())
+    {
+    case QGradient::ConicalGradient:
+        sipType = sipType_QConicalGradient;
+        break;
+    
+    case QGradient::LinearGradient:
+        sipType = sipType_QLinearGradient;
+        break;
+    
+    case QGradient::RadialGradient:
+        sipType = sipType_QRadialGradient;
+        break;
+    
+    default:
+        sipType = 0;
+    }
+%End
+
 public:
     enum CoordinateMode
     {
diff --git a/sip/QtGui/qevent.sip b/sip/QtGui/qevent.sip
index be5aef23..ccb23612 100644
--- a/sip/QtGui/qevent.sip
+++ b/sip/QtGui/qevent.sip
@@ -352,6 +352,9 @@ public:
 %If (Qt_5_4_0 -)
     Qt::MouseButtons buttons() const;
 %End
+%If (Qt_5_15_0 -)
+    QTabletEvent::TabletDevice deviceType() const;
+%End
 };
 
 class QKeyEvent : QInputEvent
diff --git a/sip/QtGui/qpdfwriter.sip b/sip/QtGui/qpdfwriter.sip
index 855181f1..1e2732df 100644
--- a/sip/QtGui/qpdfwriter.sip
+++ b/sip/QtGui/qpdfwriter.sip
@@ -56,6 +56,15 @@ public:
 %If (Qt_5_10_0 -)
     QPagedPaintDevice::PdfVersion pdfVersion() const;
 %End
+%If (Qt_5_15_0 -)
+    void setDocumentXmpMetadata(const QByteArray &xmpMetadata);
+%End
+%If (Qt_5_15_0 -)
+    QByteArray documentXmpMetadata() const;
+%End
+%If (Qt_5_15_0 -)
+    void addFileAttachment(const QString &fileName, const QByteArray &data, const QString &mimeType = QString());
+%End
 
 private:
     QPdfWriter(const QPdfWriter &);
diff --git a/sip/QtGui/qpolygon.sip b/sip/QtGui/qpolygon.sip
index 0cf6f491..00b3b65f 100644
--- a/sip/QtGui/qpolygon.sip
+++ b/sip/QtGui/qpolygon.sip
@@ -218,7 +218,7 @@ Py_ssize_t idx = sipConvertFromSequenceIndex(a0, sipCpp->count());
 if (idx < 0)
     sipIsErr = 1;
 else
-    sipRes = new QPoint(sipCpp->operator[]((int)idx));
+    sipRes = &sipCpp->operator[]((int)idx);
 %End
 
 // Some additional Python special methods.
@@ -292,7 +292,7 @@ else
 }
 %End
 
-QPolygon &operator[](SIP_PYSLICE slice);
+QPolygon operator[](SIP_PYSLICE slice);
 %MethodCode
 Py_ssize_t start, stop, step, slicelength;
 
@@ -404,7 +404,7 @@ Py_ssize_t idx = sipConvertFromSequenceIndex(a0, sipCpp->count());
 if (idx < 0)
     sipIsErr = 1;
 else
-    sipRes = new QPointF(sipCpp->operator[]((int)idx));
+    sipRes = &sipCpp->operator[]((int)idx);
 %End
 
 // Some additional Python special methods.
@@ -478,7 +478,7 @@ else
 }
 %End
 
-QPolygonF &operator[](SIP_PYSLICE slice);
+QPolygonF operator[](SIP_PYSLICE slice);
 %MethodCode
 Py_ssize_t start, stop, step, slicelength;
 
diff --git a/sip/QtGui/qscreen.sip b/sip/QtGui/qscreen.sip
index b30eeaf9..94daa85a 100644
--- a/sip/QtGui/qscreen.sip
+++ b/sip/QtGui/qscreen.sip
@@ -87,6 +87,9 @@ public:
 %If (Qt_5_9_0 -)
     QString serialNumber() const;
 %End
+%If (Qt_5_15_0 -)
+    QScreen *virtualSiblingAt(QPoint point);
+%End
 
 private:
     QScreen(const QScreen &);
diff --git a/sip/QtGui/qwindow.sip b/sip/QtGui/qwindow.sip
index 858cabe5..1e059511 100644
--- a/sip/QtGui/qwindow.sip
+++ b/sip/QtGui/qwindow.sip
@@ -238,4 +238,12 @@ public:
 %If (Qt_5_10_0 -)
     void setWindowStates(Qt::WindowStates states);
 %End
+
+public slots:
+%If (Qt_5_15_0 -)
+    bool startSystemResize(Qt::Edges edges);
+%End
+%If (Qt_5_15_0 -)
+    bool startSystemMove();
+%End
 };
diff --git a/sip/QtHelp/QtHelpmod.sip b/sip/QtHelp/QtHelpmod.sip
index ce65d39d..1ee69740 100644
--- a/sip/QtHelp/QtHelpmod.sip
+++ b/sip/QtHelp/QtHelpmod.sip
@@ -53,7 +53,9 @@ WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 %Include qhelpenginecore.sip
 %Include qhelpfilterdata.sip
 %Include qhelpfilterengine.sip
+%Include qhelpfiltersettingswidget.sip
 %Include qhelpindexwidget.sip
+%Include qhelplink.sip
 %Include qhelpsearchengine.sip
 %Include qhelpsearchquerywidget.sip
 %Include qhelpsearchresultwidget.sip
diff --git a/sip/QtHelp/qcompressedhelpinfo.sip b/sip/QtHelp/qcompressedhelpinfo.sip
index ea4d0a9f..e7b61d3b 100644
--- a/sip/QtHelp/qcompressedhelpinfo.sip
+++ b/sip/QtHelp/qcompressedhelpinfo.sip
@@ -37,6 +37,9 @@ public:
     QString component() const;
     QVersionNumber version() const;
     static QCompressedHelpInfo fromCompressedHelpFile(const QString &documentationFileName);
+%If (Qt_5_15_0 -)
+    bool isNull() const;
+%End
 };
 
 %End
diff --git a/sip/QtHelp/qhelpenginecore.sip b/sip/QtHelp/qhelpenginecore.sip
index 33289451..534471c9 100644
--- a/sip/QtHelp/qhelpenginecore.sip
+++ b/sip/QtHelp/qhelpenginecore.sip
@@ -34,16 +34,21 @@ class QHelpEngineCore : QObject
     } graph[] = {
         {sipName_QHelpContentModel, &sipType_QHelpContentModel, -1, 1},
         {sipName_QHelpContentWidget, &sipType_QHelpContentWidget, -1, 2},
-        {sipName_QHelpEngineCore, &sipType_QHelpEngineCore, 9, 3},
+        {sipName_QHelpEngineCore, &sipType_QHelpEngineCore, 10, 3},
     #if QT_VERSION >= 0x050d00
         {sipName_QHelpFilterEngine, &sipType_QHelpFilterEngine, -1, 4},
     #else
         {0, 0, -1, 4},
     #endif
-        {sipName_QHelpIndexModel, &sipType_QHelpIndexModel, -1, 5},
-        {sipName_QHelpIndexWidget, &sipType_QHelpIndexWidget, -1, 6},
-        {sipName_QHelpSearchEngine, &sipType_QHelpSearchEngine, -1, 7},
-        {sipName_QHelpSearchQueryWidget, &sipType_QHelpSearchQueryWidget, -1, 8},
+    #if QT_VERSION >= 0x050f00
+        {sipName_QHelpFilterSettingsWidget, &sipType_QHelpFilterSettingsWidget, -1, 5},
+    #else
+        {0, 0, -1, 5},
+    #endif
+        {sipName_QHelpIndexModel, &sipType_QHelpIndexModel, -1, 6},
+        {sipName_QHelpIndexWidget, &sipType_QHelpIndexWidget, -1, 7},
+        {sipName_QHelpSearchEngine, &sipType_QHelpSearchEngine, -1, 8},
+        {sipName_QHelpSearchQueryWidget, &sipType_QHelpSearchQueryWidget, -1, 9},
         {sipName_QHelpSearchResultWidget, &sipType_QHelpSearchResultWidget, -1, -1},
         {sipName_QHelpEngine, &sipType_QHelpEngine, -1, -1},
     };
@@ -124,4 +129,16 @@ public:
 %If (Qt_5_13_0 -)
     bool usesFilterEngine() const;
 %End
+%If (Qt_5_15_0 -)
+    QList<QHelpLink> documentsForIdentifier(const QString &id) const;
+%End
+%If (Qt_5_15_0 -)
+    QList<QHelpLink> documentsForIdentifier(const QString &id, const QString &filterName) const;
+%End
+%If (Qt_5_15_0 -)
+    QList<QHelpLink> documentsForKeyword(const QString &keyword) const;
+%End
+%If (Qt_5_15_0 -)
+    QList<QHelpLink> documentsForKeyword(const QString &keyword, const QString &filterName) const;
+%End
 };
diff --git a/sip/QtHelp/qhelpfilterengine.sip b/sip/QtHelp/qhelpfilterengine.sip
index c89ffefa..53143f12 100644
--- a/sip/QtHelp/qhelpfilterengine.sip
+++ b/sip/QtHelp/qhelpfilterengine.sip
@@ -45,6 +45,17 @@ signals:
 
 protected:
     virtual ~QHelpFilterEngine();
+
+public:
+%If (Qt_5_15_0 -)
+    QList<QVersionNumber> availableVersions() const;
+%End
+%If (Qt_5_15_0 -)
+    QStringList indices() const;
+%End
+%If (Qt_5_15_0 -)
+    QStringList indices(const QString &filterName) const;
+%End
 };
 
 %End
diff --git a/sip/QtHelp/qcompressedhelpinfo.sip b/sip/QtHelp/qhelpfiltersettingswidget.sip
similarity index 64%
copy from sip/QtHelp/qcompressedhelpinfo.sip
copy to sip/QtHelp/qhelpfiltersettingswidget.sip
index ea4d0a9f..98e38411 100644
--- a/sip/QtHelp/qcompressedhelpinfo.sip
+++ b/sip/QtHelp/qhelpfiltersettingswidget.sip
@@ -1,4 +1,4 @@
-// qcompressedhelpinfo.sip generated by MetaSIP
+// qhelpfiltersettingswidget.sip generated by MetaSIP
 //
 // This file is part of the QtHelp Python extension module.
 //
@@ -20,23 +20,21 @@
 // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 
 
-%If (Qt_5_13_0 -)
+%If (Qt_5_15_0 -)
 
-class QCompressedHelpInfo
+class QHelpFilterSettingsWidget : QWidget
 {
 %TypeHeaderCode
-#include <qcompressedhelpinfo.h>
+#include <qhelpfiltersettingswidget.h>
 %End
 
 public:
-    QCompressedHelpInfo();
-    QCompressedHelpInfo(const QCompressedHelpInfo &other);
-    ~QCompressedHelpInfo();
-    void swap(QCompressedHelpInfo &other);
-    QString namespaceName() const;
-    QString component() const;
-    QVersionNumber version() const;
-    static QCompressedHelpInfo fromCompressedHelpFile(const QString &documentationFileName);
+    explicit QHelpFilterSettingsWidget(QWidget *parent /TransferThis/ = 0);
+    virtual ~QHelpFilterSettingsWidget();
+    void setAvailableComponents(const QStringList &components);
+    void setAvailableVersions(const QList<QVersionNumber> &versions);
+    void readSettings(const QHelpFilterEngine *filterEngine);
+    bool applySettings(QHelpFilterEngine *filterEngine) const;
 };
 
 %End
diff --git a/sip/QtHelp/qhelpindexwidget.sip b/sip/QtHelp/qhelpindexwidget.sip
index a1e33700..da406532 100644
--- a/sip/QtHelp/qhelpindexwidget.sip
+++ b/sip/QtHelp/qhelpindexwidget.sip
@@ -27,6 +27,9 @@ class QHelpIndexModel : QStringListModel /NoDefaultCtors/
 %End
 
 public:
+%If (Qt_5_15_0 -)
+    QHelpEngineCore *helpEngine() const;
+%End
     void createIndex(const QString &customFilterName);
     QModelIndex filter(const QString &filter, const QString &wildcard = QString());
     QMap<QString, QUrl> linksForKeyword(const QString &keyword) const;
@@ -54,6 +57,14 @@ public slots:
     void filterIndices(const QString &filter, const QString &wildcard = QString());
     void activateCurrentItem();
 
+signals:
+%If (Qt_5_15_0 -)
+    void documentActivated(const QHelpLink &document, const QString &keyword);
+%End
+%If (Qt_5_15_0 -)
+    void documentsActivated(const QList<QHelpLink> &documents, const QString &keyword);
+%End
+
 private:
     QHelpIndexWidget();
 };
diff --git a/sip/QtQuick/qsgmaterialrhishader.sip b/sip/QtHelp/qhelplink.sip
similarity index 79%
copy from sip/QtQuick/qsgmaterialrhishader.sip
copy to sip/QtHelp/qhelplink.sip
index 2723d5cc..ba17c51d 100644
--- a/sip/QtQuick/qsgmaterialrhishader.sip
+++ b/sip/QtHelp/qhelplink.sip
@@ -1,6 +1,6 @@
-// qsgmaterialrhishader.sip generated by MetaSIP
+// qhelplink.sip generated by MetaSIP
 //
-// This file is part of the QtQuick Python extension module.
+// This file is part of the QtHelp Python extension module.
 //
 // Copyright (c) 2020 Riverbank Computing Limited <info at riverbankcomputing.com>
 // 
@@ -19,3 +19,17 @@
 // This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
 // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 
+
+%If (Qt_5_15_0 -)
+
+struct QHelpLink
+{
+%TypeHeaderCode
+#include <qhelplink.h>
+%End
+
+    QUrl url;
+    QString title;
+};
+
+%End
diff --git a/sip/QtMultimedia/QtMultimediamod.sip b/sip/QtMultimedia/QtMultimediamod.sip
index c541b6ec..bc6c8fbd 100644
--- a/sip/QtMultimedia/QtMultimediamod.sip
+++ b/sip/QtMultimedia/QtMultimediamod.sip
@@ -53,37 +53,74 @@ WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 %Include qaudio.sip
 %Include qaudiobuffer.sip
 %Include qaudiodecoder.sip
+%Include qaudiodecodercontrol.sip
 %Include qaudiodeviceinfo.sip
+%Include qaudioencodersettingscontrol.sip
 %Include qaudioformat.sip
 %Include qaudioinput.sip
+%Include qaudioinputselectorcontrol.sip
 %Include qaudiooutput.sip
+%Include qaudiooutputselectorcontrol.sip
 %Include qaudioprobe.sip
 %Include qaudiorecorder.sip
+%Include qaudiorolecontrol.sip
 %Include qcamera.sip
+%Include qcameracapturebufferformatcontrol.sip
+%Include qcameracapturedestinationcontrol.sip
+%Include qcameracontrol.sip
 %Include qcameraexposure.sip
+%Include qcameraexposurecontrol.sip
+%Include qcamerafeedbackcontrol.sip
+%Include qcameraflashcontrol.sip
 %Include qcamerafocus.sip
+%Include qcamerafocuscontrol.sip
 %Include qcameraimagecapture.sip
+%Include qcameraimagecapturecontrol.sip
 %Include qcameraimageprocessing.sip
+%Include qcameraimageprocessingcontrol.sip
 %Include qcamerainfo.sip
+%Include qcamerainfocontrol.sip
+%Include qcameralockscontrol.sip
 %Include qcameraviewfindersettings.sip
+%Include qcameraviewfindersettingscontrol.sip
+%Include qcamerazoomcontrol.sip
+%Include qcustomaudiorolecontrol.sip
+%Include qimageencodercontrol.sip
+%Include qmediaaudioprobecontrol.sip
+%Include qmediaavailabilitycontrol.sip
 %Include qmediabindableinterface.sip
+%Include qmediacontainercontrol.sip
 %Include qmediacontent.sip
 %Include qmediacontrol.sip
 %Include qmediaencodersettings.sip
+%Include qmediagaplessplaybackcontrol.sip
 %Include qmediametadata.sip
+%Include qmedianetworkaccesscontrol.sip
 %Include qmediaobject.sip
 %Include qmediaplayer.sip
+%Include qmediaplayercontrol.sip
 %Include qmediaplaylist.sip
 %Include qmediarecorder.sip
+%Include qmediarecordercontrol.sip
 %Include qmediaresource.sip
 %Include qmediaservice.sip
+%Include qmediastreamscontrol.sip
 %Include qmediatimerange.sip
+%Include qmediavideoprobecontrol.sip
+%Include qmetadatareadercontrol.sip
+%Include qmetadatawritercontrol.sip
 %Include qmultimedia.sip
 %Include qradiodata.sip
+%Include qradiodatacontrol.sip
 %Include qradiotuner.sip
+%Include qradiotunercontrol.sip
 %Include qsound.sip
 %Include qsoundeffect.sip
+%Include qvideodeviceselectorcontrol.sip
+%Include qvideoencodersettingscontrol.sip
 %Include qvideoframe.sip
 %Include qvideoprobe.sip
+%Include qvideorenderercontrol.sip
 %Include qvideosurfaceformat.sip
+%Include qvideowindowcontrol.sip
 %Include qpymultimedia_qlist.sip
diff --git a/sip/QtMultimedia/qabstractvideosurface.sip b/sip/QtMultimedia/qabstractvideosurface.sip
index 4fcd9ff9..b1f0a508 100644
--- a/sip/QtMultimedia/qabstractvideosurface.sip
+++ b/sip/QtMultimedia/qabstractvideosurface.sip
@@ -32,32 +32,74 @@ class QAbstractVideoSurface : QObject
         sipTypeDef **type;
         int yes, no;
     } graph[] = {
-        {sipName_QSound, &sipType_QSound, -1, 1},
-        {sipName_QCameraImageProcessing, &sipType_QCameraImageProcessing, -1, 2},
-        {sipName_QVideoProbe, &sipType_QVideoProbe, -1, 3},
-        {sipName_QCameraExposure, &sipType_QCameraExposure, -1, 4},
-        {sipName_QAudioInput, &sipType_QAudioInput, -1, 5},
     #if QT_VERSION >= 0x050500
-        {sipName_QAbstractVideoFilter, &sipType_QAbstractVideoFilter, -1, 6},
+        {sipName_QAbstractVideoFilter, &sipType_QAbstractVideoFilter, -1, 1},
     #else
-        {0, 0, -1, 6},
+        {0, 0, -1, 1},
     #endif
-        {sipName_QMediaObject, &sipType_QMediaObject, 18, 7},
-        {sipName_QMediaRecorder, &sipType_QMediaRecorder, 22, 8},
-        {sipName_QSoundEffect, &sipType_QSoundEffect, -1, 9},
-        {sipName_QCameraImageCapture, &sipType_QCameraImageCapture, -1, 10},
-        {sipName_QAbstractVideoSurface, &sipType_QAbstractVideoSurface, -1, 11},
-        {sipName_QAudioOutput, &sipType_QAudioOutput, -1, 12},
-        {sipName_QCameraFocus, &sipType_QCameraFocus, -1, 13},
+        {sipName_QAbstractVideoSurface, &sipType_QAbstractVideoSurface, -1, 2},
+        {sipName_QMediaObject, &sipType_QMediaObject, 18, 3},
+        {sipName_QMediaControl, &sipType_QMediaControl, 22, 4},
+        {sipName_QAudioInput, &sipType_QAudioInput, -1, 5},
+        {sipName_QAudioOutput, &sipType_QAudioOutput, -1, 6},
+        {sipName_QAudioProbe, &sipType_QAudioProbe, -1, 7},
+        {sipName_QMediaRecorder, &sipType_QMediaRecorder, 60, 8},
+        {sipName_QCameraExposure, &sipType_QCameraExposure, -1, 9},
+        {sipName_QCameraFocus, &sipType_QCameraFocus, -1, 10},
+        {sipName_QCameraImageCapture, &sipType_QCameraImageCapture, -1, 11},
+        {sipName_QCameraImageProcessing, &sipType_QCameraImageProcessing, -1, 12},
+        {sipName_QMediaPlaylist, &sipType_QMediaPlaylist, -1, 13},
         {sipName_QMediaService, &sipType_QMediaService, -1, 14},
         {sipName_QRadioData, &sipType_QRadioData, -1, 15},
-        {sipName_QMediaControl, &sipType_QMediaControl, -1, 16},
-        {sipName_QMediaPlaylist, &sipType_QMediaPlaylist, -1, 17},
-        {sipName_QAudioProbe, &sipType_QAudioProbe, -1, -1},
-        {sipName_QRadioTuner, &sipType_QRadioTuner, -1, 19},
+        {sipName_QSound, &sipType_QSound, -1, 16},
+        {sipName_QSoundEffect, &sipType_QSoundEffect, -1, 17},
+        {sipName_QVideoProbe, &sipType_QVideoProbe, -1, -1},
+        {sipName_QAudioDecoder, &sipType_QAudioDecoder, -1, 19},
         {sipName_QCamera, &sipType_QCamera, -1, 20},
         {sipName_QMediaPlayer, &sipType_QMediaPlayer, -1, 21},
-        {sipName_QAudioDecoder, &sipType_QAudioDecoder, -1, -1},
+        {sipName_QRadioTuner, &sipType_QRadioTuner, -1, -1},
+        {sipName_QAudioDecoderControl, &sipType_QAudioDecoderControl, -1, 23},
+        {sipName_QAudioEncoderSettingsControl, &sipType_QAudioEncoderSettingsControl, -1, 24},
+        {sipName_QAudioInputSelectorControl, &sipType_QAudioInputSelectorControl, -1, 25},
+        {sipName_QAudioOutputSelectorControl, &sipType_QAudioOutputSelectorControl, -1, 26},
+    #if QT_VERSION >= 0x050600
+        {sipName_QAudioRoleControl, &sipType_QAudioRoleControl, -1, 27},
+    #else
+        {0, 0, -1, 27},
+    #endif
+        {sipName_QCameraCaptureBufferFormatControl, &sipType_QCameraCaptureBufferFormatControl, -1, 28},
+        {sipName_QCameraCaptureDestinationControl, &sipType_QCameraCaptureDestinationControl, -1, 29},
+        {sipName_QCameraControl, &sipType_QCameraControl, -1, 30},
+        {sipName_QCameraExposureControl, &sipType_QCameraExposureControl, -1, 31},
+        {sipName_QCameraFeedbackControl, &sipType_QCameraFeedbackControl, -1, 32},
+        {sipName_QCameraFlashControl, &sipType_QCameraFlashControl, -1, 33},
+        {sipName_QCameraFocusControl, &sipType_QCameraFocusControl, -1, 34},
+        {sipName_QCameraImageCaptureControl, &sipType_QCameraImageCaptureControl, -1, 35},
+        {sipName_QCameraImageProcessingControl, &sipType_QCameraImageProcessingControl, -1, 36},
+        {sipName_QCameraInfoControl, &sipType_QCameraInfoControl, -1, 37},
+        {sipName_QCameraLocksControl, &sipType_QCameraLocksControl, -1, 38},
+        {sipName_QCameraViewfinderSettingsControl, &sipType_QCameraViewfinderSettingsControl, -1, 39},
+        {sipName_QCameraViewfinderSettingsControl2, &sipType_QCameraViewfinderSettingsControl2, -1, 40},
+        {sipName_QCameraZoomControl, &sipType_QCameraZoomControl, -1, 41},
+        {sipName_QCustomAudioRoleControl, &sipType_QCustomAudioRoleControl, -1, 42},
+        {sipName_QImageEncoderControl, &sipType_QImageEncoderControl, -1, 43},
+        {sipName_QMediaAudioProbeControl, &sipType_QMediaAudioProbeControl, -1, 44},
+        {sipName_QMediaAvailabilityControl, &sipType_QMediaAvailabilityControl, -1, 45},
+        {sipName_QMediaContainerControl, &sipType_QMediaContainerControl, -1, 46},
+        {sipName_QMediaGaplessPlaybackControl, &sipType_QMediaGaplessPlaybackControl, -1, 47},
+        {sipName_QMediaNetworkAccessControl, &sipType_QMediaNetworkAccessControl, -1, 48},
+        {sipName_QMediaPlayerControl, &sipType_QMediaPlayerControl, -1, 49},
+        {sipName_QMediaRecorderControl, &sipType_QMediaRecorderControl, -1, 50},
+        {sipName_QMediaStreamsControl, &sipType_QMediaStreamsControl, -1, 51},
+        {sipName_QMediaVideoProbeControl, &sipType_QMediaVideoProbeControl, -1, 52},
+        {sipName_QMetaDataReaderControl, &sipType_QMetaDataReaderControl, -1, 53},
+        {sipName_QMetaDataWriterControl, &sipType_QMetaDataWriterControl, -1, 54},
+        {sipName_QRadioDataControl, &sipType_QRadioDataControl, -1, 55},
+        {sipName_QRadioTunerControl, &sipType_QRadioTunerControl, -1, 56},
+        {sipName_QVideoDeviceSelectorControl, &sipType_QVideoDeviceSelectorControl, -1, 57},
+        {sipName_QVideoEncoderSettingsControl, &sipType_QVideoEncoderSettingsControl, -1, 58},
+        {sipName_QVideoRendererControl, &sipType_QVideoRendererControl, -1, 59},
+        {sipName_QVideoWindowControl, &sipType_QVideoWindowControl, -1, -1},
         {sipName_QAudioRecorder, &sipType_QAudioRecorder, -1, -1},
     };
     
diff --git a/sip/QtMultimedia/qaudiodecodercontrol.sip b/sip/QtMultimedia/qaudiodecodercontrol.sip
new file mode 100644
index 00000000..204dc289
--- /dev/null
+++ b/sip/QtMultimedia/qaudiodecodercontrol.sip
@@ -0,0 +1,58 @@
+// qaudiodecodercontrol.sip generated by MetaSIP
+//
+// This file is part of the QtMultimedia Python extension module.
+//
+// Copyright (c) 2020 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// This file may be used under the terms of the GNU General Public License
+// version 3.0 as published by the Free Software Foundation and appearing in
+// the file LICENSE included in the packaging of this file.  Please review the
+// following information to ensure the GNU General Public License version 3.0
+// requirements will be met: http://www.gnu.org/copyleft/gpl.html.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QAudioDecoderControl : QMediaControl
+{
+%TypeHeaderCode
+#include <qaudiodecodercontrol.h>
+%End
+
+public:
+    virtual ~QAudioDecoderControl();
+    virtual QAudioDecoder::State state() const = 0;
+    virtual QString sourceFilename() const = 0;
+    virtual void setSourceFilename(const QString &fileName) = 0;
+    virtual QIODevice *sourceDevice() const = 0;
+    virtual void setSourceDevice(QIODevice *device) = 0;
+    virtual void start() = 0;
+    virtual void stop() = 0;
+    virtual QAudioFormat audioFormat() const = 0;
+    virtual void setAudioFormat(const QAudioFormat &format) = 0;
+    virtual QAudioBuffer read() = 0;
+    virtual bool bufferAvailable() const = 0;
+    virtual qint64 position() const = 0;
+    virtual qint64 duration() const = 0;
+
+signals:
+    void stateChanged(QAudioDecoder::State newState);
+    void formatChanged(const QAudioFormat &format);
+    void sourceChanged();
+    void error(int error, const QString &errorString);
+    void bufferReady();
+    void bufferAvailableChanged(bool available);
+    void finished();
+    void positionChanged(qint64 position);
+    void durationChanged(qint64 duration);
+
+protected:
+    explicit QAudioDecoderControl(QObject *parent /TransferThis/ = 0);
+};
diff --git a/sip/QtCore/qwaitcondition.sip b/sip/QtMultimedia/qaudioencodersettingscontrol.sip
similarity index 54%
copy from sip/QtCore/qwaitcondition.sip
copy to sip/QtMultimedia/qaudioencodersettingscontrol.sip
index 7a687a3b..6615ecf9 100644
--- a/sip/QtCore/qwaitcondition.sip
+++ b/sip/QtMultimedia/qaudioencodersettingscontrol.sip
@@ -1,6 +1,6 @@
-// qwaitcondition.sip generated by MetaSIP
+// qaudioencodersettingscontrol.sip generated by MetaSIP
 //
-// This file is part of the QtCore Python extension module.
+// This file is part of the QtMultimedia Python extension module.
 //
 // Copyright (c) 2020 Riverbank Computing Limited <info at riverbankcomputing.com>
 // 
@@ -20,26 +20,20 @@
 // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 
 
-class QWaitCondition
+class QAudioEncoderSettingsControl : QMediaControl
 {
 %TypeHeaderCode
-#include <qwaitcondition.h>
+#include <qaudioencodersettingscontrol.h>
 %End
 
 public:
-    QWaitCondition();
-    ~QWaitCondition();
-    bool wait(QMutex *mutex, unsigned long msecs = ULONG_MAX) /ReleaseGIL/;
-    bool wait(QReadWriteLock *readWriteLock, unsigned long msecs = ULONG_MAX) /ReleaseGIL/;
-%If (Qt_5_12_0 -)
-    bool wait(QMutex *lockedMutex, QDeadlineTimer deadline) /ReleaseGIL/;
-%End
-%If (Qt_5_12_0 -)
-    bool wait(QReadWriteLock *lockedReadWriteLock, QDeadlineTimer deadline) /ReleaseGIL/;
-%End
-    void wakeOne();
-    void wakeAll();
+    virtual ~QAudioEncoderSettingsControl();
+    virtual QStringList supportedAudioCodecs() const = 0;
+    virtual QString codecDescription(const QString &codecName) const = 0;
+    virtual QList<int> supportedSampleRates(const QAudioEncoderSettings &settings, bool *continuous = 0) const = 0;
+    virtual QAudioEncoderSettings audioSettings() const = 0;
+    virtual void setAudioSettings(const QAudioEncoderSettings &settings) = 0;
 
-private:
-    QWaitCondition(const QWaitCondition &);
+protected:
+    explicit QAudioEncoderSettingsControl(QObject *parent /TransferThis/ = 0);
 };
diff --git a/sip/QtHelp/qcompressedhelpinfo.sip b/sip/QtMultimedia/qaudioinputselectorcontrol.sip
similarity index 55%
copy from sip/QtHelp/qcompressedhelpinfo.sip
copy to sip/QtMultimedia/qaudioinputselectorcontrol.sip
index ea4d0a9f..e4a2a0c3 100644
--- a/sip/QtHelp/qcompressedhelpinfo.sip
+++ b/sip/QtMultimedia/qaudioinputselectorcontrol.sip
@@ -1,6 +1,6 @@
-// qcompressedhelpinfo.sip generated by MetaSIP
+// qaudioinputselectorcontrol.sip generated by MetaSIP
 //
-// This file is part of the QtHelp Python extension module.
+// This file is part of the QtMultimedia Python extension module.
 //
 // Copyright (c) 2020 Riverbank Computing Limited <info at riverbankcomputing.com>
 // 
@@ -20,23 +20,26 @@
 // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 
 
-%If (Qt_5_13_0 -)
-
-class QCompressedHelpInfo
+class QAudioInputSelectorControl : QMediaControl
 {
 %TypeHeaderCode
-#include <qcompressedhelpinfo.h>
+#include <qaudioinputselectorcontrol.h>
 %End
 
 public:
-    QCompressedHelpInfo();
-    QCompressedHelpInfo(const QCompressedHelpInfo &other);
-    ~QCompressedHelpInfo();
-    void swap(QCompressedHelpInfo &other);
-    QString namespaceName() const;
-    QString component() const;
-    QVersionNumber version() const;
-    static QCompressedHelpInfo fromCompressedHelpFile(const QString &documentationFileName);
-};
+    virtual ~QAudioInputSelectorControl();
+    virtual QList<QString> availableInputs() const = 0;
+    virtual QString inputDescription(const QString &name) const = 0;
+    virtual QString defaultInput() const = 0;
+    virtual QString activeInput() const = 0;
 
-%End
+public slots:
+    virtual void setActiveInput(const QString &name) = 0;
+
+signals:
+    void activeInputChanged(const QString &name);
+    void availableInputsChanged();
+
+protected:
+    explicit QAudioInputSelectorControl(QObject *parent /TransferThis/ = 0);
+};
diff --git a/sip/QtHelp/qcompressedhelpinfo.sip b/sip/QtMultimedia/qaudiooutputselectorcontrol.sip
similarity index 54%
copy from sip/QtHelp/qcompressedhelpinfo.sip
copy to sip/QtMultimedia/qaudiooutputselectorcontrol.sip
index ea4d0a9f..3f729066 100644
--- a/sip/QtHelp/qcompressedhelpinfo.sip
+++ b/sip/QtMultimedia/qaudiooutputselectorcontrol.sip
@@ -1,6 +1,6 @@
-// qcompressedhelpinfo.sip generated by MetaSIP
+// qaudiooutputselectorcontrol.sip generated by MetaSIP
 //
-// This file is part of the QtHelp Python extension module.
+// This file is part of the QtMultimedia Python extension module.
 //
 // Copyright (c) 2020 Riverbank Computing Limited <info at riverbankcomputing.com>
 // 
@@ -20,23 +20,26 @@
 // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 
 
-%If (Qt_5_13_0 -)
-
-class QCompressedHelpInfo
+class QAudioOutputSelectorControl : QMediaControl
 {
 %TypeHeaderCode
-#include <qcompressedhelpinfo.h>
+#include <qaudiooutputselectorcontrol.h>
 %End
 
 public:
-    QCompressedHelpInfo();
-    QCompressedHelpInfo(const QCompressedHelpInfo &other);
-    ~QCompressedHelpInfo();
-    void swap(QCompressedHelpInfo &other);
-    QString namespaceName() const;
-    QString component() const;
-    QVersionNumber version() const;
-    static QCompressedHelpInfo fromCompressedHelpFile(const QString &documentationFileName);
-};
+    virtual ~QAudioOutputSelectorControl();
+    virtual QList<QString> availableOutputs() const = 0;
+    virtual QString outputDescription(const QString &name) const = 0;
+    virtual QString defaultOutput() const = 0;
+    virtual QString activeOutput() const = 0;
 
-%End
+public slots:
+    virtual void setActiveOutput(const QString &name) = 0;
+
+signals:
+    void activeOutputChanged(const QString &name);
+    void availableOutputsChanged();
+
+protected:
+    explicit QAudioOutputSelectorControl(QObject *parent /TransferThis/ = 0);
+};
diff --git a/sip/QtHelp/qcompressedhelpinfo.sip b/sip/QtMultimedia/qaudiorolecontrol.sip
similarity index 62%
copy from sip/QtHelp/qcompressedhelpinfo.sip
copy to sip/QtMultimedia/qaudiorolecontrol.sip
index ea4d0a9f..ab96ac5f 100644
--- a/sip/QtHelp/qcompressedhelpinfo.sip
+++ b/sip/QtMultimedia/qaudiorolecontrol.sip
@@ -1,6 +1,6 @@
-// qcompressedhelpinfo.sip generated by MetaSIP
+// qaudiorolecontrol.sip generated by MetaSIP
 //
-// This file is part of the QtHelp Python extension module.
+// This file is part of the QtMultimedia Python extension module.
 //
 // Copyright (c) 2020 Riverbank Computing Limited <info at riverbankcomputing.com>
 // 
@@ -20,23 +20,25 @@
 // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 
 
-%If (Qt_5_13_0 -)
+%If (Qt_5_6_0 -)
 
-class QCompressedHelpInfo
+class QAudioRoleControl : QMediaControl
 {
 %TypeHeaderCode
-#include <qcompressedhelpinfo.h>
+#include <qaudiorolecontrol.h>
 %End
 
 public:
-    QCompressedHelpInfo();
-    QCompressedHelpInfo(const QCompressedHelpInfo &other);
-    ~QCompressedHelpInfo();
-    void swap(QCompressedHelpInfo &other);
-    QString namespaceName() const;
-    QString component() const;
-    QVersionNumber version() const;
-    static QCompressedHelpInfo fromCompressedHelpFile(const QString &documentationFileName);
+    virtual ~QAudioRoleControl();
+    virtual QAudio::Role audioRole() const = 0;
+    virtual void setAudioRole(QAudio::Role role) = 0;
+    virtual QList<QAudio::Role> supportedAudioRoles() const = 0;
+
+signals:
+    void audioRoleChanged(QAudio::Role role);
+
+protected:
+    explicit QAudioRoleControl(QObject *parent /TransferThis/ = 0);
 };
 
 %End
diff --git a/sip/QtMultimedia/qcamera.sip b/sip/QtMultimedia/qcamera.sip
index 4d48e0a8..42a44ea2 100644
--- a/sip/QtMultimedia/qcamera.sip
+++ b/sip/QtMultimedia/qcamera.sip
@@ -154,6 +154,9 @@ signals:
     void lockStatusChanged(QCamera::LockStatus, QCamera::LockChangeReason);
     void lockStatusChanged(QCamera::LockType, QCamera::LockStatus, QCamera::LockChangeReason);
     void error(QCamera::Error);
+%If (Qt_5_15_0 -)
+    void errorOccurred(QCamera::Error);
+%End
 
 public:
 %If (Qt_5_5_0 -)
diff --git a/sip/QtHelp/qcompressedhelpinfo.sip b/sip/QtMultimedia/qcameracapturebufferformatcontrol.sip
similarity index 57%
copy from sip/QtHelp/qcompressedhelpinfo.sip
copy to sip/QtMultimedia/qcameracapturebufferformatcontrol.sip
index ea4d0a9f..9cec20f8 100644
--- a/sip/QtHelp/qcompressedhelpinfo.sip
+++ b/sip/QtMultimedia/qcameracapturebufferformatcontrol.sip
@@ -1,6 +1,6 @@
-// qcompressedhelpinfo.sip generated by MetaSIP
+// qcameracapturebufferformatcontrol.sip generated by MetaSIP
 //
-// This file is part of the QtHelp Python extension module.
+// This file is part of the QtMultimedia Python extension module.
 //
 // Copyright (c) 2020 Riverbank Computing Limited <info at riverbankcomputing.com>
 // 
@@ -20,23 +20,21 @@
 // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 
 
-%If (Qt_5_13_0 -)
-
-class QCompressedHelpInfo
+class QCameraCaptureBufferFormatControl : QMediaControl
 {
 %TypeHeaderCode
-#include <qcompressedhelpinfo.h>
+#include <qcameracapturebufferformatcontrol.h>
 %End
 
 public:
-    QCompressedHelpInfo();
-    QCompressedHelpInfo(const QCompressedHelpInfo &other);
-    ~QCompressedHelpInfo();
-    void swap(QCompressedHelpInfo &other);
-    QString namespaceName() const;
-    QString component() const;
-    QVersionNumber version() const;
-    static QCompressedHelpInfo fromCompressedHelpFile(const QString &documentationFileName);
-};
+    virtual ~QCameraCaptureBufferFormatControl();
+    virtual QList<QVideoFrame::PixelFormat> supportedBufferFormats() const = 0;
+    virtual QVideoFrame::PixelFormat bufferFormat() const = 0;
+    virtual void setBufferFormat(QVideoFrame::PixelFormat format) = 0;
 
-%End
+signals:
+    void bufferFormatChanged(QVideoFrame::PixelFormat format);
+
+protected:
+    explicit QCameraCaptureBufferFormatControl(QObject *parent /TransferThis/ = 0);
+};
diff --git a/sip/QtHelp/qcompressedhelpinfo.sip b/sip/QtMultimedia/qcameracapturedestinationcontrol.sip
similarity index 53%
copy from sip/QtHelp/qcompressedhelpinfo.sip
copy to sip/QtMultimedia/qcameracapturedestinationcontrol.sip
index ea4d0a9f..e0db7444 100644
--- a/sip/QtHelp/qcompressedhelpinfo.sip
+++ b/sip/QtMultimedia/qcameracapturedestinationcontrol.sip
@@ -1,6 +1,6 @@
-// qcompressedhelpinfo.sip generated by MetaSIP
+// qcameracapturedestinationcontrol.sip generated by MetaSIP
 //
-// This file is part of the QtHelp Python extension module.
+// This file is part of the QtMultimedia Python extension module.
 //
 // Copyright (c) 2020 Riverbank Computing Limited <info at riverbankcomputing.com>
 // 
@@ -20,23 +20,21 @@
 // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 
 
-%If (Qt_5_13_0 -)
-
-class QCompressedHelpInfo
+class QCameraCaptureDestinationControl : QMediaControl
 {
 %TypeHeaderCode
-#include <qcompressedhelpinfo.h>
+#include <qcameracapturedestinationcontrol.h>
 %End
 
 public:
-    QCompressedHelpInfo();
-    QCompressedHelpInfo(const QCompressedHelpInfo &other);
-    ~QCompressedHelpInfo();
-    void swap(QCompressedHelpInfo &other);
-    QString namespaceName() const;
-    QString component() const;
-    QVersionNumber version() const;
-    static QCompressedHelpInfo fromCompressedHelpFile(const QString &documentationFileName);
-};
+    virtual ~QCameraCaptureDestinationControl();
+    virtual bool isCaptureDestinationSupported(QCameraImageCapture::CaptureDestinations destination) const = 0;
+    virtual QCameraImageCapture::CaptureDestinations captureDestination() const = 0;
+    virtual void setCaptureDestination(QCameraImageCapture::CaptureDestinations destination) = 0;
 
-%End
+signals:
+    void captureDestinationChanged(QCameraImageCapture::CaptureDestinations destination);
+
+protected:
+    explicit QCameraCaptureDestinationControl(QObject *parent /TransferThis/ = 0);
+};
diff --git a/sip/QtMultimedia/qcameracontrol.sip b/sip/QtMultimedia/qcameracontrol.sip
new file mode 100644
index 00000000..55d46e68
--- /dev/null
+++ b/sip/QtMultimedia/qcameracontrol.sip
@@ -0,0 +1,56 @@
+// qcameracontrol.sip generated by MetaSIP
+//
+// This file is part of the QtMultimedia Python extension module.
+//
+// Copyright (c) 2020 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// This file may be used under the terms of the GNU General Public License
+// version 3.0 as published by the Free Software Foundation and appearing in
+// the file LICENSE included in the packaging of this file.  Please review the
+// following information to ensure the GNU General Public License version 3.0
+// requirements will be met: http://www.gnu.org/copyleft/gpl.html.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QCameraControl : QMediaControl
+{
+%TypeHeaderCode
+#include <qcameracontrol.h>
+%End
+
+public:
+    enum PropertyChangeType
+    {
+        CaptureMode,
+        ImageEncodingSettings,
+        VideoEncodingSettings,
+        Viewfinder,
+        ViewfinderSettings,
+    };
+
+    virtual ~QCameraControl();
+    virtual QCamera::State state() const = 0;
+    virtual void setState(QCamera::State state) = 0;
+    virtual QCamera::Status status() const = 0;
+    virtual QCamera::CaptureModes captureMode() const = 0;
+    virtual void setCaptureMode(QCamera::CaptureModes) = 0;
+    virtual bool isCaptureModeSupported(QCamera::CaptureModes mode) const = 0;
+    virtual bool canChangeProperty(QCameraControl::PropertyChangeType changeType, QCamera::Status status) const = 0;
+
+signals:
+    void stateChanged(QCamera::State);
+    void statusChanged(QCamera::Status);
+    void error(int error, const QString &errorString);
+    void captureModeChanged(QCamera::CaptureModes mode);
+
+protected:
+    explicit QCameraControl(QObject *parent /TransferThis/ = 0);
+};
diff --git a/sip/QtMultimedia/qcameraexposurecontrol.sip b/sip/QtMultimedia/qcameraexposurecontrol.sip
new file mode 100644
index 00000000..f82cb5a2
--- /dev/null
+++ b/sip/QtMultimedia/qcameraexposurecontrol.sip
@@ -0,0 +1,60 @@
+// qcameraexposurecontrol.sip generated by MetaSIP
+//
+// This file is part of the QtMultimedia Python extension module.
+//
+// Copyright (c) 2020 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// This file may be used under the terms of the GNU General Public License
+// version 3.0 as published by the Free Software Foundation and appearing in
+// the file LICENSE included in the packaging of this file.  Please review the
+// following information to ensure the GNU General Public License version 3.0
+// requirements will be met: http://www.gnu.org/copyleft/gpl.html.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QCameraExposureControl : QMediaControl
+{
+%TypeHeaderCode
+#include <qcameraexposurecontrol.h>
+%End
+
+public:
+    virtual ~QCameraExposureControl();
+
+    enum ExposureParameter
+    {
+        ISO,
+        Aperture,
+        ShutterSpeed,
+        ExposureCompensation,
+        FlashPower,
+        FlashCompensation,
+        TorchPower,
+        SpotMeteringPoint,
+        ExposureMode,
+        MeteringMode,
+        ExtendedExposureParameter,
+    };
+
+    virtual bool isParameterSupported(QCameraExposureControl::ExposureParameter parameter) const = 0;
+    virtual QVariantList supportedParameterRange(QCameraExposureControl::ExposureParameter parameter, bool *continuous) const = 0;
+    virtual QVariant requestedValue(QCameraExposureControl::ExposureParameter parameter) const = 0;
+    virtual QVariant actualValue(QCameraExposureControl::ExposureParameter parameter) const = 0;
+    virtual bool setValue(QCameraExposureControl::ExposureParameter parameter, const QVariant &value) = 0;
+
+signals:
+    void requestedValueChanged(int parameter);
+    void actualValueChanged(int parameter);
+    void parameterRangeChanged(int parameter);
+
+protected:
+    explicit QCameraExposureControl(QObject *parent /TransferThis/ = 0);
+};
diff --git a/sip/QtMultimedia/qcamerafeedbackcontrol.sip b/sip/QtMultimedia/qcamerafeedbackcontrol.sip
new file mode 100644
index 00000000..3a76bc7f
--- /dev/null
+++ b/sip/QtMultimedia/qcamerafeedbackcontrol.sip
@@ -0,0 +1,54 @@
+// qcamerafeedbackcontrol.sip generated by MetaSIP
+//
+// This file is part of the QtMultimedia Python extension module.
+//
+// Copyright (c) 2020 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// This file may be used under the terms of the GNU General Public License
+// version 3.0 as published by the Free Software Foundation and appearing in
+// the file LICENSE included in the packaging of this file.  Please review the
+// following information to ensure the GNU General Public License version 3.0
+// requirements will be met: http://www.gnu.org/copyleft/gpl.html.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QCameraFeedbackControl : QMediaControl
+{
+%TypeHeaderCode
+#include <qcamerafeedbackcontrol.h>
+%End
+
+public:
+    enum EventType
+    {
+        ViewfinderStarted,
+        ViewfinderStopped,
+        ImageCaptured,
+        ImageSaved,
+        ImageError,
+        RecordingStarted,
+        RecordingInProgress,
+        RecordingStopped,
+        AutoFocusInProgress,
+        AutoFocusLocked,
+        AutoFocusFailed,
+    };
+
+    virtual ~QCameraFeedbackControl();
+    virtual bool isEventFeedbackLocked(QCameraFeedbackControl::EventType) const = 0;
+    virtual bool isEventFeedbackEnabled(QCameraFeedbackControl::EventType) const = 0;
+    virtual bool setEventFeedbackEnabled(QCameraFeedbackControl::EventType, bool) = 0;
+    virtual void resetEventFeedback(QCameraFeedbackControl::EventType) = 0;
+    virtual bool setEventFeedbackSound(QCameraFeedbackControl::EventType, const QString &filePath) = 0;
+
+protected:
+    explicit QCameraFeedbackControl(QObject *parent /TransferThis/ = 0);
+};
diff --git a/sip/QtQml/qqmlextensionplugin.sip b/sip/QtMultimedia/qcameraflashcontrol.sip
similarity index 59%
copy from sip/QtQml/qqmlextensionplugin.sip
copy to sip/QtMultimedia/qcameraflashcontrol.sip
index 280265cd..629910c9 100644
--- a/sip/QtQml/qqmlextensionplugin.sip
+++ b/sip/QtMultimedia/qcameraflashcontrol.sip
@@ -1,6 +1,6 @@
-// qqmlextensionplugin.sip generated by MetaSIP
+// qcameraflashcontrol.sip generated by MetaSIP
 //
-// This file is part of the QtQml Python extension module.
+// This file is part of the QtMultimedia Python extension module.
 //
 // Copyright (c) 2020 Riverbank Computing Limited <info at riverbankcomputing.com>
 // 
@@ -20,18 +20,22 @@
 // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 
 
-class QQmlExtensionPlugin : QObject
+class QCameraFlashControl : QMediaControl
 {
 %TypeHeaderCode
-#include <qqmlextensionplugin.h>
+#include <qcameraflashcontrol.h>
 %End
 
 public:
-    explicit QQmlExtensionPlugin(QObject *parent /TransferThis/ = 0);
-    virtual ~QQmlExtensionPlugin();
-    virtual void registerTypes(const char *uri) = 0;
-    virtual void initializeEngine(QQmlEngine *engine, const char *uri);
-%If (Qt_5_1_0 -)
-    QUrl baseUrl() const;
-%End
+    virtual ~QCameraFlashControl();
+    virtual QCameraExposure::FlashModes flashMode() const = 0;
+    virtual void setFlashMode(QCameraExposure::FlashModes mode) = 0;
+    virtual bool isFlashModeSupported(QCameraExposure::FlashModes mode) const = 0;
+    virtual bool isFlashReady() const = 0;
+
+signals:
+    void flashReady(bool);
+
+protected:
+    explicit QCameraFlashControl(QObject *parent /TransferThis/ = 0);
 };
diff --git a/sip/QtMultimedia/qcamerafocuscontrol.sip b/sip/QtMultimedia/qcamerafocuscontrol.sip
new file mode 100644
index 00000000..15f0102a
--- /dev/null
+++ b/sip/QtMultimedia/qcamerafocuscontrol.sip
@@ -0,0 +1,49 @@
+// qcamerafocuscontrol.sip generated by MetaSIP
+//
+// This file is part of the QtMultimedia Python extension module.
+//
+// Copyright (c) 2020 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// This file may be used under the terms of the GNU General Public License
+// version 3.0 as published by the Free Software Foundation and appearing in
+// the file LICENSE included in the packaging of this file.  Please review the
+// following information to ensure the GNU General Public License version 3.0
+// requirements will be met: http://www.gnu.org/copyleft/gpl.html.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QCameraFocusControl : QMediaControl
+{
+%TypeHeaderCode
+#include <qcamerafocuscontrol.h>
+%End
+
+public:
+    virtual ~QCameraFocusControl();
+    virtual QCameraFocus::FocusModes focusMode() const = 0;
+    virtual void setFocusMode(QCameraFocus::FocusModes mode) = 0;
+    virtual bool isFocusModeSupported(QCameraFocus::FocusModes mode) const = 0;
+    virtual QCameraFocus::FocusPointMode focusPointMode() const = 0;
+    virtual void setFocusPointMode(QCameraFocus::FocusPointMode mode) = 0;
+    virtual bool isFocusPointModeSupported(QCameraFocus::FocusPointMode mode) const = 0;
+    virtual QPointF customFocusPoint() const = 0;
+    virtual void setCustomFocusPoint(const QPointF &point) = 0;
+    virtual QCameraFocusZoneList focusZones() const = 0;
+
+signals:
+    void focusModeChanged(QCameraFocus::FocusModes mode);
+    void focusPointModeChanged(QCameraFocus::FocusPointMode mode);
+    void customFocusPointChanged(const QPointF &point);
+    void focusZonesChanged();
+
+protected:
+    explicit QCameraFocusControl(QObject *parent /TransferThis/ = 0);
+};
diff --git a/sip/QtMultimedia/qcameraimagecapturecontrol.sip b/sip/QtMultimedia/qcameraimagecapturecontrol.sip
new file mode 100644
index 00000000..bc1a15e7
--- /dev/null
+++ b/sip/QtMultimedia/qcameraimagecapturecontrol.sip
@@ -0,0 +1,48 @@
+// qcameraimagecapturecontrol.sip generated by MetaSIP
+//
+// This file is part of the QtMultimedia Python extension module.
+//
+// Copyright (c) 2020 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// This file may be used under the terms of the GNU General Public License
+// version 3.0 as published by the Free Software Foundation and appearing in
+// the file LICENSE included in the packaging of this file.  Please review the
+// following information to ensure the GNU General Public License version 3.0
+// requirements will be met: http://www.gnu.org/copyleft/gpl.html.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QCameraImageCaptureControl : QMediaControl
+{
+%TypeHeaderCode
+#include <qcameraimagecapturecontrol.h>
+%End
+
+public:
+    virtual ~QCameraImageCaptureControl();
+    virtual bool isReadyForCapture() const = 0;
+    virtual QCameraImageCapture::DriveMode driveMode() const = 0;
+    virtual void setDriveMode(QCameraImageCapture::DriveMode mode) = 0;
+    virtual int capture(const QString &fileName) = 0;
+    virtual void cancelCapture() = 0;
+
+signals:
+    void readyForCaptureChanged(bool ready);
+    void imageExposed(int requestId);
+    void imageCaptured(int requestId, const QImage &preview);
+    void imageMetadataAvailable(int id, const QString &key, const QVariant &value);
+    void imageAvailable(int requestId, const QVideoFrame &buffer);
+    void imageSaved(int requestId, const QString &fileName);
+    void error(int id, int error, const QString &errorString);
+
+protected:
+    explicit QCameraImageCaptureControl(QObject *parent /TransferThis/ = 0);
+};
diff --git a/sip/QtMultimedia/qcameraimageprocessingcontrol.sip b/sip/QtMultimedia/qcameraimageprocessingcontrol.sip
new file mode 100644
index 00000000..134f8865
--- /dev/null
+++ b/sip/QtMultimedia/qcameraimageprocessingcontrol.sip
@@ -0,0 +1,57 @@
+// qcameraimageprocessingcontrol.sip generated by MetaSIP
+//
+// This file is part of the QtMultimedia Python extension module.
+//
+// Copyright (c) 2020 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// This file may be used under the terms of the GNU General Public License
+// version 3.0 as published by the Free Software Foundation and appearing in
+// the file LICENSE included in the packaging of this file.  Please review the
+// following information to ensure the GNU General Public License version 3.0
+// requirements will be met: http://www.gnu.org/copyleft/gpl.html.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QCameraImageProcessingControl : QMediaControl
+{
+%TypeHeaderCode
+#include <qcameraimageprocessingcontrol.h>
+%End
+
+public:
+    virtual ~QCameraImageProcessingControl();
+
+    enum ProcessingParameter
+    {
+        WhiteBalancePreset,
+        ColorTemperature,
+        Contrast,
+        Saturation,
+        Brightness,
+        Sharpening,
+        Denoising,
+        ContrastAdjustment,
+        SaturationAdjustment,
+        BrightnessAdjustment,
+        SharpeningAdjustment,
+        DenoisingAdjustment,
+        ColorFilter,
+        ExtendedParameter,
+    };
+
+    virtual bool isParameterSupported(QCameraImageProcessingControl::ProcessingParameter) const = 0;
+    virtual bool isParameterValueSupported(QCameraImageProcessingControl::ProcessingParameter parameter, const QVariant &value) const = 0;
+    virtual QVariant parameter(QCameraImageProcessingControl::ProcessingParameter parameter) const = 0;
+    virtual void setParameter(QCameraImageProcessingControl::ProcessingParameter parameter, const QVariant &value) = 0;
+
+protected:
+    explicit QCameraImageProcessingControl(QObject *parent /TransferThis/ = 0);
+};
diff --git a/sip/QtQml/qqmlextensionplugin.sip b/sip/QtMultimedia/qcamerainfocontrol.sip
similarity index 65%
copy from sip/QtQml/qqmlextensionplugin.sip
copy to sip/QtMultimedia/qcamerainfocontrol.sip
index 280265cd..0134a4a1 100644
--- a/sip/QtQml/qqmlextensionplugin.sip
+++ b/sip/QtMultimedia/qcamerainfocontrol.sip
@@ -1,6 +1,6 @@
-// qqmlextensionplugin.sip generated by MetaSIP
+// qcamerainfocontrol.sip generated by MetaSIP
 //
-// This file is part of the QtQml Python extension module.
+// This file is part of the QtMultimedia Python extension module.
 //
 // Copyright (c) 2020 Riverbank Computing Limited <info at riverbankcomputing.com>
 // 
@@ -20,18 +20,17 @@
 // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 
 
-class QQmlExtensionPlugin : QObject
+class QCameraInfoControl : QMediaControl
 {
 %TypeHeaderCode
-#include <qqmlextensionplugin.h>
+#include <qcamerainfocontrol.h>
 %End
 
 public:
-    explicit QQmlExtensionPlugin(QObject *parent /TransferThis/ = 0);
-    virtual ~QQmlExtensionPlugin();
-    virtual void registerTypes(const char *uri) = 0;
-    virtual void initializeEngine(QQmlEngine *engine, const char *uri);
-%If (Qt_5_1_0 -)
-    QUrl baseUrl() const;
-%End
+    virtual ~QCameraInfoControl();
+    virtual QCamera::Position cameraPosition(const QString &deviceName) const = 0;
+    virtual int cameraOrientation(const QString &deviceName) const = 0;
+
+protected:
+    explicit QCameraInfoControl(QObject *parent /TransferThis/ = 0);
 };
diff --git a/sip/QtQml/qqmlextensionplugin.sip b/sip/QtMultimedia/qcameralockscontrol.sip
similarity index 56%
copy from sip/QtQml/qqmlextensionplugin.sip
copy to sip/QtMultimedia/qcameralockscontrol.sip
index 280265cd..6058012a 100644
--- a/sip/QtQml/qqmlextensionplugin.sip
+++ b/sip/QtMultimedia/qcameralockscontrol.sip
@@ -1,6 +1,6 @@
-// qqmlextensionplugin.sip generated by MetaSIP
+// qcameralockscontrol.sip generated by MetaSIP
 //
-// This file is part of the QtQml Python extension module.
+// This file is part of the QtMultimedia Python extension module.
 //
 // Copyright (c) 2020 Riverbank Computing Limited <info at riverbankcomputing.com>
 // 
@@ -20,18 +20,22 @@
 // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 
 
-class QQmlExtensionPlugin : QObject
+class QCameraLocksControl : QMediaControl
 {
 %TypeHeaderCode
-#include <qqmlextensionplugin.h>
+#include <qcameralockscontrol.h>
 %End
 
 public:
-    explicit QQmlExtensionPlugin(QObject *parent /TransferThis/ = 0);
-    virtual ~QQmlExtensionPlugin();
-    virtual void registerTypes(const char *uri) = 0;
-    virtual void initializeEngine(QQmlEngine *engine, const char *uri);
-%If (Qt_5_1_0 -)
-    QUrl baseUrl() const;
-%End
+    virtual ~QCameraLocksControl();
+    virtual QCamera::LockTypes supportedLocks() const = 0;
+    virtual QCamera::LockStatus lockStatus(QCamera::LockType lock) const = 0;
+    virtual void searchAndLock(QCamera::LockTypes locks) = 0;
+    virtual void unlock(QCamera::LockTypes locks) = 0;
+
+signals:
+    void lockStatusChanged(QCamera::LockType type, QCamera::LockStatus status, QCamera::LockChangeReason reason);
+
+protected:
+    explicit QCameraLocksControl(QObject *parent /TransferThis/ = 0);
 };
diff --git a/sip/QtMultimedia/qcameraviewfindersettingscontrol.sip b/sip/QtMultimedia/qcameraviewfindersettingscontrol.sip
new file mode 100644
index 00000000..85ed2629
--- /dev/null
+++ b/sip/QtMultimedia/qcameraviewfindersettingscontrol.sip
@@ -0,0 +1,63 @@
+// qcameraviewfindersettingscontrol.sip generated by MetaSIP
+//
+// This file is part of the QtMultimedia Python extension module.
+//
+// Copyright (c) 2020 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// This file may be used under the terms of the GNU General Public License
+// version 3.0 as published by the Free Software Foundation and appearing in
+// the file LICENSE included in the packaging of this file.  Please review the
+// following information to ensure the GNU General Public License version 3.0
+// requirements will be met: http://www.gnu.org/copyleft/gpl.html.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QCameraViewfinderSettingsControl : QMediaControl
+{
+%TypeHeaderCode
+#include <qcameraviewfindersettingscontrol.h>
+%End
+
+public:
+    enum ViewfinderParameter
+    {
+        Resolution,
+        PixelAspectRatio,
+        MinimumFrameRate,
+        MaximumFrameRate,
+        PixelFormat,
+        UserParameter,
+    };
+
+    virtual ~QCameraViewfinderSettingsControl();
+    virtual bool isViewfinderParameterSupported(QCameraViewfinderSettingsControl::ViewfinderParameter parameter) const = 0;
+    virtual QVariant viewfinderParameter(QCameraViewfinderSettingsControl::ViewfinderParameter parameter) const = 0;
+    virtual void setViewfinderParameter(QCameraViewfinderSettingsControl::ViewfinderParameter parameter, const QVariant &value) = 0;
+
+protected:
+    explicit QCameraViewfinderSettingsControl(QObject *parent /TransferThis/ = 0);
+};
+
+class QCameraViewfinderSettingsControl2 : QMediaControl
+{
+%TypeHeaderCode
+#include <qcameraviewfindersettingscontrol.h>
+%End
+
+public:
+    virtual ~QCameraViewfinderSettingsControl2();
+    virtual QList<QCameraViewfinderSettings> supportedViewfinderSettings() const = 0;
+    virtual QCameraViewfinderSettings viewfinderSettings() const = 0;
+    virtual void setViewfinderSettings(const QCameraViewfinderSettings &settings) = 0;
+
+protected:
+    explicit QCameraViewfinderSettingsControl2(QObject *parent /TransferThis/ = 0);
+};
diff --git a/sip/QtMultimedia/qcamerazoomcontrol.sip b/sip/QtMultimedia/qcamerazoomcontrol.sip
new file mode 100644
index 00000000..a52837cc
--- /dev/null
+++ b/sip/QtMultimedia/qcamerazoomcontrol.sip
@@ -0,0 +1,49 @@
+// qcamerazoomcontrol.sip generated by MetaSIP
+//
+// This file is part of the QtMultimedia Python extension module.
+//
+// Copyright (c) 2020 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// This file may be used under the terms of the GNU General Public License
+// version 3.0 as published by the Free Software Foundation and appearing in
+// the file LICENSE included in the packaging of this file.  Please review the
+// following information to ensure the GNU General Public License version 3.0
+// requirements will be met: http://www.gnu.org/copyleft/gpl.html.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QCameraZoomControl : QMediaControl
+{
+%TypeHeaderCode
+#include <qcamerazoomcontrol.h>
+%End
+
+public:
+    virtual ~QCameraZoomControl();
+    virtual qreal maximumOpticalZoom() const = 0;
+    virtual qreal maximumDigitalZoom() const = 0;
+    virtual qreal requestedOpticalZoom() const = 0;
+    virtual qreal requestedDigitalZoom() const = 0;
+    virtual qreal currentOpticalZoom() const = 0;
+    virtual qreal currentDigitalZoom() const = 0;
+    virtual void zoomTo(qreal optical, qreal digital) = 0;
+
+signals:
+    void maximumOpticalZoomChanged(qreal);
+    void maximumDigitalZoomChanged(qreal);
+    void requestedOpticalZoomChanged(qreal opticalZoom);
+    void requestedDigitalZoomChanged(qreal digitalZoom);
+    void currentOpticalZoomChanged(qreal opticalZoom);
+    void currentDigitalZoomChanged(qreal digitalZoom);
+
+protected:
+    explicit QCameraZoomControl(QObject *parent /TransferThis/ = 0);
+};
diff --git a/sip/QtHelp/qcompressedhelpinfo.sip b/sip/QtMultimedia/qcustomaudiorolecontrol.sip
similarity index 61%
copy from sip/QtHelp/qcompressedhelpinfo.sip
copy to sip/QtMultimedia/qcustomaudiorolecontrol.sip
index ea4d0a9f..762de926 100644
--- a/sip/QtHelp/qcompressedhelpinfo.sip
+++ b/sip/QtMultimedia/qcustomaudiorolecontrol.sip
@@ -1,6 +1,6 @@
-// qcompressedhelpinfo.sip generated by MetaSIP
+// qcustomaudiorolecontrol.sip generated by MetaSIP
 //
-// This file is part of the QtHelp Python extension module.
+// This file is part of the QtMultimedia Python extension module.
 //
 // Copyright (c) 2020 Riverbank Computing Limited <info at riverbankcomputing.com>
 // 
@@ -20,23 +20,21 @@
 // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 
 
-%If (Qt_5_13_0 -)
-
-class QCompressedHelpInfo
+class QCustomAudioRoleControl : QMediaControl
 {
 %TypeHeaderCode
-#include <qcompressedhelpinfo.h>
+#include <qcustomaudiorolecontrol.h>
 %End
 
 public:
-    QCompressedHelpInfo();
-    QCompressedHelpInfo(const QCompressedHelpInfo &other);
-    ~QCompressedHelpInfo();
-    void swap(QCompressedHelpInfo &other);
-    QString namespaceName() const;
-    QString component() const;
-    QVersionNumber version() const;
-    static QCompressedHelpInfo fromCompressedHelpFile(const QString &documentationFileName);
-};
+    virtual ~QCustomAudioRoleControl();
+    virtual QString customAudioRole() const = 0;
+    virtual void setCustomAudioRole(const QString &role) = 0;
+    virtual QStringList supportedCustomAudioRoles() const = 0;
 
-%End
+signals:
+    void customAudioRoleChanged(const QString &role);
+
+protected:
+    explicit QCustomAudioRoleControl(QObject *parent /TransferThis/ = 0);
+};
diff --git a/sip/QtCore/qwaitcondition.sip b/sip/QtMultimedia/qimageencodercontrol.sip
similarity index 55%
copy from sip/QtCore/qwaitcondition.sip
copy to sip/QtMultimedia/qimageencodercontrol.sip
index 7a687a3b..b0271bab 100644
--- a/sip/QtCore/qwaitcondition.sip
+++ b/sip/QtMultimedia/qimageencodercontrol.sip
@@ -1,6 +1,6 @@
-// qwaitcondition.sip generated by MetaSIP
+// qimageencodercontrol.sip generated by MetaSIP
 //
-// This file is part of the QtCore Python extension module.
+// This file is part of the QtMultimedia Python extension module.
 //
 // Copyright (c) 2020 Riverbank Computing Limited <info at riverbankcomputing.com>
 // 
@@ -20,26 +20,20 @@
 // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 
 
-class QWaitCondition
+class QImageEncoderControl : QMediaControl
 {
 %TypeHeaderCode
-#include <qwaitcondition.h>
+#include <qimageencodercontrol.h>
 %End
 
 public:
-    QWaitCondition();
-    ~QWaitCondition();
-    bool wait(QMutex *mutex, unsigned long msecs = ULONG_MAX) /ReleaseGIL/;
-    bool wait(QReadWriteLock *readWriteLock, unsigned long msecs = ULONG_MAX) /ReleaseGIL/;
-%If (Qt_5_12_0 -)
-    bool wait(QMutex *lockedMutex, QDeadlineTimer deadline) /ReleaseGIL/;
-%End
-%If (Qt_5_12_0 -)
-    bool wait(QReadWriteLock *lockedReadWriteLock, QDeadlineTimer deadline) /ReleaseGIL/;
-%End
-    void wakeOne();
-    void wakeAll();
+    virtual ~QImageEncoderControl();
+    virtual QStringList supportedImageCodecs() const = 0;
+    virtual QString imageCodecDescription(const QString &codec) const = 0;
+    virtual QList<QSize> supportedResolutions(const QImageEncoderSettings &settings, bool *continuous = 0) const = 0;
+    virtual QImageEncoderSettings imageSettings() const = 0;
+    virtual void setImageSettings(const QImageEncoderSettings &settings) = 0;
 
-private:
-    QWaitCondition(const QWaitCondition &);
+protected:
+    explicit QImageEncoderControl(QObject *parent /TransferThis/ = 0);
 };
diff --git a/sip/QtCore/qrunnable.sip b/sip/QtMultimedia/qmediaaudioprobecontrol.sip
similarity index 68%
copy from sip/QtCore/qrunnable.sip
copy to sip/QtMultimedia/qmediaaudioprobecontrol.sip
index bf0fe34e..6f68130b 100644
--- a/sip/QtCore/qrunnable.sip
+++ b/sip/QtMultimedia/qmediaaudioprobecontrol.sip
@@ -1,6 +1,6 @@
-// qrunnable.sip generated by MetaSIP
+// qmediaaudioprobecontrol.sip generated by MetaSIP
 //
-// This file is part of the QtCore Python extension module.
+// This file is part of the QtMultimedia Python extension module.
 //
 // Copyright (c) 2020 Riverbank Computing Limited <info at riverbankcomputing.com>
 // 
@@ -20,16 +20,19 @@
 // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 
 
-class QRunnable /Supertype=sip.wrapper/
+class QMediaAudioProbeControl : QMediaControl
 {
 %TypeHeaderCode
-#include <qrunnable.h>
+#include <qmediaaudioprobecontrol.h>
 %End
 
 public:
-    QRunnable();
-    virtual ~QRunnable();
-    virtual void run() = 0 /NewThread/;
-    bool autoDelete() const;
-    void setAutoDelete(bool _autoDelete);
+    virtual ~QMediaAudioProbeControl();
+
+signals:
+    void audioBufferProbed(const QAudioBuffer &buffer);
+    void flush();
+
+protected:
+    explicit QMediaAudioProbeControl(QObject *parent /TransferThis/ = 0);
 };
diff --git a/sip/QtQml/qqmlextensionplugin.sip b/sip/QtMultimedia/qmediaavailabilitycontrol.sip
similarity index 64%
copy from sip/QtQml/qqmlextensionplugin.sip
copy to sip/QtMultimedia/qmediaavailabilitycontrol.sip
index 280265cd..5cf88f9e 100644
--- a/sip/QtQml/qqmlextensionplugin.sip
+++ b/sip/QtMultimedia/qmediaavailabilitycontrol.sip
@@ -1,6 +1,6 @@
-// qqmlextensionplugin.sip generated by MetaSIP
+// qmediaavailabilitycontrol.sip generated by MetaSIP
 //
-// This file is part of the QtQml Python extension module.
+// This file is part of the QtMultimedia Python extension module.
 //
 // Copyright (c) 2020 Riverbank Computing Limited <info at riverbankcomputing.com>
 // 
@@ -20,18 +20,19 @@
 // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 
 
-class QQmlExtensionPlugin : QObject
+class QMediaAvailabilityControl : QMediaControl
 {
 %TypeHeaderCode
-#include <qqmlextensionplugin.h>
+#include <qmediaavailabilitycontrol.h>
 %End
 
 public:
-    explicit QQmlExtensionPlugin(QObject *parent /TransferThis/ = 0);
-    virtual ~QQmlExtensionPlugin();
-    virtual void registerTypes(const char *uri) = 0;
-    virtual void initializeEngine(QQmlEngine *engine, const char *uri);
-%If (Qt_5_1_0 -)
-    QUrl baseUrl() const;
-%End
+    virtual ~QMediaAvailabilityControl();
+    virtual QMultimedia::AvailabilityStatus availability() const = 0;
+
+signals:
+    void availabilityChanged(QMultimedia::AvailabilityStatus availability);
+
+protected:
+    explicit QMediaAvailabilityControl(QObject *parent /TransferThis/ = 0);
 };
diff --git a/sip/QtHelp/qcompressedhelpinfo.sip b/sip/QtMultimedia/qmediacontainercontrol.sip
similarity index 60%
copy from sip/QtHelp/qcompressedhelpinfo.sip
copy to sip/QtMultimedia/qmediacontainercontrol.sip
index ea4d0a9f..3209f03b 100644
--- a/sip/QtHelp/qcompressedhelpinfo.sip
+++ b/sip/QtMultimedia/qmediacontainercontrol.sip
@@ -1,6 +1,6 @@
-// qcompressedhelpinfo.sip generated by MetaSIP
+// qmediacontainercontrol.sip generated by MetaSIP
 //
-// This file is part of the QtHelp Python extension module.
+// This file is part of the QtMultimedia Python extension module.
 //
 // Copyright (c) 2020 Riverbank Computing Limited <info at riverbankcomputing.com>
 // 
@@ -20,23 +20,19 @@
 // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 
 
-%If (Qt_5_13_0 -)
-
-class QCompressedHelpInfo
+class QMediaContainerControl : QMediaControl
 {
 %TypeHeaderCode
-#include <qcompressedhelpinfo.h>
+#include <qmediacontainercontrol.h>
 %End
 
 public:
-    QCompressedHelpInfo();
-    QCompressedHelpInfo(const QCompressedHelpInfo &other);
-    ~QCompressedHelpInfo();
-    void swap(QCompressedHelpInfo &other);
-    QString namespaceName() const;
-    QString component() const;
-    QVersionNumber version() const;
-    static QCompressedHelpInfo fromCompressedHelpFile(const QString &documentationFileName);
-};
+    virtual ~QMediaContainerControl();
+    virtual QStringList supportedContainers() const = 0;
+    virtual QString containerFormat() const = 0;
+    virtual void setContainerFormat(const QString &format) = 0;
+    virtual QString containerDescription(const QString &formatMimeType) const = 0;
 
-%End
+protected:
+    explicit QMediaContainerControl(QObject *parent /TransferThis/ = 0);
+};
diff --git a/sip/QtRemoteObjects/qremoteobjectreplica.sip b/sip/QtMultimedia/qmediagaplessplaybackcontrol.sip
similarity index 53%
copy from sip/QtRemoteObjects/qremoteobjectreplica.sip
copy to sip/QtMultimedia/qmediagaplessplaybackcontrol.sip
index ce8abc70..0956cd07 100644
--- a/sip/QtRemoteObjects/qremoteobjectreplica.sip
+++ b/sip/QtMultimedia/qmediagaplessplaybackcontrol.sip
@@ -1,6 +1,6 @@
-// qremoteobjectreplica.sip generated by MetaSIP
+// qmediagaplessplaybackcontrol.sip generated by MetaSIP
 //
-// This file is part of the QtRemoteObjects Python extension module.
+// This file is part of the QtMultimedia Python extension module.
 //
 // Copyright (c) 2020 Riverbank Computing Limited <info at riverbankcomputing.com>
 // 
@@ -20,35 +20,25 @@
 // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 
 
-%If (Qt_5_12_0 -)
-
-class QRemoteObjectReplica : QObject /NoDefaultCtors/
+class QMediaGaplessPlaybackControl : QMediaControl
 {
 %TypeHeaderCode
-#include <qremoteobjectreplica.h>
+#include <qmediagaplessplaybackcontrol.h>
 %End
 
 public:
-    enum State
-    {
-        Uninitialized,
-        Default,
-        Valid,
-        Suspect,
-        SignatureMismatch,
-    };
-
-    virtual ~QRemoteObjectReplica();
-    bool isReplicaValid() const;
-    bool waitForSource(int timeout = 30000) /ReleaseGIL/;
-    bool isInitialized() const;
-    QRemoteObjectReplica::State state() const;
-    QRemoteObjectNode *node() const;
-    virtual void setNode(QRemoteObjectNode *node);
+    virtual ~QMediaGaplessPlaybackControl();
+    virtual QMediaContent nextMedia() const = 0;
+    virtual void setNextMedia(const QMediaContent &media) = 0;
+    virtual bool isCrossfadeSupported() const = 0;
+    virtual qreal crossfadeTime() const = 0;
+    virtual void setCrossfadeTime(qreal crossfadeTime) = 0;
 
 signals:
-    void initialized();
-    void stateChanged(QRemoteObjectReplica::State state, QRemoteObjectReplica::State oldState);
-};
+    void crossfadeTimeChanged(qreal crossfadeTime);
+    void nextMediaChanged(const QMediaContent &media);
+    void advancedToNextMedia();
 
-%End
+protected:
+    explicit QMediaGaplessPlaybackControl(QObject *parent /TransferThis/ = 0);
+};
diff --git a/sip/QtHelp/qcompressedhelpinfo.sip b/sip/QtMultimedia/qmedianetworkaccesscontrol.sip
similarity index 60%
copy from sip/QtHelp/qcompressedhelpinfo.sip
copy to sip/QtMultimedia/qmedianetworkaccesscontrol.sip
index ea4d0a9f..219b0899 100644
--- a/sip/QtHelp/qcompressedhelpinfo.sip
+++ b/sip/QtMultimedia/qmedianetworkaccesscontrol.sip
@@ -1,6 +1,6 @@
-// qcompressedhelpinfo.sip generated by MetaSIP
+// qmedianetworkaccesscontrol.sip generated by MetaSIP
 //
-// This file is part of the QtHelp Python extension module.
+// This file is part of the QtMultimedia Python extension module.
 //
 // Copyright (c) 2020 Riverbank Computing Limited <info at riverbankcomputing.com>
 // 
@@ -20,23 +20,20 @@
 // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 
 
-%If (Qt_5_13_0 -)
-
-class QCompressedHelpInfo
+class QMediaNetworkAccessControl : QMediaControl
 {
 %TypeHeaderCode
-#include <qcompressedhelpinfo.h>
+#include <qmedianetworkaccesscontrol.h>
 %End
 
 public:
-    QCompressedHelpInfo();
-    QCompressedHelpInfo(const QCompressedHelpInfo &other);
-    ~QCompressedHelpInfo();
-    void swap(QCompressedHelpInfo &other);
-    QString namespaceName() const;
-    QString component() const;
-    QVersionNumber version() const;
-    static QCompressedHelpInfo fromCompressedHelpFile(const QString &documentationFileName);
-};
+    virtual ~QMediaNetworkAccessControl();
+    virtual void setConfigurations(const QList<QNetworkConfiguration> &configuration) = 0;
+    virtual QNetworkConfiguration currentConfiguration() const = 0;
 
-%End
+signals:
+    void configurationChanged(const QNetworkConfiguration &configuration);
+
+protected:
+    explicit QMediaNetworkAccessControl(QObject *parent /TransferThis/ = 0);
+};
diff --git a/sip/QtMultimedia/qmediaplayer.sip b/sip/QtMultimedia/qmediaplayer.sip
index a5e8c8c5..67b1008b 100644
--- a/sip/QtMultimedia/qmediaplayer.sip
+++ b/sip/QtMultimedia/qmediaplayer.sip
@@ -76,6 +76,9 @@ public:
     void setVideoOutput(QVideoWidget *);
     void setVideoOutput(QGraphicsVideoItem *);
     void setVideoOutput(QAbstractVideoSurface *surface);
+%If (Qt_5_15_0 -)
+    void setVideoOutput(const QVector<QAbstractVideoSurface *> &surfaces);
+%End
     QMediaContent media() const;
     const QIODevice *mediaStream() const;
     QMediaPlaylist *playlist() const;
diff --git a/sip/QtMultimedia/qmediaplayercontrol.sip b/sip/QtMultimedia/qmediaplayercontrol.sip
new file mode 100644
index 00000000..78173356
--- /dev/null
+++ b/sip/QtMultimedia/qmediaplayercontrol.sip
@@ -0,0 +1,72 @@
+// qmediaplayercontrol.sip generated by MetaSIP
+//
+// This file is part of the QtMultimedia Python extension module.
+//
+// Copyright (c) 2020 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// This file may be used under the terms of the GNU General Public License
+// version 3.0 as published by the Free Software Foundation and appearing in
+// the file LICENSE included in the packaging of this file.  Please review the
+// following information to ensure the GNU General Public License version 3.0
+// requirements will be met: http://www.gnu.org/copyleft/gpl.html.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QMediaPlayerControl : QMediaControl
+{
+%TypeHeaderCode
+#include <qmediaplayercontrol.h>
+%End
+
+public:
+    virtual ~QMediaPlayerControl();
+    virtual QMediaPlayer::State state() const = 0;
+    virtual QMediaPlayer::MediaStatus mediaStatus() const = 0;
+    virtual qint64 duration() const = 0;
+    virtual qint64 position() const = 0;
+    virtual void setPosition(qint64 position) = 0;
+    virtual int volume() const = 0;
+    virtual void setVolume(int volume) = 0;
+    virtual bool isMuted() const = 0;
+    virtual void setMuted(bool mute) = 0;
+    virtual int bufferStatus() const = 0;
+    virtual bool isAudioAvailable() const = 0;
+    virtual bool isVideoAvailable() const = 0;
+    virtual bool isSeekable() const = 0;
+    virtual QMediaTimeRange availablePlaybackRanges() const = 0;
+    virtual qreal playbackRate() const = 0;
+    virtual void setPlaybackRate(qreal rate) = 0;
+    virtual QMediaContent media() const = 0;
+    virtual const QIODevice *mediaStream() const = 0;
+    virtual void setMedia(const QMediaContent &media, QIODevice *stream) = 0;
+    virtual void play() = 0;
+    virtual void pause() = 0;
+    virtual void stop() = 0;
+
+signals:
+    void mediaChanged(const QMediaContent &content);
+    void durationChanged(qint64 duration);
+    void positionChanged(qint64 position);
+    void stateChanged(QMediaPlayer::State newState);
+    void mediaStatusChanged(QMediaPlayer::MediaStatus status);
+    void volumeChanged(int volume);
+    void mutedChanged(bool mute);
+    void audioAvailableChanged(bool audioAvailable);
+    void videoAvailableChanged(bool videoAvailable);
+    void bufferStatusChanged(int percentFilled);
+    void seekableChanged(bool seekable);
+    void availablePlaybackRangesChanged(const QMediaTimeRange &ranges);
+    void playbackRateChanged(qreal rate);
+    void error(int error, const QString &errorString);
+
+protected:
+    explicit QMediaPlayerControl(QObject *parent /TransferThis/ = 0);
+};
diff --git a/sip/QtMultimedia/qmediarecordercontrol.sip b/sip/QtMultimedia/qmediarecordercontrol.sip
new file mode 100644
index 00000000..022152f1
--- /dev/null
+++ b/sip/QtMultimedia/qmediarecordercontrol.sip
@@ -0,0 +1,56 @@
+// qmediarecordercontrol.sip generated by MetaSIP
+//
+// This file is part of the QtMultimedia Python extension module.
+//
+// Copyright (c) 2020 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// This file may be used under the terms of the GNU General Public License
+// version 3.0 as published by the Free Software Foundation and appearing in
+// the file LICENSE included in the packaging of this file.  Please review the
+// following information to ensure the GNU General Public License version 3.0
+// requirements will be met: http://www.gnu.org/copyleft/gpl.html.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QMediaRecorderControl : QMediaControl
+{
+%TypeHeaderCode
+#include <qmediarecordercontrol.h>
+%End
+
+public:
+    virtual ~QMediaRecorderControl();
+    virtual QUrl outputLocation() const = 0;
+    virtual bool setOutputLocation(const QUrl &location) = 0;
+    virtual QMediaRecorder::State state() const = 0;
+    virtual QMediaRecorder::Status status() const = 0;
+    virtual qint64 duration() const = 0;
+    virtual bool isMuted() const = 0;
+    virtual qreal volume() const = 0;
+    virtual void applySettings() = 0;
+
+signals:
+    void stateChanged(QMediaRecorder::State state);
+    void statusChanged(QMediaRecorder::Status status);
+    void durationChanged(qint64 position);
+    void mutedChanged(bool muted);
+    void volumeChanged(qreal volume);
+    void actualLocationChanged(const QUrl &location);
+    void error(int error, const QString &errorString);
+
+public slots:
+    virtual void setState(QMediaRecorder::State state) = 0;
+    virtual void setMuted(bool muted) = 0;
+    virtual void setVolume(qreal volume) = 0;
+
+protected:
+    explicit QMediaRecorderControl(QObject *parent /TransferThis/ = 0);
+};
diff --git a/sip/QtRemoteObjects/qremoteobjectreplica.sip b/sip/QtMultimedia/qmediastreamscontrol.sip
similarity index 53%
copy from sip/QtRemoteObjects/qremoteobjectreplica.sip
copy to sip/QtMultimedia/qmediastreamscontrol.sip
index ce8abc70..08da9c0f 100644
--- a/sip/QtRemoteObjects/qremoteobjectreplica.sip
+++ b/sip/QtMultimedia/qmediastreamscontrol.sip
@@ -1,6 +1,6 @@
-// qremoteobjectreplica.sip generated by MetaSIP
+// qmediastreamscontrol.sip generated by MetaSIP
 //
-// This file is part of the QtRemoteObjects Python extension module.
+// This file is part of the QtMultimedia Python extension module.
 //
 // Copyright (c) 2020 Riverbank Computing Limited <info at riverbankcomputing.com>
 // 
@@ -20,35 +20,33 @@
 // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 
 
-%If (Qt_5_12_0 -)
-
-class QRemoteObjectReplica : QObject /NoDefaultCtors/
+class QMediaStreamsControl : QMediaControl
 {
 %TypeHeaderCode
-#include <qremoteobjectreplica.h>
+#include <qmediastreamscontrol.h>
 %End
 
 public:
-    enum State
+    enum StreamType
     {
-        Uninitialized,
-        Default,
-        Valid,
-        Suspect,
-        SignatureMismatch,
+        UnknownStream,
+        VideoStream,
+        AudioStream,
+        SubPictureStream,
+        DataStream,
     };
 
-    virtual ~QRemoteObjectReplica();
-    bool isReplicaValid() const;
-    bool waitForSource(int timeout = 30000) /ReleaseGIL/;
-    bool isInitialized() const;
-    QRemoteObjectReplica::State state() const;
-    QRemoteObjectNode *node() const;
-    virtual void setNode(QRemoteObjectNode *node);
+    virtual ~QMediaStreamsControl();
+    virtual int streamCount() = 0;
+    virtual QMediaStreamsControl::StreamType streamType(int streamNumber) = 0;
+    virtual QVariant metaData(int streamNumber, const QString &key) = 0;
+    virtual bool isActive(int streamNumber) = 0;
+    virtual void setActive(int streamNumber, bool state) = 0;
 
 signals:
-    void initialized();
-    void stateChanged(QRemoteObjectReplica::State state, QRemoteObjectReplica::State oldState);
-};
+    void streamsChanged();
+    void activeStreamsChanged();
 
-%End
+protected:
+    explicit QMediaStreamsControl(QObject *parent /TransferThis/ = 0);
+};
diff --git a/sip/QtCore/qrunnable.sip b/sip/QtMultimedia/qmediavideoprobecontrol.sip
similarity index 68%
copy from sip/QtCore/qrunnable.sip
copy to sip/QtMultimedia/qmediavideoprobecontrol.sip
index bf0fe34e..ceb0b0fa 100644
--- a/sip/QtCore/qrunnable.sip
+++ b/sip/QtMultimedia/qmediavideoprobecontrol.sip
@@ -1,6 +1,6 @@
-// qrunnable.sip generated by MetaSIP
+// qmediavideoprobecontrol.sip generated by MetaSIP
 //
-// This file is part of the QtCore Python extension module.
+// This file is part of the QtMultimedia Python extension module.
 //
 // Copyright (c) 2020 Riverbank Computing Limited <info at riverbankcomputing.com>
 // 
@@ -20,16 +20,19 @@
 // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 
 
-class QRunnable /Supertype=sip.wrapper/
+class QMediaVideoProbeControl : QMediaControl
 {
 %TypeHeaderCode
-#include <qrunnable.h>
+#include <qmediavideoprobecontrol.h>
 %End
 
 public:
-    QRunnable();
-    virtual ~QRunnable();
-    virtual void run() = 0 /NewThread/;
-    bool autoDelete() const;
-    void setAutoDelete(bool _autoDelete);
+    virtual ~QMediaVideoProbeControl();
+
+signals:
+    void videoFrameProbed(const QVideoFrame &frame);
+    void flush();
+
+protected:
+    explicit QMediaVideoProbeControl(QObject *parent /TransferThis/ = 0);
 };
diff --git a/sip/QtHelp/qcompressedhelpinfo.sip b/sip/QtMultimedia/qmetadatareadercontrol.sip
similarity index 57%
copy from sip/QtHelp/qcompressedhelpinfo.sip
copy to sip/QtMultimedia/qmetadatareadercontrol.sip
index ea4d0a9f..fa1b210f 100644
--- a/sip/QtHelp/qcompressedhelpinfo.sip
+++ b/sip/QtMultimedia/qmetadatareadercontrol.sip
@@ -1,6 +1,6 @@
-// qcompressedhelpinfo.sip generated by MetaSIP
+// qmetadatareadercontrol.sip generated by MetaSIP
 //
-// This file is part of the QtHelp Python extension module.
+// This file is part of the QtMultimedia Python extension module.
 //
 // Copyright (c) 2020 Riverbank Computing Limited <info at riverbankcomputing.com>
 // 
@@ -20,23 +20,23 @@
 // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 
 
-%If (Qt_5_13_0 -)
-
-class QCompressedHelpInfo
+class QMetaDataReaderControl : QMediaControl
 {
 %TypeHeaderCode
-#include <qcompressedhelpinfo.h>
+#include <qmetadatareadercontrol.h>
 %End
 
 public:
-    QCompressedHelpInfo();
-    QCompressedHelpInfo(const QCompressedHelpInfo &other);
-    ~QCompressedHelpInfo();
-    void swap(QCompressedHelpInfo &other);
-    QString namespaceName() const;
-    QString component() const;
-    QVersionNumber version() const;
-    static QCompressedHelpInfo fromCompressedHelpFile(const QString &documentationFileName);
-};
+    virtual ~QMetaDataReaderControl();
+    virtual bool isMetaDataAvailable() const = 0;
+    virtual QVariant metaData(const QString &key) const = 0;
+    virtual QStringList availableMetaData() const = 0;
 
-%End
+signals:
+    void metaDataChanged();
+    void metaDataChanged(const QString &key, const QVariant &value);
+    void metaDataAvailableChanged(bool available);
+
+protected:
+    explicit QMetaDataReaderControl(QObject *parent /TransferThis/ = 0);
+};
diff --git a/sip/QtRemoteObjects/qremoteobjectreplica.sip b/sip/QtMultimedia/qmetadatawritercontrol.sip
similarity index 53%
copy from sip/QtRemoteObjects/qremoteobjectreplica.sip
copy to sip/QtMultimedia/qmetadatawritercontrol.sip
index ce8abc70..78288cb1 100644
--- a/sip/QtRemoteObjects/qremoteobjectreplica.sip
+++ b/sip/QtMultimedia/qmetadatawritercontrol.sip
@@ -1,6 +1,6 @@
-// qremoteobjectreplica.sip generated by MetaSIP
+// qmetadatawritercontrol.sip generated by MetaSIP
 //
-// This file is part of the QtRemoteObjects Python extension module.
+// This file is part of the QtMultimedia Python extension module.
 //
 // Copyright (c) 2020 Riverbank Computing Limited <info at riverbankcomputing.com>
 // 
@@ -20,35 +20,26 @@
 // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 
 
-%If (Qt_5_12_0 -)
-
-class QRemoteObjectReplica : QObject /NoDefaultCtors/
+class QMetaDataWriterControl : QMediaControl
 {
 %TypeHeaderCode
-#include <qremoteobjectreplica.h>
+#include <qmetadatawritercontrol.h>
 %End
 
 public:
-    enum State
-    {
-        Uninitialized,
-        Default,
-        Valid,
-        Suspect,
-        SignatureMismatch,
-    };
-
-    virtual ~QRemoteObjectReplica();
-    bool isReplicaValid() const;
-    bool waitForSource(int timeout = 30000) /ReleaseGIL/;
-    bool isInitialized() const;
-    QRemoteObjectReplica::State state() const;
-    QRemoteObjectNode *node() const;
-    virtual void setNode(QRemoteObjectNode *node);
+    virtual ~QMetaDataWriterControl();
+    virtual bool isWritable() const = 0;
+    virtual bool isMetaDataAvailable() const = 0;
+    virtual QVariant metaData(const QString &key) const = 0;
+    virtual void setMetaData(const QString &key, const QVariant &value) = 0;
+    virtual QStringList availableMetaData() const = 0;
 
 signals:
-    void initialized();
-    void stateChanged(QRemoteObjectReplica::State state, QRemoteObjectReplica::State oldState);
-};
+    void metaDataChanged();
+    void metaDataChanged(const QString &key, const QVariant &value);
+    void writableChanged(bool writable);
+    void metaDataAvailableChanged(bool available);
 
-%End
+protected:
+    explicit QMetaDataWriterControl(QObject *parent /TransferThis/ = 0);
+};
diff --git a/sip/QtMultimedia/qradiodatacontrol.sip b/sip/QtMultimedia/qradiodatacontrol.sip
new file mode 100644
index 00000000..4fd3859e
--- /dev/null
+++ b/sip/QtMultimedia/qradiodatacontrol.sip
@@ -0,0 +1,52 @@
+// qradiodatacontrol.sip generated by MetaSIP
+//
+// This file is part of the QtMultimedia Python extension module.
+//
+// Copyright (c) 2020 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// This file may be used under the terms of the GNU General Public License
+// version 3.0 as published by the Free Software Foundation and appearing in
+// the file LICENSE included in the packaging of this file.  Please review the
+// following information to ensure the GNU General Public License version 3.0
+// requirements will be met: http://www.gnu.org/copyleft/gpl.html.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QRadioDataControl : QMediaControl
+{
+%TypeHeaderCode
+#include <qradiodatacontrol.h>
+%End
+
+public:
+    virtual ~QRadioDataControl();
+    virtual QString stationId() const = 0;
+    virtual QRadioData::ProgramType programType() const = 0;
+    virtual QString programTypeName() const = 0;
+    virtual QString stationName() const = 0;
+    virtual QString radioText() const = 0;
+    virtual void setAlternativeFrequenciesEnabled(bool enabled) = 0;
+    virtual bool isAlternativeFrequenciesEnabled() const = 0;
+    virtual QRadioData::Error error() const = 0;
+    virtual QString errorString() const = 0;
+
+signals:
+    void stationIdChanged(QString stationId);
+    void programTypeChanged(QRadioData::ProgramType programType);
+    void programTypeNameChanged(QString programTypeName);
+    void stationNameChanged(QString stationName);
+    void radioTextChanged(QString radioText);
+    void alternativeFrequenciesEnabledChanged(bool enabled);
+    void error(QRadioData::Error err);
+
+protected:
+    explicit QRadioDataControl(QObject *parent /TransferThis/ = 0);
+};
diff --git a/sip/QtMultimedia/qradiotunercontrol.sip b/sip/QtMultimedia/qradiotunercontrol.sip
new file mode 100644
index 00000000..4be25e01
--- /dev/null
+++ b/sip/QtMultimedia/qradiotunercontrol.sip
@@ -0,0 +1,73 @@
+// qradiotunercontrol.sip generated by MetaSIP
+//
+// This file is part of the QtMultimedia Python extension module.
+//
+// Copyright (c) 2020 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// This file may be used under the terms of the GNU General Public License
+// version 3.0 as published by the Free Software Foundation and appearing in
+// the file LICENSE included in the packaging of this file.  Please review the
+// following information to ensure the GNU General Public License version 3.0
+// requirements will be met: http://www.gnu.org/copyleft/gpl.html.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QRadioTunerControl : QMediaControl
+{
+%TypeHeaderCode
+#include <qradiotunercontrol.h>
+%End
+
+public:
+    virtual ~QRadioTunerControl();
+    virtual QRadioTuner::State state() const = 0;
+    virtual QRadioTuner::Band band() const = 0;
+    virtual void setBand(QRadioTuner::Band b) = 0;
+    virtual bool isBandSupported(QRadioTuner::Band b) const = 0;
+    virtual int frequency() const = 0;
+    virtual int frequencyStep(QRadioTuner::Band b) const = 0;
+    virtual QPair<int, int> frequencyRange(QRadioTuner::Band b) const = 0;
+    virtual void setFrequency(int frequency) = 0;
+    virtual bool isStereo() const = 0;
+    virtual QRadioTuner::StereoMode stereoMode() const = 0;
+    virtual void setStereoMode(QRadioTuner::StereoMode mode) = 0;
+    virtual int signalStrength() const = 0;
+    virtual int volume() const = 0;
+    virtual void setVolume(int volume) = 0;
+    virtual bool isMuted() const = 0;
+    virtual void setMuted(bool muted) = 0;
+    virtual bool isSearching() const = 0;
+    virtual bool isAntennaConnected() const;
+    virtual void searchForward() = 0;
+    virtual void searchBackward() = 0;
+    virtual void searchAllStations(QRadioTuner::SearchMode searchMode = QRadioTuner::SearchFast) = 0;
+    virtual void cancelSearch() = 0;
+    virtual void start() = 0;
+    virtual void stop() = 0;
+    virtual QRadioTuner::Error error() const = 0;
+    virtual QString errorString() const = 0;
+
+signals:
+    void stateChanged(QRadioTuner::State state);
+    void bandChanged(QRadioTuner::Band band);
+    void frequencyChanged(int frequency);
+    void stereoStatusChanged(bool stereo);
+    void searchingChanged(bool searching);
+    void signalStrengthChanged(int signalStrength);
+    void volumeChanged(int volume);
+    void mutedChanged(bool muted);
+    void error(QRadioTuner::Error err);
+    void stationFound(int frequency, QString stationId);
+    void antennaConnectedChanged(bool connectionStatus);
+
+protected:
+    explicit QRadioTunerControl(QObject *parent /TransferThis/ = 0);
+};
diff --git a/sip/QtRemoteObjects/qremoteobjectreplica.sip b/sip/QtMultimedia/qvideodeviceselectorcontrol.sip
similarity index 53%
copy from sip/QtRemoteObjects/qremoteobjectreplica.sip
copy to sip/QtMultimedia/qvideodeviceselectorcontrol.sip
index ce8abc70..bc4abcd3 100644
--- a/sip/QtRemoteObjects/qremoteobjectreplica.sip
+++ b/sip/QtMultimedia/qvideodeviceselectorcontrol.sip
@@ -1,6 +1,6 @@
-// qremoteobjectreplica.sip generated by MetaSIP
+// qvideodeviceselectorcontrol.sip generated by MetaSIP
 //
-// This file is part of the QtRemoteObjects Python extension module.
+// This file is part of the QtMultimedia Python extension module.
 //
 // Copyright (c) 2020 Riverbank Computing Limited <info at riverbankcomputing.com>
 // 
@@ -20,35 +20,28 @@
 // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 
 
-%If (Qt_5_12_0 -)
-
-class QRemoteObjectReplica : QObject /NoDefaultCtors/
+class QVideoDeviceSelectorControl : QMediaControl
 {
 %TypeHeaderCode
-#include <qremoteobjectreplica.h>
+#include <qvideodeviceselectorcontrol.h>
 %End
 
 public:
-    enum State
-    {
-        Uninitialized,
-        Default,
-        Valid,
-        Suspect,
-        SignatureMismatch,
-    };
+    virtual ~QVideoDeviceSelectorControl();
+    virtual int deviceCount() const = 0;
+    virtual QString deviceName(int index) const = 0;
+    virtual QString deviceDescription(int index) const = 0;
+    virtual int defaultDevice() const = 0;
+    virtual int selectedDevice() const = 0;
 
-    virtual ~QRemoteObjectReplica();
-    bool isReplicaValid() const;
-    bool waitForSource(int timeout = 30000) /ReleaseGIL/;
-    bool isInitialized() const;
-    QRemoteObjectReplica::State state() const;
-    QRemoteObjectNode *node() const;
-    virtual void setNode(QRemoteObjectNode *node);
+public slots:
+    virtual void setSelectedDevice(int index) = 0;
 
 signals:
-    void initialized();
-    void stateChanged(QRemoteObjectReplica::State state, QRemoteObjectReplica::State oldState);
-};
+    void selectedDeviceChanged(int index);
+    void selectedDeviceChanged(const QString &name);
+    void devicesChanged();
 
-%End
+protected:
+    explicit QVideoDeviceSelectorControl(QObject *parent /TransferThis/ = 0);
+};
diff --git a/sip/QtHelp/qhelpfilterengine.sip b/sip/QtMultimedia/qvideoencodersettingscontrol.sip
similarity index 50%
copy from sip/QtHelp/qhelpfilterengine.sip
copy to sip/QtMultimedia/qvideoencodersettingscontrol.sip
index c89ffefa..72f5979d 100644
--- a/sip/QtHelp/qhelpfilterengine.sip
+++ b/sip/QtMultimedia/qvideoencodersettingscontrol.sip
@@ -1,6 +1,6 @@
-// qhelpfilterengine.sip generated by MetaSIP
+// qvideoencodersettingscontrol.sip generated by MetaSIP
 //
-// This file is part of the QtHelp Python extension module.
+// This file is part of the QtMultimedia Python extension module.
 //
 // Copyright (c) 2020 Riverbank Computing Limited <info at riverbankcomputing.com>
 // 
@@ -20,31 +20,21 @@
 // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 
 
-%If (Qt_5_13_0 -)
-
-class QHelpFilterEngine : QObject /NoDefaultCtors/
+class QVideoEncoderSettingsControl : QMediaControl
 {
 %TypeHeaderCode
-#include <qhelpfilterengine.h>
+#include <qvideoencodersettingscontrol.h>
 %End
 
 public:
-    QMap<QString, QString> namespaceToComponent() const;
-    QMap<QString, QVersionNumber> namespaceToVersion() const;
-    QStringList filters() const;
-    QString activeFilter() const;
-    bool setActiveFilter(const QString &filterName);
-    QStringList availableComponents() const;
-    QHelpFilterData filterData(const QString &filterName) const;
-    bool setFilterData(const QString &filterName, const QHelpFilterData &filterData);
-    bool removeFilter(const QString &filterName);
-    QStringList namespacesForFilter(const QString &filterName) const;
-
-signals:
-    void filterActivated(const QString &newFilter);
+    virtual ~QVideoEncoderSettingsControl();
+    virtual QList<QSize> supportedResolutions(const QVideoEncoderSettings &settings, bool *continuous = 0) const = 0;
+    virtual QList<double> supportedFrameRates(const QVideoEncoderSettings &settings, bool *continuous = 0) const = 0;
+    virtual QStringList supportedVideoCodecs() const = 0;
+    virtual QString videoCodecDescription(const QString &codec) const = 0;
+    virtual QVideoEncoderSettings videoSettings() const = 0;
+    virtual void setVideoSettings(const QVideoEncoderSettings &settings) = 0;
 
 protected:
-    virtual ~QHelpFilterEngine();
+    explicit QVideoEncoderSettingsControl(QObject *parent /TransferThis/ = 0);
 };
-
-%End
diff --git a/sip/QtMultimedia/qvideoframe.sip b/sip/QtMultimedia/qvideoframe.sip
index fee693bd..d5f078ab 100644
--- a/sip/QtMultimedia/qvideoframe.sip
+++ b/sip/QtMultimedia/qvideoframe.sip
@@ -148,4 +148,7 @@ public:
 %If (Qt_5_13_0 -)
     QAbstractVideoBuffer *buffer() const;
 %End
+%If (Qt_5_15_0 -)
+    QImage image() const;
+%End
 };
diff --git a/sip/QtCore/qrunnable.sip b/sip/QtMultimedia/qvideorenderercontrol.sip
similarity index 66%
copy from sip/QtCore/qrunnable.sip
copy to sip/QtMultimedia/qvideorenderercontrol.sip
index bf0fe34e..596d751a 100644
--- a/sip/QtCore/qrunnable.sip
+++ b/sip/QtMultimedia/qvideorenderercontrol.sip
@@ -1,6 +1,6 @@
-// qrunnable.sip generated by MetaSIP
+// qvideorenderercontrol.sip generated by MetaSIP
 //
-// This file is part of the QtCore Python extension module.
+// This file is part of the QtMultimedia Python extension module.
 //
 // Copyright (c) 2020 Riverbank Computing Limited <info at riverbankcomputing.com>
 // 
@@ -20,16 +20,17 @@
 // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 
 
-class QRunnable /Supertype=sip.wrapper/
+class QVideoRendererControl : QMediaControl
 {
 %TypeHeaderCode
-#include <qrunnable.h>
+#include <qvideorenderercontrol.h>
 %End
 
 public:
-    QRunnable();
-    virtual ~QRunnable();
-    virtual void run() = 0 /NewThread/;
-    bool autoDelete() const;
-    void setAutoDelete(bool _autoDelete);
+    virtual ~QVideoRendererControl();
+    virtual QAbstractVideoSurface *surface() const = 0;
+    virtual void setSurface(QAbstractVideoSurface *surface) = 0;
+
+protected:
+    explicit QVideoRendererControl(QObject *parent /TransferThis/ = 0);
 };
diff --git a/sip/QtMultimedia/qvideowindowcontrol.sip b/sip/QtMultimedia/qvideowindowcontrol.sip
new file mode 100644
index 00000000..3cef9dd1
--- /dev/null
+++ b/sip/QtMultimedia/qvideowindowcontrol.sip
@@ -0,0 +1,60 @@
+// qvideowindowcontrol.sip generated by MetaSIP
+//
+// This file is part of the QtMultimedia Python extension module.
+//
+// Copyright (c) 2020 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// This file may be used under the terms of the GNU General Public License
+// version 3.0 as published by the Free Software Foundation and appearing in
+// the file LICENSE included in the packaging of this file.  Please review the
+// following information to ensure the GNU General Public License version 3.0
+// requirements will be met: http://www.gnu.org/copyleft/gpl.html.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QVideoWindowControl : QMediaControl
+{
+%TypeHeaderCode
+#include <qvideowindowcontrol.h>
+%End
+
+public:
+    virtual ~QVideoWindowControl();
+    virtual WId winId() const = 0;
+    virtual void setWinId(WId id) = 0;
+    virtual QRect displayRect() const = 0;
+    virtual void setDisplayRect(const QRect &rect) = 0;
+    virtual bool isFullScreen() const = 0;
+    virtual void setFullScreen(bool fullScreen) = 0;
+    virtual void repaint() = 0;
+    virtual QSize nativeSize() const = 0;
+    virtual Qt::AspectRatioMode aspectRatioMode() const = 0;
+    virtual void setAspectRatioMode(Qt::AspectRatioMode mode) = 0;
+    virtual int brightness() const = 0;
+    virtual void setBrightness(int brightness) = 0;
+    virtual int contrast() const = 0;
+    virtual void setContrast(int contrast) = 0;
+    virtual int hue() const = 0;
+    virtual void setHue(int hue) = 0;
+    virtual int saturation() const = 0;
+    virtual void setSaturation(int saturation) = 0;
+
+signals:
+    void fullScreenChanged(bool fullScreen);
+    void brightnessChanged(int brightness);
+    void contrastChanged(int contrast);
+    void hueChanged(int hue);
+    void saturationChanged(int saturation);
+    void nativeSizeChanged();
+
+protected:
+    explicit QVideoWindowControl(QObject *parent /TransferThis/ = 0);
+};
diff --git a/sip/QtMultimediaWidgets/QtMultimediaWidgetsmod.sip b/sip/QtMultimediaWidgets/QtMultimediaWidgetsmod.sip
index 753afe13..310c02be 100644
--- a/sip/QtMultimediaWidgets/QtMultimediaWidgetsmod.sip
+++ b/sip/QtMultimediaWidgets/QtMultimediaWidgetsmod.sip
@@ -50,3 +50,4 @@ WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 %Include qcameraviewfinder.sip
 %Include qgraphicsvideoitem.sip
 %Include qvideowidget.sip
+%Include qvideowidgetcontrol.sip
diff --git a/sip/QtMultimediaWidgets/qgraphicsvideoitem.sip b/sip/QtMultimediaWidgets/qgraphicsvideoitem.sip
index 3a729ac0..d8a46b80 100644
--- a/sip/QtMultimediaWidgets/qgraphicsvideoitem.sip
+++ b/sip/QtMultimediaWidgets/qgraphicsvideoitem.sip
@@ -52,6 +52,11 @@ protected:
     virtual void timerEvent(QTimerEvent *event);
     virtual QVariant itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value);
     virtual bool setMediaObject(QMediaObject *object);
+
+public:
+%If (Qt_5_15_0 -)
+    QAbstractVideoSurface *videoSurface() const;
+%End
 };
 
 %ModuleCode
diff --git a/sip/QtMultimediaWidgets/qvideowidget.sip b/sip/QtMultimediaWidgets/qvideowidget.sip
index d9f46007..cfac6fc0 100644
--- a/sip/QtMultimediaWidgets/qvideowidget.sip
+++ b/sip/QtMultimediaWidgets/qvideowidget.sip
@@ -32,8 +32,9 @@ class QVideoWidget : QWidget, QMediaBindableInterface
         sipTypeDef **type;
         int yes, no;
     } graph[] = {
-        {sipName_QGraphicsVideoItem, &sipType_QGraphicsVideoItem, -1, 1},
-        {sipName_QVideoWidget, &sipType_QVideoWidget, 2, -1},
+        {sipName_QVideoWidget, &sipType_QVideoWidget, 3, 1},
+        {sipName_QGraphicsVideoItem, &sipType_QGraphicsVideoItem, -1, 2},
+        {sipName_QVideoWidgetControl, &sipType_QVideoWidgetControl, -1, -1},
         {sipName_QCameraViewfinder, &sipType_QCameraViewfinder, -1, -1},
     };
     
@@ -95,4 +96,9 @@ protected:
     virtual void moveEvent(QMoveEvent *event);
     virtual void paintEvent(QPaintEvent *event);
     virtual bool setMediaObject(QMediaObject *object);
+
+public:
+%If (Qt_5_15_0 -)
+    QAbstractVideoSurface *videoSurface() const;
+%End
 };
diff --git a/sip/QtMultimediaWidgets/qvideowidgetcontrol.sip b/sip/QtMultimediaWidgets/qvideowidgetcontrol.sip
new file mode 100644
index 00000000..117707e1
--- /dev/null
+++ b/sip/QtMultimediaWidgets/qvideowidgetcontrol.sip
@@ -0,0 +1,54 @@
+// qvideowidgetcontrol.sip generated by MetaSIP
+//
+// This file is part of the QtMultimediaWidgets Python extension module.
+//
+// Copyright (c) 2020 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// This file may be used under the terms of the GNU General Public License
+// version 3.0 as published by the Free Software Foundation and appearing in
+// the file LICENSE included in the packaging of this file.  Please review the
+// following information to ensure the GNU General Public License version 3.0
+// requirements will be met: http://www.gnu.org/copyleft/gpl.html.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+class QVideoWidgetControl : QMediaControl
+{
+%TypeHeaderCode
+#include <qvideowidgetcontrol.h>
+%End
+
+public:
+    virtual ~QVideoWidgetControl();
+    virtual QWidget *videoWidget() = 0;
+    virtual Qt::AspectRatioMode aspectRatioMode() const = 0;
+    virtual void setAspectRatioMode(Qt::AspectRatioMode mode) = 0;
+    virtual bool isFullScreen() const = 0;
+    virtual void setFullScreen(bool fullScreen) = 0;
+    virtual int brightness() const = 0;
+    virtual void setBrightness(int brightness) = 0;
+    virtual int contrast() const = 0;
+    virtual void setContrast(int contrast) = 0;
+    virtual int hue() const = 0;
+    virtual void setHue(int hue) = 0;
+    virtual int saturation() const = 0;
+    virtual void setSaturation(int saturation) = 0;
+
+signals:
+    void fullScreenChanged(bool fullScreen);
+    void brightnessChanged(int brightness);
+    void contrastChanged(int contrast);
+    void hueChanged(int hue);
+    void saturationChanged(int saturation);
+
+protected:
+    explicit QVideoWidgetControl(QObject *parent /TransferThis/ = 0);
+};
diff --git a/sip/QtNetwork/qabstractsocket.sip b/sip/QtNetwork/qabstractsocket.sip
index d3c7c37c..d64e4a0c 100644
--- a/sip/QtNetwork/qabstractsocket.sip
+++ b/sip/QtNetwork/qabstractsocket.sip
@@ -170,6 +170,9 @@ signals:
     void disconnected();
     void stateChanged(QAbstractSocket::SocketState);
     void error(QAbstractSocket::SocketError);
+%If (Qt_5_15_0 -)
+    void errorOccurred(QAbstractSocket::SocketError);
+%End
     void proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *authenticator);
 
 protected:
diff --git a/sip/QtNetwork/qlocalsocket.sip b/sip/QtNetwork/qlocalsocket.sip
index 63ac1695..4d6a8759 100644
--- a/sip/QtNetwork/qlocalsocket.sip
+++ b/sip/QtNetwork/qlocalsocket.sip
@@ -88,6 +88,9 @@ signals:
     void connected();
     void disconnected();
     void error(QLocalSocket::LocalSocketError socketError);
+%If (Qt_5_15_0 -)
+    void errorOccurred(QLocalSocket::LocalSocketError socketError);
+%End
     void stateChanged(QLocalSocket::LocalSocketState socketState);
 
 protected:
diff --git a/sip/QtNetwork/qnetworkaccessmanager.sip b/sip/QtNetwork/qnetworkaccessmanager.sip
index 40cba67d..6ee29585 100644
--- a/sip/QtNetwork/qnetworkaccessmanager.sip
+++ b/sip/QtNetwork/qnetworkaccessmanager.sip
@@ -157,4 +157,10 @@ public:
 %If (Qt_5_14_0 -)
     void setAutoDeleteReplies(bool autoDelete);
 %End
+%If (Qt_5_15_0 -)
+    int transferTimeout() const;
+%End
+%If (Qt_5_15_0 -)
+    void setTransferTimeout(int timeout = QNetworkRequest::TransferTimeoutConstant::DefaultTransferTimeoutConstant);
+%End
 };
diff --git a/sip/QtNetwork/qnetworkreply.sip b/sip/QtNetwork/qnetworkreply.sip
index 1e2603b7..c879dc03 100644
--- a/sip/QtNetwork/qnetworkreply.sip
+++ b/sip/QtNetwork/qnetworkreply.sip
@@ -116,6 +116,9 @@ signals:
 %End
 %End
     void error(QNetworkReply::NetworkError);
+%If (Qt_5_15_0 -)
+    void errorOccurred(QNetworkReply::NetworkError);
+%End
 %If (PyQt_SSL)
     void sslErrors(const QList<QSslError> &errors);
 %End
diff --git a/sip/QtNetwork/qnetworkrequest.sip b/sip/QtNetwork/qnetworkrequest.sip
index 3e19a6db..7d249dae 100644
--- a/sip/QtNetwork/qnetworkrequest.sip
+++ b/sip/QtNetwork/qnetworkrequest.sip
@@ -84,9 +84,15 @@ public:
 %If (Qt_5_8_0 -)
         HTTP2AllowedAttribute,
 %End
+%If (Qt_5_15_0 -)
+        Http2AllowedAttribute,
+%End
 %If (Qt_5_8_0 -)
         HTTP2WasUsedAttribute,
 %End
+%If (Qt_5_15_0 -)
+        Http2WasUsedAttribute,
+%End
 %If (Qt_5_9_0 -)
         OriginalContentLengthAttribute,
 %End
@@ -179,4 +185,18 @@ public:
 %If (Qt_5_14_0 -)
     void setHttp2Configuration(const QHttp2Configuration &configuration);
 %End
+%If (Qt_5_15_0 -)
+
+    enum TransferTimeoutConstant
+    {
+        DefaultTransferTimeoutConstant,
+    };
+
+%End
+%If (Qt_5_15_0 -)
+    int transferTimeout() const;
+%End
+%If (Qt_5_15_0 -)
+    void setTransferTimeout(int timeout = QNetworkRequest::TransferTimeoutConstant::DefaultTransferTimeoutConstant);
+%End
 };
diff --git a/sip/QtNetwork/qsslcertificate.sip b/sip/QtNetwork/qsslcertificate.sip
index 848ec7e8..66ee2444 100644
--- a/sip/QtNetwork/qsslcertificate.sip
+++ b/sip/QtNetwork/qsslcertificate.sip
@@ -93,6 +93,16 @@ public:
 %If (Qt_5_12_0 -)
     QString subjectDisplayName() const;
 %End
+%If (Qt_5_15_0 -)
+
+    enum class PatternSyntax
+    {
+        RegularExpression,
+        Wildcard,
+        FixedString,
+    };
+
+%End
 };
 
 %End
diff --git a/sip/QtNetwork/qsslconfiguration.sip b/sip/QtNetwork/qsslconfiguration.sip
index ac7ecc25..545a1e9e 100644
--- a/sip/QtNetwork/qsslconfiguration.sip
+++ b/sip/QtNetwork/qsslconfiguration.sip
@@ -148,6 +148,15 @@ public:
 %If (Qt_5_13_0 -)
     bool ocspStaplingEnabled() const;
 %End
+%If (Qt_5_15_0 -)
+    void addCaCertificate(const QSslCertificate &certificate);
+%End
+%If (Qt_5_15_0 -)
+    bool addCaCertificates(const QString &path, QSsl::EncodingFormat format = QSsl::Pem, QSslCertificate::PatternSyntax syntax = QSslCertificate::PatternSyntax::FixedString);
+%End
+%If (Qt_5_15_0 -)
+    void addCaCertificates(const QList<QSslCertificate> &certificates);
+%End
 };
 
 %End
diff --git a/sip/QtNetwork/qsslsocket.sip b/sip/QtNetwork/qsslsocket.sip
index 892d5358..cba5652c 100644
--- a/sip/QtNetwork/qsslsocket.sip
+++ b/sip/QtNetwork/qsslsocket.sip
@@ -192,6 +192,14 @@ public:
 %If (Qt_5_13_0 -)
     QVector<QOcspResponse> ocspResponses() const;
 %End
+%If (Qt_5_15_0 -)
+    QList<QSslError> sslHandshakeErrors() const;
+%End
+
+signals:
+%If (Qt_5_15_0 -)
+    void newSessionTicketReceived();
+%End
 };
 
 %End
diff --git a/sip/QtQml/qjsengine.sip b/sip/QtQml/qjsengine.sip
index 35488731..c6c0a410 100644
--- a/sip/QtQml/qjsengine.sip
+++ b/sip/QtQml/qjsengine.sip
@@ -36,18 +36,23 @@ class QJSEngine : QObject
         sipTypeDef **type;
         int yes, no;
     } graph[] = {
-        {sipName_QQmlExpression, &sipType_QQmlExpression, -1, 1},
-    #if QT_VERSION >= 0x050200
-        {sipName_QQmlFileSelector, &sipType_QQmlFileSelector, -1, 2},
+        {sipName_QJSEngine, &sipType_QJSEngine, 8, 1},
+        {sipName_QQmlComponent, &sipType_QQmlComponent, -1, 2},
+        {sipName_QQmlContext, &sipType_QQmlContext, -1, 3},
+    #if QT_VERSION >= 0x050f00
+        {sipName_QQmlEngineExtensionPlugin, &sipType_QQmlEngineExtensionPlugin, -1, 4},
     #else
-        {0, 0, -1, 2},
+        {0, 0, -1, 4},
     #endif
-        {sipName_QQmlContext, &sipType_QQmlContext, -1, 3},
-        {sipName_QQmlPropertyMap, &sipType_QQmlPropertyMap, -1, 4},
-        {sipName_QQmlComponent, &sipType_QQmlComponent, -1, 5},
+        {sipName_QQmlExpression, &sipType_QQmlExpression, -1, 5},
         {sipName_QQmlExtensionPlugin, &sipType_QQmlExtensionPlugin, -1, 6},
-        {sipName_QJSEngine, &sipType_QJSEngine, 7, -1},
-        {sipName_QQmlEngine, &sipType_QQmlEngine, 8, -1},
+    #if QT_VERSION >= 0x050200
+        {sipName_QQmlFileSelector, &sipType_QQmlFileSelector, -1, 7},
+    #else
+        {0, 0, -1, 7},
+    #endif
+        {sipName_QQmlPropertyMap, &sipType_QQmlPropertyMap, -1, -1},
+        {sipName_QQmlEngine, &sipType_QQmlEngine, 9, -1},
     #if QT_VERSION >= 0x050100
         {sipName_QQmlApplicationEngine, &sipType_QQmlApplicationEngine, -1, -1},
     #else
@@ -125,6 +130,17 @@ public:
 %If (Qt_5_14_0 -)
     bool isInterrupted() const;
 %End
+%If (Qt_5_15_0 -)
+    QString uiLanguage() const;
+%End
+%If (Qt_5_15_0 -)
+    void setUiLanguage(const QString &language);
+%End
+
+signals:
+%If (Qt_5_15_0 -)
+    void uiLanguageChanged();
+%End
 };
 
 %If (Qt_5_5_0 -)
diff --git a/sip/QtQml/qqmlapplicationengine.sip b/sip/QtQml/qqmlapplicationengine.sip
index 81095662..571edd52 100644
--- a/sip/QtQml/qqmlapplicationengine.sip
+++ b/sip/QtQml/qqmlapplicationengine.sip
@@ -37,8 +37,10 @@ public:
     QList<QObject *> rootObjects() const;
 %End
 %If (- Qt_5_9_0)
+%If (Qt_5_15_0 -)
     QList<QObject *> rootObjects();
 %End
+%End
 
 public slots:
     void load(const QUrl &url) /ReleaseGIL/;
diff --git a/sip/QtQml/qqmlextensionplugin.sip b/sip/QtQml/qqmlextensionplugin.sip
index 280265cd..929f906f 100644
--- a/sip/QtQml/qqmlextensionplugin.sip
+++ b/sip/QtQml/qqmlextensionplugin.sip
@@ -35,3 +35,19 @@ public:
     QUrl baseUrl() const;
 %End
 };
+
+%If (Qt_5_15_0 -)
+
+class QQmlEngineExtensionPlugin : QObject
+{
+%TypeHeaderCode
+#include <qqmlextensionplugin.h>
+%End
+
+public:
+    explicit QQmlEngineExtensionPlugin(QObject *parent /TransferThis/ = 0);
+    virtual ~QQmlEngineExtensionPlugin();
+    virtual void initializeEngine(QQmlEngine *engine, const char *uri);
+};
+
+%End
diff --git a/sip/QtQml/qqmlincubator.sip b/sip/QtQml/qqmlincubator.sip
index 363521c4..765a4a01 100644
--- a/sip/QtQml/qqmlincubator.sip
+++ b/sip/QtQml/qqmlincubator.sip
@@ -54,6 +54,9 @@ public:
     QQmlIncubator::IncubationMode incubationMode() const;
     QQmlIncubator::Status status() const;
     QObject *object() const /Factory/;
+%If (Qt_5_15_0 -)
+    void setInitialProperties(const QVariantMap &initialProperties);
+%End
 
 protected:
     virtual void statusChanged(QQmlIncubator::Status);
diff --git a/sip/QtQml/qqmllist.sip b/sip/QtQml/qqmllist.sip
index eac4a058..ec097b12 100644
--- a/sip/QtQml/qqmllist.sip
+++ b/sip/QtQml/qqmllist.sip
@@ -44,4 +44,16 @@ public:
     QObject *at(int) const;
     bool clear() const;
     int count() const;
+%If (Qt_5_15_0 -)
+    bool canReplace() const;
+%End
+%If (Qt_5_15_0 -)
+    bool canRemoveLast() const;
+%End
+%If (Qt_5_15_0 -)
+    bool replace(int, QObject *) const;
+%End
+%If (Qt_5_15_0 -)
+    bool removeLast() const;
+%End
 };
diff --git a/sip/QtQuick/qquickwindow.sip b/sip/QtQuick/qquickwindow.sip
index c29f6c19..47842b62 100644
--- a/sip/QtQuick/qquickwindow.sip
+++ b/sip/QtQuick/qquickwindow.sip
@@ -176,6 +176,9 @@ protected:
     virtual void mouseDoubleClickEvent(QMouseEvent *);
     virtual void mouseMoveEvent(QMouseEvent *);
     virtual void wheelEvent(QWheelEvent *);
+%If (Qt_5_15_0 -)
+    virtual void tabletEvent(QTabletEvent *);
+%End
 
 public:
 %If (Qt_5_1_0 -)
diff --git a/sip/QtQuick/qsggeometry.sip b/sip/QtQuick/qsggeometry.sip
index 998900d2..0f44a52a 100644
--- a/sip/QtQuick/qsggeometry.sip
+++ b/sip/QtQuick/qsggeometry.sip
@@ -401,4 +401,7 @@ enum /NoScope/
 %If (Qt_5_8_0 -)
     static void updateColoredRectGeometry(QSGGeometry *g, const QRectF &rect);
 %End
+
+private:
+    QSGGeometry(const QSGGeometry &);
 };
diff --git a/sip/QtQuick/qsgmaterialrhishader.sip b/sip/QtQuick/qsgmaterialrhishader.sip
index 2723d5cc..8b741e82 100644
--- a/sip/QtQuick/qsgmaterialrhishader.sip
+++ b/sip/QtQuick/qsgmaterialrhishader.sip
@@ -19,3 +19,105 @@
 // This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
 // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 
+
+%If (Qt_5_14_0 -)
+
+class QSGMaterialRhiShader : QSGMaterialShader
+{
+%TypeHeaderCode
+#include <qsgmaterialrhishader.h>
+%End
+
+public:
+    class RenderState
+    {
+%TypeHeaderCode
+#include <qsgmaterialrhishader.h>
+%End
+
+        typedef QSGMaterialShader::RenderState::DirtyStates DirtyStates;
+
+    public:
+        QSGMaterialRhiShader::RenderState::DirtyStates dirtyStates() const;
+        bool isMatrixDirty() const;
+        bool isOpacityDirty() const;
+        float opacity() const;
+        QMatrix4x4 combinedMatrix() const;
+        QMatrix4x4 modelViewMatrix() const;
+        QMatrix4x4 projectionMatrix() const;
+        QRect viewportRect() const;
+        QRect deviceRect() const;
+        float determinant() const;
+        float devicePixelRatio() const;
+        QByteArray *uniformData();
+    };
+
+    struct GraphicsPipelineState
+    {
+%TypeHeaderCode
+#include <qsgmaterialrhishader.h>
+%End
+
+        enum BlendFactor
+        {
+            Zero,
+            One,
+            SrcColor,
+            OneMinusSrcColor,
+            DstColor,
+            OneMinusDstColor,
+            SrcAlpha,
+            OneMinusSrcAlpha,
+            DstAlpha,
+            OneMinusDstAlpha,
+            ConstantColor,
+            OneMinusConstantColor,
+            ConstantAlpha,
+            OneMinusConstantAlpha,
+            SrcAlphaSaturate,
+            Src1Color,
+            OneMinusSrc1Color,
+            Src1Alpha,
+            OneMinusSrc1Alpha,
+        };
+
+        enum ColorMaskComponent
+        {
+            R,
+            G,
+            B,
+            A,
+        };
+
+        typedef QFlags<QSGMaterialRhiShader::GraphicsPipelineState::ColorMaskComponent> ColorMask;
+
+        enum CullMode
+        {
+            CullNone,
+            CullFront,
+            CullBack,
+        };
+    };
+
+    enum Flag
+    {
+        UpdatesGraphicsPipelineState,
+    };
+
+    typedef QFlags<QSGMaterialRhiShader::Flag> Flags;
+    QSGMaterialRhiShader();
+    virtual ~QSGMaterialRhiShader();
+    virtual bool updateUniformData(QSGMaterialRhiShader::RenderState &state, QSGMaterial *newMaterial, QSGMaterial *oldMaterial);
+    virtual void updateSampledImage(QSGMaterialRhiShader::RenderState &state, int binding, QSGTexture **texture, QSGMaterial *newMaterial, QSGMaterial *oldMaterial);
+    virtual bool updateGraphicsPipelineState(QSGMaterialRhiShader::RenderState &state, QSGMaterialRhiShader::GraphicsPipelineState *ps, QSGMaterial *newMaterial, QSGMaterial *oldMaterial);
+    QSGMaterialRhiShader::Flags flags() const;
+    void setFlag(QSGMaterialRhiShader::Flags flags, bool on = true);
+};
+
+%End
+%If (Qt_5_14_0 -)
+QFlags<QSGMaterialRhiShader::GraphicsPipelineState::ColorMaskComponent> operator|(QSGMaterialRhiShader::GraphicsPipelineState::ColorMaskComponent f1, QFlags<QSGMaterialRhiShader::GraphicsPipelineState::ColorMaskComponent> f2);
+%End
+%If (Qt_5_14_0 -)
+QFlags<QSGMaterialRhiShader::Flag> operator|(QSGMaterialRhiShader::Flag f1, QFlags<QSGMaterialRhiShader::Flag> f2);
+%End
diff --git a/sip/QtQuick/qsgtexture.sip b/sip/QtQuick/qsgtexture.sip
index d2b232c7..02312e86 100644
--- a/sip/QtQuick/qsgtexture.sip
+++ b/sip/QtQuick/qsgtexture.sip
@@ -41,7 +41,7 @@ public:
 
     enum Filtering
     {
-        None,
+        None /PyName=None_/,
         Nearest,
         Linear,
     };
@@ -85,6 +85,22 @@ public:
 %If (Qt_5_14_0 -)
     int comparisonKey() const;
 %End
+%If (Qt_5_15_0 -)
+
+    struct NativeTexture
+    {
+%TypeHeaderCode
+#include <qsgtexture.h>
+%End
+
+        const void *object;
+        int layout;
+    };
+
+%End
+%If (Qt_5_15_0 -)
+    QSGTexture::NativeTexture nativeTexture() const;
+%End
 };
 
 class QSGDynamicTexture : QSGTexture
diff --git a/sip/QtXml/QtXmlmod.sip b/sip/QtQuick3D/QtQuick3Dmod.sip
similarity index 84%
copy from sip/QtXml/QtXmlmod.sip
copy to sip/QtQuick3D/QtQuick3Dmod.sip
index ee053de5..d6dd0ee9 100644
--- a/sip/QtXml/QtXmlmod.sip
+++ b/sip/QtQuick3D/QtQuick3Dmod.sip
@@ -1,6 +1,6 @@
-// QtXmlmod.sip generated by MetaSIP
+// QtQuick3Dmod.sip generated by MetaSIP
 //
-// This file is part of the QtXml Python extension module.
+// This file is part of the QtQuick3D Python extension module.
 //
 // Copyright (c) 2020 Riverbank Computing Limited <info at riverbankcomputing.com>
 // 
@@ -20,9 +20,11 @@
 // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 
 
-%Module(name=PyQt5.QtXml, keyword_arguments="Optional", use_limited_api=True)
+%Module(name=PyQt5.QtQuick3D, keyword_arguments="Optional", use_limited_api=True)
 
 %Import QtCore/QtCoremod.sip
+%Import QtGui/QtGuimod.sip
+%Import QtQml/QtQmlmod.sip
 
 %Copying
 Copyright (c) 2020 Riverbank Computing Limited <info at riverbankcomputing.com>
@@ -45,5 +47,6 @@ WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 
 %DefaultSupertype sip.simplewrapper
 
-%Include qxml.sip
-%Include qdom.sip
+%Include qquick3d.sip
+%Include qquick3dgeometry.sip
+%Include qquick3dobject.sip
diff --git a/sip/QtQuick/qsgmaterialrhishader.sip b/sip/QtQuick3D/qquick3d.sip
similarity index 76%
copy from sip/QtQuick/qsgmaterialrhishader.sip
copy to sip/QtQuick3D/qquick3d.sip
index 2723d5cc..87155d9c 100644
--- a/sip/QtQuick/qsgmaterialrhishader.sip
+++ b/sip/QtQuick3D/qquick3d.sip
@@ -1,6 +1,6 @@
-// qsgmaterialrhishader.sip generated by MetaSIP
+// qquick3d.sip generated by MetaSIP
 //
-// This file is part of the QtQuick Python extension module.
+// This file is part of the QtQuick3D Python extension module.
 //
 // Copyright (c) 2020 Riverbank Computing Limited <info at riverbankcomputing.com>
 // 
@@ -19,3 +19,17 @@
 // This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
 // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 
+
+%If (Qt_5_15_0 -)
+
+class QQuick3D
+{
+%TypeHeaderCode
+#include <qquick3d.h>
+%End
+
+public:
+    static QSurfaceFormat idealSurfaceFormat(int samples = -1);
+};
+
+%End
diff --git a/sip/QtQuick3D/qquick3dgeometry.sip b/sip/QtQuick3D/qquick3dgeometry.sip
new file mode 100644
index 00000000..093044a8
--- /dev/null
+++ b/sip/QtQuick3D/qquick3dgeometry.sip
@@ -0,0 +1,101 @@
+// qquick3dgeometry.sip generated by MetaSIP
+//
+// This file is part of the QtQuick3D Python extension module.
+//
+// Copyright (c) 2020 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// This file may be used under the terms of the GNU General Public License
+// version 3.0 as published by the Free Software Foundation and appearing in
+// the file LICENSE included in the packaging of this file.  Please review the
+// following information to ensure the GNU General Public License version 3.0
+// requirements will be met: http://www.gnu.org/copyleft/gpl.html.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_15_0 -)
+
+class QQuick3DGeometry : QQuick3DObject
+{
+%TypeHeaderCode
+#include <qquick3dgeometry.h>
+%End
+
+public:
+    explicit QQuick3DGeometry(QQuick3DObject *parent /TransferThis/ = 0);
+    virtual ~QQuick3DGeometry();
+
+    enum class PrimitiveType
+    {
+        Unknown,
+        Points,
+        LineStrip,
+        Lines,
+        TriangleStrip,
+        TriangleFan,
+        Triangles,
+    };
+
+    struct Attribute
+    {
+%TypeHeaderCode
+#include <qquick3dgeometry.h>
+%End
+
+        enum Semantic
+        {
+            UnknownSemantic,
+            IndexSemantic,
+            PositionSemantic,
+            NormalSemantic,
+            TexCoordSemantic,
+            TangentSemantic,
+            BinormalSemantic,
+        };
+
+        enum ComponentType
+        {
+            DefaultType,
+            U16Type,
+            U32Type,
+            F32Type,
+        };
+
+        QQuick3DGeometry::Attribute::Semantic semantic;
+        int offset;
+        QQuick3DGeometry::Attribute::ComponentType componentType;
+    };
+
+    QString name() const;
+    QByteArray vertexBuffer() const;
+    QByteArray indexBuffer() const;
+    int attributeCount() const;
+    QQuick3DGeometry::Attribute attribute(int index) const;
+    QQuick3DGeometry::PrimitiveType primitiveType() const;
+    QVector3D boundsMin() const;
+    QVector3D boundsMax() const;
+    int stride() const;
+    void setVertexData(const QByteArray &data);
+    void setIndexData(const QByteArray &data);
+    void setStride(int stride);
+    void setBounds(const QVector3D &min, const QVector3D &max);
+    void setPrimitiveType(QQuick3DGeometry::PrimitiveType type);
+    void addAttribute(QQuick3DGeometry::Attribute::Semantic semantic, int offset, QQuick3DGeometry::Attribute::ComponentType componentType);
+    void addAttribute(const QQuick3DGeometry::Attribute &att);
+    void clear();
+
+public slots:
+    void setName(const QString &name);
+
+signals:
+    void nameChanged();
+};
+
+%End
diff --git a/sip/QtQuick3D/qquick3dobject.sip b/sip/QtQuick3D/qquick3dobject.sip
new file mode 100644
index 00000000..9aa81b70
--- /dev/null
+++ b/sip/QtQuick3D/qquick3dobject.sip
@@ -0,0 +1,78 @@
+// qquick3dobject.sip generated by MetaSIP
+//
+// This file is part of the QtQuick3D Python extension module.
+//
+// Copyright (c) 2020 Riverbank Computing Limited <info at riverbankcomputing.com>
+// 
+// This file is part of PyQt5.
+// 
+// This file may be used under the terms of the GNU General Public License
+// version 3.0 as published by the Free Software Foundation and appearing in
+// the file LICENSE included in the packaging of this file.  Please review the
+// following information to ensure the GNU General Public License version 3.0
+// requirements will be met: http://www.gnu.org/copyleft/gpl.html.
+// 
+// If you do not wish to use this file under the terms of the GPL version 3.0
+// then you may purchase a commercial license.  For more information contact
+// info at riverbankcomputing.com.
+// 
+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+
+%If (Qt_5_15_0 -)
+
+class QQuick3DObject : QObject, QQmlParserStatus /Abstract/
+{
+%TypeHeaderCode
+#include <qquick3dobject.h>
+%End
+
+%ConvertToSubClassCode
+    static struct class_graph {
+        const char *name;
+        sipTypeDef **type;
+        int yes, no;
+    } graph[] = {
+        {sipName_QQuick3DObject, &sipType_QQuick3DObject, 1, -1},
+        {sipName_QQuick3DGeometry, &sipType_QQuick3DGeometry, -1, -1},
+    };
+    
+    int i = 0;
+    
+    sipType = NULL;
+    
+    do
+    {
+        struct class_graph *cg = &graph[i];
+    
+        if (cg->name != NULL && sipCpp->inherits(cg->name))
+        {
+            sipType = *cg->type;
+            i = cg->yes;
+        }
+        else
+            i = cg->no;
+    }
+    while (i >= 0);
+%End
+
+public:
+    explicit QQuick3DObject(QQuick3DObject *parent /TransferThis/ = 0);
+    virtual ~QQuick3DObject();
+    QString state() const;
+    void setState(const QString &state);
+    QQuick3DObject *parentItem() const;
+
+public slots:
+    void setParentItem(QQuick3DObject *parentItem);
+
+signals:
+    void stateChanged();
+
+protected:
+    virtual void classBegin();
+    virtual void componentComplete();
+};
+
+%End
diff --git a/sip/QtRemoteObjects/qremoteobjectnode.sip b/sip/QtRemoteObjects/qremoteobjectnode.sip
index 8b240119..f4613d48 100644
--- a/sip/QtRemoteObjects/qremoteobjectnode.sip
+++ b/sip/QtRemoteObjects/qremoteobjectnode.sip
@@ -168,6 +168,11 @@ public:
     virtual ~QRemoteObjectHost();
     virtual QUrl hostUrl() const;
     virtual bool setHostUrl(const QUrl &hostAddress, QRemoteObjectHostBase::AllowedSchemas allowedSchemas = QRemoteObjectHostBase::BuiltInSchemasOnly);
+
+signals:
+%If (Qt_5_15_0 -)
+    void hostUrlChanged();
+%End
 };
 
 %End
diff --git a/sip/QtRemoteObjects/qremoteobjectreplica.sip b/sip/QtRemoteObjects/qremoteobjectreplica.sip
index ce8abc70..f28299ee 100644
--- a/sip/QtRemoteObjects/qremoteobjectreplica.sip
+++ b/sip/QtRemoteObjects/qremoteobjectreplica.sip
@@ -49,6 +49,9 @@ public:
 signals:
     void initialized();
     void stateChanged(QRemoteObjectReplica::State state, QRemoteObjectReplica::State oldState);
+%If (Qt_5_15_0 -)
+    void notified();
+%End
 };
 
 %End
diff --git a/sip/QtSvg/qsvgrenderer.sip b/sip/QtSvg/qsvgrenderer.sip
index 86d1f1dd..c48e4389 100644
--- a/sip/QtSvg/qsvgrenderer.sip
+++ b/sip/QtSvg/qsvgrenderer.sip
@@ -87,4 +87,15 @@ public slots:
 
 signals:
     void repaintNeeded();
+
+public:
+%If (Qt_5_15_0 -)
+    Qt::AspectRatioMode aspectRatioMode() const;
+%End
+%If (Qt_5_15_0 -)
+    void setAspectRatioMode(Qt::AspectRatioMode mode);
+%End
+%If (Qt_5_15_0 -)
+    QTransform transformForElement(const QString &id) const;
+%End
 };
diff --git a/sip/QtWebSockets/qwebsocket.sip b/sip/QtWebSockets/qwebsocket.sip
index 1bd2b1d2..990f94a8 100644
--- a/sip/QtWebSockets/qwebsocket.sip
+++ b/sip/QtWebSockets/qwebsocket.sip
@@ -140,6 +140,33 @@ public:
 %If (Qt_5_12_0 -)
     qint64 bytesToWrite() const;
 %End
+%If (Qt_5_15_0 -)
+    void setMaxAllowedIncomingFrameSize(quint64 maxAllowedIncomingFrameSize);
+%End
+%If (Qt_5_15_0 -)
+    quint64 maxAllowedIncomingFrameSize() const;
+%End
+%If (Qt_5_15_0 -)
+    void setMaxAllowedIncomingMessageSize(quint64 maxAllowedIncomingMessageSize);
+%End
+%If (Qt_5_15_0 -)
+    quint64 maxAllowedIncomingMessageSize() const;
+%End
+%If (Qt_5_15_0 -)
+    static quint64 maxIncomingMessageSize();
+%End
+%If (Qt_5_15_0 -)
+    static quint64 maxIncomingFrameSize();
+%End
+%If (Qt_5_15_0 -)
+    void setOutgoingFrameSize(quint64 outgoingFrameSize);
+%End
+%If (Qt_5_15_0 -)
+    quint64 outgoingFrameSize() const;
+%End
+%If (Qt_5_15_0 -)
+    static quint64 maxOutgoingFrameSize();
+%End
 };
 
 %End
diff --git a/sip/QtWidgets/qbuttongroup.sip b/sip/QtWidgets/qbuttongroup.sip
index a61353f3..a23d0ea1 100644
--- a/sip/QtWidgets/qbuttongroup.sip
+++ b/sip/QtWidgets/qbuttongroup.sip
@@ -53,4 +53,16 @@ signals:
 %If (Qt_5_2_0 -)
     void buttonToggled(int, bool);
 %End
+%If (Qt_5_15_0 -)
+    void idClicked(int);
+%End
+%If (Qt_5_15_0 -)
+    void idPressed(int);
+%End
+%If (Qt_5_15_0 -)
+    void idReleased(int);
+%End
+%If (Qt_5_15_0 -)
+    void idToggled(int, bool);
+%End
 };
diff --git a/sip/QtWidgets/qcombobox.sip b/sip/QtWidgets/qcombobox.sip
index aab1a9e4..2c035bd2 100644
--- a/sip/QtWidgets/qcombobox.sip
+++ b/sip/QtWidgets/qcombobox.sip
@@ -159,4 +159,12 @@ signals:
 %If (Qt_5_14_0 -)
     void textHighlighted(const QString &);
 %End
+
+public:
+%If (Qt_5_15_0 -)
+    void setPlaceholderText(const QString &placeholderText);
+%End
+%If (Qt_5_15_0 -)
+    QString placeholderText() const;
+%End
 };
diff --git a/sip/QtWidgets/qpushbutton.sip b/sip/QtWidgets/qpushbutton.sip
index bd5b21c0..37f81a35 100644
--- a/sip/QtWidgets/qpushbutton.sip
+++ b/sip/QtWidgets/qpushbutton.sip
@@ -52,8 +52,13 @@ protected:
     virtual void keyPressEvent(QKeyEvent *);
     virtual void focusInEvent(QFocusEvent *);
     virtual void focusOutEvent(QFocusEvent *);
+%If (Qt_5_15_0 -)
+    virtual bool hitButton(const QPoint &pos) const;
+%End
 // Protected platform specific methods.
+%If (- Qt_5_15_0)
 %If (WS_MACX)
 bool hitButton(const QPoint &pos) const;
 %End
+%End
 };
diff --git a/sip/QtWidgets/qsplashscreen.sip b/sip/QtWidgets/qsplashscreen.sip
index 9ba927fd..c92be836 100644
--- a/sip/QtWidgets/qsplashscreen.sip
+++ b/sip/QtWidgets/qsplashscreen.sip
@@ -29,6 +29,9 @@ class QSplashScreen : QWidget
 public:
     QSplashScreen(const QPixmap &pixmap = QPixmap(), Qt::WindowFlags flags = Qt::WindowFlags());
     QSplashScreen(QWidget *parent /TransferThis/, const QPixmap &pixmap = QPixmap(), Qt::WindowFlags flags = Qt::WindowFlags());
+%If (Qt_5_15_0 -)
+    QSplashScreen(QScreen *screen, const QPixmap &pixmap = QPixmap(), Qt::WindowFlags flags = Qt::WindowFlags());
+%End
     virtual ~QSplashScreen();
     void setPixmap(const QPixmap &pixmap);
     const QPixmap pixmap() const;
diff --git a/sip/QtWidgets/qstyle.sip b/sip/QtWidgets/qstyle.sip
index 85aea351..9b903d3f 100644
--- a/sip/QtWidgets/qstyle.sip
+++ b/sip/QtWidgets/qstyle.sip
@@ -260,6 +260,9 @@ public:
 %End
 %If (Qt_5_7_0 -)
         SE_TabBarTearIndicatorRight,
+%End
+%If (Qt_5_15_0 -)
+        SE_PushButtonBevel,
 %End
         SE_CustomBase,
     };
diff --git a/sip/QtWidgets/qstyleoption.sip b/sip/QtWidgets/qstyleoption.sip
index 9da0fdf4..68b57ce4 100644
--- a/sip/QtWidgets/qstyleoption.sip
+++ b/sip/QtWidgets/qstyleoption.sip
@@ -447,6 +447,25 @@ public:
 };
 
 QFlags<QStyleOptionTab::CornerWidget> operator|(QStyleOptionTab::CornerWidget f1, QFlags<QStyleOptionTab::CornerWidget> f2);
+%If (Qt_5_15_0 -)
+
+class QStyleOptionTabV4 : QStyleOptionTab
+{
+%TypeHeaderCode
+#include <qstyleoption.h>
+%End
+
+public:
+    enum StyleOptionVersion
+    {
+        Version,
+    };
+
+    QStyleOptionTabV4();
+    int tabIndex;
+};
+
+%End
 
 class QStyleOptionProgressBar : QStyleOption
 {
diff --git a/sip/QtWidgets/qtabbar.sip b/sip/QtWidgets/qtabbar.sip
index a7a30c5f..456072a3 100644
--- a/sip/QtWidgets/qtabbar.sip
+++ b/sip/QtWidgets/qtabbar.sip
@@ -175,4 +175,10 @@ public:
     void setAccessibleTabName(int index, const QString &name);
 %End
 %End
+%If (Qt_5_15_0 -)
+    bool isTabVisible(int index) const;
+%End
+%If (Qt_5_15_0 -)
+    void setTabVisible(int index, bool visible);
+%End
 };
diff --git a/sip/QtWidgets/qtabwidget.sip b/sip/QtWidgets/qtabwidget.sip
index 23058a1c..df3cec78 100644
--- a/sip/QtWidgets/qtabwidget.sip
+++ b/sip/QtWidgets/qtabwidget.sip
@@ -135,4 +135,10 @@ public:
 %If (Qt_5_4_0 -)
     void setTabBarAutoHide(bool enabled);
 %End
+%If (Qt_5_15_0 -)
+    bool isTabVisible(int index) const;
+%End
+%If (Qt_5_15_0 -)
+    void setTabVisible(int index, bool visible);
+%End
 };
diff --git a/sip/QtWidgets/qwizard.sip b/sip/QtWidgets/qwizard.sip
index 88a526d0..47dc0981 100644
--- a/sip/QtWidgets/qwizard.sip
+++ b/sip/QtWidgets/qwizard.sip
@@ -157,6 +157,11 @@ public:
 signals:
     void pageAdded(int id);
     void pageRemoved(int id);
+
+public:
+%If (Qt_5_15_0 -)
+    QList<int> visitedIds() const;
+%End
 };
 
 QFlags<QWizard::WizardOption> operator|(QWizard::WizardOption f1, QFlags<QWizard::WizardOption> f2);
diff --git a/sip/QtXml/QtXmlmod.sip b/sip/QtXml/QtXmlmod.sip
index ee053de5..9848f7d3 100644
--- a/sip/QtXml/QtXmlmod.sip
+++ b/sip/QtXml/QtXmlmod.sip
@@ -45,5 +45,5 @@ WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 
 %DefaultSupertype sip.simplewrapper
 
-%Include qxml.sip
 %Include qdom.sip
+%Include qxml.sip
diff --git a/sip/QtXml/qdom.sip b/sip/QtXml/qdom.sip
index 62837eb0..d516b3ed 100644
--- a/sip/QtXml/qdom.sip
+++ b/sip/QtXml/qdom.sip
@@ -224,6 +224,9 @@ public:
     bool setContent(const QString &text, QString *errorMsg /Out/ = 0, int *errorLine = 0, int *errorColumn = 0);
     bool setContent(QIODevice *dev, QString *errorMsg /Out/ = 0, int *errorLine = 0, int *errorColumn = 0) /ReleaseGIL/;
     bool setContent(QXmlInputSource *source, QXmlReader *reader, QString *errorMsg /Out/ = 0, int *errorLine = 0, int *errorColumn = 0) /ReleaseGIL/;
+%If (Qt_5_15_0 -)
+    bool setContent(QXmlStreamReader *reader, bool namespaceProcessing, QString *errorMsg /Out/ = 0, int *errorLine = 0, int *errorColumn = 0);
+%End
     QString toString(int indent = 1) const;
     QByteArray toByteArray(int indent = 1) const;
 };



More information about the Neon-commits mailing list