diff options
author | Lars Knoll <lars.knoll@qt.io> | 2021-01-04 15:49:53 +0100 |
---|---|---|
committer | Lars Knoll <lars.knoll@qt.io> | 2021-01-22 06:59:00 +0000 |
commit | 3a1b0b6a811d4508f2b7bf9c62fce3643845b385 (patch) | |
tree | 7f11d9479814166f0ae3ce06c32b2e85ac93344b /src/multimedia/recording | |
parent | 518c7f92b5e2ad9339d4c721d2721474000377dc (diff) |
Move audio input selection functionality into QMediaRecorder
There's no reason why this should be limited to QAudioRecorder.
Change-Id: I075bc0b53179ad1b73ca7a42f4bbc745ab72a1d8
Reviewed-by: Doris Verria <doris.verria@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Diffstat (limited to 'src/multimedia/recording')
-rw-r--r-- | src/multimedia/recording/qaudiorecorder.cpp | 111 | ||||
-rw-r--r-- | src/multimedia/recording/qaudiorecorder.h | 14 | ||||
-rw-r--r-- | src/multimedia/recording/qmediarecorder.cpp | 111 | ||||
-rw-r--r-- | src/multimedia/recording/qmediarecorder.h | 10 | ||||
-rw-r--r-- | src/multimedia/recording/qmediarecorder_p.h | 27 |
5 files changed, 120 insertions, 153 deletions
diff --git a/src/multimedia/recording/qaudiorecorder.cpp b/src/multimedia/recording/qaudiorecorder.cpp index e2d6b70f7..e75858236 100644 --- a/src/multimedia/recording/qaudiorecorder.cpp +++ b/src/multimedia/recording/qaudiorecorder.cpp @@ -79,7 +79,7 @@ class QAudioRecorderObject : public QMediaObject { public: QAudioRecorderObject(QObject *parent, QMediaService *service) - :QMediaObject(parent, service) + : QMediaObject(parent, service) { } @@ -90,29 +90,8 @@ public: class QAudioRecorderPrivate : public QMediaRecorderPrivate { - Q_DECLARE_NON_CONST_PUBLIC(QAudioRecorder) - public: - void initControls() - { - Q_Q(QAudioRecorder); - audioInputSelector = nullptr; - - QMediaService *service = mediaObject ? mediaObject->service() : nullptr; - - if (service != nullptr) - audioInputSelector = qobject_cast<QAudioInputSelectorControl*>(service->requestControl(QAudioInputSelectorControl_iid)); - - if (audioInputSelector) { - q->connect(audioInputSelector, SIGNAL(activeInputChanged(QString)), - SIGNAL(audioInputChanged(QString))); - q->connect(audioInputSelector, SIGNAL(availableInputsChanged()), - SIGNAL(availableAudioInputsChanged())); - } - } - QMediaServiceProvider *provider = nullptr; - QAudioInputSelectorControl *audioInputSelector = nullptr; }; @@ -130,7 +109,6 @@ QAudioRecorder::QAudioRecorder(QObject *parent): QMediaService *service = d->provider->requestService(Q_MEDIASERVICE_AUDIOSOURCE); setMediaObject(new QAudioRecorderObject(this, service)); - d->initControls(); } /*! @@ -141,99 +119,12 @@ QAudioRecorder::~QAudioRecorder() { Q_D(QAudioRecorder); QMediaService *service = d->mediaObject ? d->mediaObject->service() : nullptr; - QMediaObject *mediaObject = d->mediaObject; setMediaObject(nullptr); - if (service && d->audioInputSelector) - service->releaseControl(d->audioInputSelector); - if (d->provider && service) d->provider->releaseService(service); - - delete mediaObject; -} - -/*! - Returns a list of available audio inputs -*/ - -QStringList QAudioRecorder::audioInputs() const -{ - Q_D(const QAudioRecorder); - if (d->audioInputSelector) - return d->audioInputSelector->availableInputs(); - return QStringList(); -} - -/*! - Returns the readable translated description of the audio input device with \a name. -*/ - -QString QAudioRecorder::audioInputDescription(const QString& name) const -{ - Q_D(const QAudioRecorder); - - if (d->audioInputSelector) - return d->audioInputSelector->inputDescription(name); - return QString(); } -/*! - Returns the default audio input name. -*/ - -QString QAudioRecorder::defaultAudioInput() const -{ - Q_D(const QAudioRecorder); - - if (d->audioInputSelector) - return d->audioInputSelector->defaultInput(); - return QString(); -} - -/*! - \property QAudioRecorder::audioInput - \brief the active audio input name. - -*/ - -/*! - Returns the active audio input name. -*/ - -QString QAudioRecorder::audioInput() const -{ - Q_D(const QAudioRecorder); - - if (d->audioInputSelector) - return d->audioInputSelector->activeInput(); - return QString(); -} - -/*! - Set the active audio input to \a name. -*/ - -void QAudioRecorder::setAudioInput(const QString& name) -{ - Q_D(const QAudioRecorder); - - if (d->audioInputSelector) - d->audioInputSelector->setActiveInput(name); -} - -/*! - \fn QAudioRecorder::audioInputChanged(const QString& name) - - Signal emitted when active audio input changes to \a name. -*/ - -/*! - \fn QAudioRecorder::availableAudioInputsChanged() - - Signal is emitted when the available audio inputs change. -*/ - QT_END_NAMESPACE #include "moc_qaudiorecorder.cpp" diff --git a/src/multimedia/recording/qaudiorecorder.h b/src/multimedia/recording/qaudiorecorder.h index e57794b40..7e0b7e561 100644 --- a/src/multimedia/recording/qaudiorecorder.h +++ b/src/multimedia/recording/qaudiorecorder.h @@ -60,24 +60,10 @@ class QAudioRecorderPrivate; class Q_MULTIMEDIA_EXPORT QAudioRecorder : public QMediaRecorder { Q_OBJECT - Q_PROPERTY(QString audioInput READ audioInput WRITE setAudioInput NOTIFY audioInputChanged) public: explicit QAudioRecorder(QObject *parent = nullptr); ~QAudioRecorder(); - QStringList audioInputs() const; - QString defaultAudioInput() const; - QString audioInputDescription(const QString& name) const; - - QString audioInput() const; - -public Q_SLOTS: - void setAudioInput(const QString& name); - -Q_SIGNALS: - void audioInputChanged(const QString& name); - void availableAudioInputsChanged(); - private: Q_DISABLE_COPY(QAudioRecorder) Q_DECLARE_PRIVATE(QAudioRecorder) diff --git a/src/multimedia/recording/qmediarecorder.cpp b/src/multimedia/recording/qmediarecorder.cpp index 8b9eb4836..93335841d 100644 --- a/src/multimedia/recording/qmediarecorder.cpp +++ b/src/multimedia/recording/qmediarecorder.cpp @@ -47,6 +47,7 @@ #include <qmetadatawritercontrol.h> #include <qaudioencodersettingscontrol.h> #include <qvideoencodersettingscontrol.h> +#include <qaudioinputselectorcontrol.h> #include <qmediacontainercontrol.h> #include <qcamera.h> #include <qcameracontrol.h> @@ -73,8 +74,6 @@ QT_BEGIN_NAMESPACE of other media objects, like QCamera. \snippet multimedia-snippets/media.cpp Media recorder - - \sa QAudioRecorder */ static void qRegisterMediaRecorderMetaTypes() @@ -87,20 +86,6 @@ static void qRegisterMediaRecorderMetaTypes() Q_CONSTRUCTOR_FUNCTION(qRegisterMediaRecorderMetaTypes) -QMediaRecorderPrivate::QMediaRecorderPrivate(): - mediaObject(nullptr), - control(nullptr), - formatControl(nullptr), - audioControl(nullptr), - videoControl(nullptr), - metaDataControl(nullptr), - settingsChanged(false), - notifyTimer(nullptr), - state(QMediaRecorder::StoppedState), - error(QMediaRecorder::NoError) -{ -} - #define ENUM_NAME(c,e,v) (c::staticMetaObject.enumerator(c::staticMetaObject.indexOfEnumerator(e)).valueToKey((v))) void QMediaRecorderPrivate::_q_stateChanged(QMediaRecorder::State ps) @@ -230,6 +215,7 @@ QMediaRecorder::QMediaRecorder(QMediaRecorderPrivate &dd, QMediaObject *mediaObj QMediaRecorder::~QMediaRecorder() { + setMediaObject(nullptr); delete d_ptr; } @@ -303,6 +289,8 @@ bool QMediaRecorder::setMediaObject(QMediaObject *object) service->releaseControl(d->metaDataControl); } + if (d->audioInputSelector) + service->releaseControl(d->audioInputSelector); } } @@ -311,6 +299,7 @@ bool QMediaRecorder::setMediaObject(QMediaObject *object) d->audioControl = nullptr; d->videoControl = nullptr; d->metaDataControl = nullptr; + d->audioInputSelector = nullptr; d->mediaObject = object; @@ -327,6 +316,15 @@ bool QMediaRecorder::setMediaObject(QMediaObject *object) d->formatControl = qobject_cast<QMediaContainerControl *>(service->requestControl(QMediaContainerControl_iid)); d->audioControl = qobject_cast<QAudioEncoderSettingsControl *>(service->requestControl(QAudioEncoderSettingsControl_iid)); d->videoControl = qobject_cast<QVideoEncoderSettingsControl *>(service->requestControl(QVideoEncoderSettingsControl_iid)); + d->audioInputSelector = qobject_cast<QAudioInputSelectorControl*>(service->requestControl(QAudioInputSelectorControl_iid)); + + if (d->audioInputSelector) { + connect(d->audioInputSelector, SIGNAL(activeInputChanged(QString)), + SIGNAL(audioInputChanged(QString))); + connect(d->audioInputSelector, SIGNAL(availableInputsChanged()), + SIGNAL(availableAudioInputsChanged())); + } + QObject *control = service->requestControl(QMetaDataWriterControl_iid); if (control) { @@ -1065,6 +1063,87 @@ QStringList QMediaRecorder::availableMetaData() const Signal the changes of one meta-data element \a value with the given \a key. */ +/*! + Returns a list of available audio inputs +*/ + +QStringList QMediaRecorder::audioInputs() const +{ + Q_D(const QMediaRecorder); + if (d->audioInputSelector) + return d->audioInputSelector->availableInputs(); + return QStringList(); +} + +/*! + Returns the readable translated description of the audio input device with \a name. +*/ + +QString QMediaRecorder::audioInputDescription(const QString& name) const +{ + Q_D(const QMediaRecorder); + + if (d->audioInputSelector) + return d->audioInputSelector->inputDescription(name); + return QString(); +} + +/*! + Returns the default audio input name. +*/ + +QString QMediaRecorder::defaultAudioInput() const +{ + Q_D(const QMediaRecorder); + + if (d->audioInputSelector) + return d->audioInputSelector->defaultInput(); + return QString(); +} + +/*! + \property QMediaRecorder::audioInput + \brief the active audio input name. + +*/ + +/*! + Returns the active audio input name. +*/ + +QString QMediaRecorder::audioInput() const +{ + Q_D(const QMediaRecorder); + + if (d->audioInputSelector) + return d->audioInputSelector->activeInput(); + return QString(); +} + +/*! + Set the active audio input to \a name. +*/ + +void QMediaRecorder::setAudioInput(const QString& name) +{ + Q_D(const QMediaRecorder); + + if (d->audioInputSelector) + d->audioInputSelector->setActiveInput(name); +} + +/*! + \fn QMediaRecorder::audioInputChanged(const QString& name) + + Signal emitted when active audio input changes to \a name. +*/ + +/*! + \fn QMediaRecorder::availableAudioInputsChanged() + + Signal is emitted when the available audio inputs change. +*/ + QT_END_NAMESPACE #include "moc_qmediarecorder.cpp" diff --git a/src/multimedia/recording/qmediarecorder.h b/src/multimedia/recording/qmediarecorder.h index 961e62ced..ef959860b 100644 --- a/src/multimedia/recording/qmediarecorder.h +++ b/src/multimedia/recording/qmediarecorder.h @@ -78,6 +78,7 @@ class Q_MULTIMEDIA_EXPORT QMediaRecorder : public QObject, public QMediaBindable Q_PROPERTY(qreal volume READ volume WRITE setVolume NOTIFY volumeChanged) Q_PROPERTY(bool metaDataAvailable READ isMetaDataAvailable NOTIFY metaDataAvailableChanged) Q_PROPERTY(bool metaDataWritable READ isMetaDataWritable NOTIFY metaDataWritableChanged) + Q_PROPERTY(QString audioInput READ audioInput WRITE setAudioInput NOTIFY audioInputChanged) public: enum State @@ -167,12 +168,19 @@ public: void setMetaData(const QString &key, const QVariant &value); QStringList availableMetaData() const; + QStringList audioInputs() const; + QString defaultAudioInput() const; + QString audioInputDescription(const QString& name) const; + + QString audioInput() const; + public Q_SLOTS: void record(); void pause(); void stop(); void setMuted(bool muted); void setVolume(qreal volume); + void setAudioInput(const QString& name); Q_SIGNALS: void stateChanged(QMediaRecorder::State state); @@ -181,6 +189,8 @@ Q_SIGNALS: void mutedChanged(bool muted); void volumeChanged(qreal volume); void actualLocationChanged(const QUrl &location); + void audioInputChanged(const QString& name); + void availableAudioInputsChanged(); void error(QMediaRecorder::Error error); diff --git a/src/multimedia/recording/qmediarecorder_p.h b/src/multimedia/recording/qmediarecorder_p.h index ff655e3d5..5ff7dd18c 100644 --- a/src/multimedia/recording/qmediarecorder_p.h +++ b/src/multimedia/recording/qmediarecorder_p.h @@ -62,6 +62,7 @@ class QMediaContainerControl; class QAudioEncoderSettingsControl; class QVideoEncoderSettingsControl; class QMetaDataWriterControl; +class QAudioInputSelectorControl; class QTimer; class QMediaRecorderPrivate @@ -69,26 +70,26 @@ class QMediaRecorderPrivate Q_DECLARE_NON_CONST_PUBLIC(QMediaRecorder) public: - QMediaRecorderPrivate(); - virtual ~QMediaRecorderPrivate() {} + QMediaRecorderPrivate() = default; void applySettingsLater(); void restartCamera(); - QMediaObject *mediaObject; + QMediaObject *mediaObject = nullptr; - QMediaRecorderControl *control; - QMediaContainerControl *formatControl; - QAudioEncoderSettingsControl *audioControl; - QVideoEncoderSettingsControl *videoControl; - QMetaDataWriterControl *metaDataControl; + QMediaRecorderControl *control = nullptr; + QMediaContainerControl *formatControl = nullptr; + QAudioEncoderSettingsControl *audioControl = nullptr; + QVideoEncoderSettingsControl *videoControl = nullptr; + QMetaDataWriterControl *metaDataControl = nullptr; + QAudioInputSelectorControl *audioInputSelector = nullptr; - bool settingsChanged; + bool settingsChanged = false; - QTimer* notifyTimer; + QTimer* notifyTimer = nullptr; - QMediaRecorder::State state; - QMediaRecorder::Error error; + QMediaRecorder::State state = QMediaRecorder::StoppedState; + QMediaRecorder::Error error = QMediaRecorder::NoError; QString errorString; QUrl actualLocation; @@ -100,7 +101,7 @@ public: void _q_updateNotifyInterval(int ms); void _q_applySettings(); - QMediaRecorder *q_ptr; + QMediaRecorder *q_ptr = nullptr; }; QT_END_NAMESPACE |