summaryrefslogtreecommitdiffstats
path: root/src/multimedia/recording
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@qt.io>2021-01-04 15:49:53 +0100
committerLars Knoll <lars.knoll@qt.io>2021-01-22 06:59:00 +0000
commit3a1b0b6a811d4508f2b7bf9c62fce3643845b385 (patch)
tree7f11d9479814166f0ae3ce06c32b2e85ac93344b /src/multimedia/recording
parent518c7f92b5e2ad9339d4c721d2721474000377dc (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.cpp111
-rw-r--r--src/multimedia/recording/qaudiorecorder.h14
-rw-r--r--src/multimedia/recording/qmediarecorder.cpp111
-rw-r--r--src/multimedia/recording/qmediarecorder.h10
-rw-r--r--src/multimedia/recording/qmediarecorder_p.h27
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