summaryrefslogtreecommitdiffstats
path: root/src/multimedia
diff options
context:
space:
mode:
authorVolker Hilsheimer <volker.hilsheimer@qt.io>2024-04-04 15:55:10 +0200
committerVolker Hilsheimer <volker.hilsheimer@qt.io>2024-04-05 14:36:04 +0200
commit6f590d44bb186178902a5fc3dc4a12cee8e88eaa (patch)
treef8ffe27f1b8d42247e2f63c5761081102297ff62 /src/multimedia
parentc9b32a8c087d0b95b9d256b40d91cf9cc331a645 (diff)
Fix ABI breakage wrt QAudioSink/Source::stateChanged signals
Amends edaec2bf714c98d65f12c8ed9a2ffbd1603635a7, which removed the QAudioSink/Source::stateChanged(QAudio::State) symbols from the API, thus breaking binary compatibility to Qt 6.6. Since moc-generated code compares pointer-to-member- functions, we cannot bring that symbol back and still have such connections work. The only reasonable way to fix this is to reverse the namespace aliasing: QAudio is the real namespace, QtAudio becomes an alias. All symbols are then exported with the QAudio type in their signature, even if declared with QtAudio types as parameters, so we don't need any removed_api tricks to bring the old symbols back. We just need to trick qdoc into seeing the namespace as QtAudio, which is trivial and has no ABI implications. The previous caveat that string-based connections need to use QAudio doesn't change with this. [ChangeLog][Binary Compatibility Note] Qt 6.7.0 broke binary compatibility by renaming the QAudio namespace to QtAudio. Qt 6.7.1 restores compatibility with previous Qt 6 versions again by making QtAudio an alias for the QAudio namespace, but breaks BC with 6.7.0. Code previously built against 6.7.0 needs to be recompiled. Pick-to: 6.7 Fixes: QTBUG-123997 Change-Id: I456db61ff0bd1d97af7ce2d2a7968999d891a84d Reviewed-by: Axel Spoerl <axel.spoerl@qt.io> Reviewed-by: Jøger Hansegård <joger.hansegard@qt.io>
Diffstat (limited to 'src/multimedia')
-rw-r--r--src/multimedia/audio/qaudio.h8
-rw-r--r--src/multimedia/audio/qaudiosink.cpp4
-rw-r--r--src/multimedia/audio/qaudiosink.h15
-rw-r--r--src/multimedia/audio/qaudiosource.cpp4
-rw-r--r--src/multimedia/audio/qaudiosource.h15
-rw-r--r--src/multimedia/audio/qtaudio.cpp4
-rw-r--r--src/multimedia/compat/removed_api.cpp55
7 files changed, 26 insertions, 79 deletions
diff --git a/src/multimedia/audio/qaudio.h b/src/multimedia/audio/qaudio.h
index b569b3a15..5ae994b9f 100644
--- a/src/multimedia/audio/qaudio.h
+++ b/src/multimedia/audio/qaudio.h
@@ -19,7 +19,11 @@ QT_BEGIN_NAMESPACE
// Class forward declaration required for QDoc bug
class QString;
+#if defined(Q_QDOC)
namespace QtAudio
+#else
+namespace QAudio
+#endif
{
enum Error { NoError, OpenError, IOError, UnderrunError, FatalError };
enum State { ActiveState, SuspendedState, StoppedState, IdleState };
@@ -34,8 +38,8 @@ namespace QtAudio
Q_MULTIMEDIA_EXPORT float convertVolume(float volume, VolumeScale from, VolumeScale to);
}
-#if !defined(Q_QDOC) && !QT_MULTIMEDIA_REMOVED_SINCE(6, 7)
-namespace QAudio = QtAudio;
+#if !defined(Q_QDOC)
+namespace QtAudio = QAudio;
#endif
#ifndef QT_NO_DEBUG_STREAM
diff --git a/src/multimedia/audio/qaudiosink.cpp b/src/multimedia/audio/qaudiosink.cpp
index aac96c342..12263d32a 100644
--- a/src/multimedia/audio/qaudiosink.cpp
+++ b/src/multimedia/audio/qaudiosink.cpp
@@ -279,7 +279,7 @@ qint64 QAudioSink::elapsedUSecs() const
/*!
Returns the error state.
*/
-QtAudio::Error QAudioSink::error(QT6_IMPL_NEW_OVERLOAD) const
+QtAudio::Error QAudioSink::error() const
{
return d ? d->error() : QAudio::OpenError;
}
@@ -287,7 +287,7 @@ QtAudio::Error QAudioSink::error(QT6_IMPL_NEW_OVERLOAD) const
/*!
Returns the state of audio processing.
*/
-QtAudio::State QAudioSink::state(QT6_IMPL_NEW_OVERLOAD) const
+QtAudio::State QAudioSink::state() const
{
return d ? d->state() : QAudio::StoppedState;
}
diff --git a/src/multimedia/audio/qaudiosink.h b/src/multimedia/audio/qaudiosink.h
index 7a4eb732a..e071e6fbc 100644
--- a/src/multimedia/audio/qaudiosink.h
+++ b/src/multimedia/audio/qaudiosink.h
@@ -49,21 +49,18 @@ public:
qint64 processedUSecs() const;
qint64 elapsedUSecs() const;
-#if QT_MULTIMEDIA_REMOVED_SINCE(6, 7)
- QAudio::Error error() const;
- QAudio::State state() const;
-#endif
- QtAudio::Error error(QT6_DECL_NEW_OVERLOAD) const;
- QtAudio::State state(QT6_DECL_NEW_OVERLOAD) const;
+ QtAudio::Error error() const;
+ QtAudio::State state() const;
void setVolume(qreal);
qreal volume() const;
Q_SIGNALS:
-#ifdef Q_MOC_RUN
- void stateChanged(QAudio::State state);
-#else
+#if defined(Q_QDOC)
void stateChanged(QtAudio::State state);
+#else
+ // use QAudio here to keep string-based connections working
+ void stateChanged(QAudio::State state);
#endif
private:
diff --git a/src/multimedia/audio/qaudiosource.cpp b/src/multimedia/audio/qaudiosource.cpp
index 5e59a4798..1ed5e82bc 100644
--- a/src/multimedia/audio/qaudiosource.cpp
+++ b/src/multimedia/audio/qaudiosource.cpp
@@ -340,7 +340,7 @@ qint64 QAudioSource::elapsedUSecs() const
Returns the error state.
*/
-QtAudio::Error QAudioSource::error(QT6_IMPL_NEW_OVERLOAD) const
+QtAudio::Error QAudioSource::error() const
{
return d ? d->error() : QAudio::OpenError;
}
@@ -349,7 +349,7 @@ QtAudio::Error QAudioSource::error(QT6_IMPL_NEW_OVERLOAD) const
Returns the state of audio processing.
*/
-QtAudio::State QAudioSource::state(QT6_IMPL_NEW_OVERLOAD) const
+QtAudio::State QAudioSource::state() const
{
return d ? d->state() : QAudio::StoppedState;
}
diff --git a/src/multimedia/audio/qaudiosource.h b/src/multimedia/audio/qaudiosource.h
index 71c5446ee..f0ad0ceb5 100644
--- a/src/multimedia/audio/qaudiosource.h
+++ b/src/multimedia/audio/qaudiosource.h
@@ -50,18 +50,15 @@ public:
qint64 processedUSecs() const;
qint64 elapsedUSecs() const;
-#if QT_MULTIMEDIA_REMOVED_SINCE(6, 7)
- QAudio::Error error() const;
- QAudio::State state() const;
-#endif
- QtAudio::Error error(QT6_DECL_NEW_OVERLOAD) const;
- QtAudio::State state(QT6_DECL_NEW_OVERLOAD) const;
+ QtAudio::Error error() const;
+ QtAudio::State state() const;
Q_SIGNALS:
-#ifdef Q_MOC_RUN
- void stateChanged(QAudio::State state);
-#else
+#if defined(Q_QDOC)
void stateChanged(QtAudio::State state);
+#else
+ // use QAudio here to keep string-based connections working
+ void stateChanged(QAudio::State state);
#endif
private:
diff --git a/src/multimedia/audio/qtaudio.cpp b/src/multimedia/audio/qtaudio.cpp
index 999248bb6..fb14e5093 100644
--- a/src/multimedia/audio/qtaudio.cpp
+++ b/src/multimedia/audio/qtaudio.cpp
@@ -62,7 +62,11 @@ QT_BEGIN_NAMESPACE
\sa QtAudio::convertVolume()
*/
+#if defined(Q_QDOC)
namespace QtAudio
+#else
+namespace QAudio
+#endif
{
/*!
diff --git a/src/multimedia/compat/removed_api.cpp b/src/multimedia/compat/removed_api.cpp
index 15e92c414..567024c8e 100644
--- a/src/multimedia/compat/removed_api.cpp
+++ b/src/multimedia/compat/removed_api.cpp
@@ -9,61 +9,6 @@ QT_USE_NAMESPACE
#if QT_MULTIMEDIA_REMOVED_SINCE(6, 7)
-// implement removed functions from qaudio.h
-#include <QtMultimedia/qaudio.h>
-#include <qdebug.h>
-
-namespace QAudio
-{
- enum VolumeScale {};
- enum Error {};
- enum State {};
- Q_MULTIMEDIA_EXPORT float convertVolume(float volume, QAudio::VolumeScale from, QAudio::VolumeScale to)
- {
- return QtAudio::convertVolume(volume, static_cast<QtAudio::VolumeScale>(from),
- static_cast<QtAudio::VolumeScale>(to));
- }
-}
-
-#ifndef QT_NO_DEBUG_STREAM
-Q_MULTIMEDIA_EXPORT QDebug operator<<(QDebug dbg, QAudio::Error error)
-{
- return dbg << static_cast<QtAudio::Error>(error);
-}
-Q_MULTIMEDIA_EXPORT QDebug operator<<(QDebug dbg, QAudio::State state)
-{
- return dbg << static_cast<QtAudio::State>(state);
-}
-Q_MULTIMEDIA_EXPORT QDebug operator<<(QDebug dbg, QAudio::VolumeScale role)
-{
- return dbg << static_cast<QtAudio::VolumeScale>(role);
-}
-#endif
-
-#include <QtMultimedia/qaudiosink.h>
-
-QAudio::Error QAudioSink::error() const
-{
- return static_cast<QAudio::Error>(error(QT6_CALL_NEW_OVERLOAD));
-}
-
-QAudio::State QAudioSink::state() const
-{
- return static_cast<QAudio::State>(state(QT6_CALL_NEW_OVERLOAD));
-}
-
-#include <QtMultimedia/qaudiosource.h>
-
-QAudio::Error QAudioSource::error() const
-{
- return static_cast<QAudio::Error>(error(QT6_CALL_NEW_OVERLOAD));
-}
-
-QAudio::State QAudioSource::state() const
-{
- return static_cast<QAudio::State>(state(QT6_CALL_NEW_OVERLOAD));
-}
-
// #include "qotherheader.h"
// // implement removed functions from qotherheader.h
// order sections alphabetically