diff options
author | Dmytro Poplavskiy <dmytro.poplavskiy@nokia.com> | 2012-05-21 12:09:50 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-07-19 09:08:53 +0200 |
commit | 36ff2fe85e418e7cf82f6c6a67d49a2f16998853 (patch) | |
tree | 5d64120ddcffa9415149e1ebc3ebc7bbf86ac9bb /src/plugins | |
parent | 0d0e89b1e89589812a91ee8d202de2576d6ae89f (diff) |
Added volume property to QMediaRecorder
Change-Id: I19f727107651c9f640ca1c010a3764f05aef8820
Reviewed-by: Michael Goddard <michael.goddard@nokia.com>
Diffstat (limited to 'src/plugins')
8 files changed, 63 insertions, 4 deletions
diff --git a/src/plugins/audiocapture/audiomediarecordercontrol.cpp b/src/plugins/audiocapture/audiomediarecordercontrol.cpp index d5d094198..e04049671 100644 --- a/src/plugins/audiocapture/audiomediarecordercontrol.cpp +++ b/src/plugins/audiocapture/audiomediarecordercontrol.cpp @@ -98,6 +98,12 @@ bool AudioMediaRecorderControl::isMuted() const return false; } +qreal AudioMediaRecorderControl::volume() const +{ + //TODO: implement muting and audio gain + return 1.0; +} + void AudioMediaRecorderControl::setState(QMediaRecorder::State state) { if (m_state == state) @@ -124,6 +130,12 @@ void AudioMediaRecorderControl::setMuted(bool) { } +void AudioMediaRecorderControl::setVolume(qreal volume) +{ + if (!qFuzzyCompare(volume, qreal(1.0))) + qWarning() << "Media service doesn't support recorder audio gain."; +} + void AudioMediaRecorderControl::updateStatus() { QMediaRecorder::Status newStatus = status(); diff --git a/src/plugins/audiocapture/audiomediarecordercontrol.h b/src/plugins/audiocapture/audiomediarecordercontrol.h index 2e9f91786..6d538623d 100644 --- a/src/plugins/audiocapture/audiomediarecordercontrol.h +++ b/src/plugins/audiocapture/audiomediarecordercontrol.h @@ -67,12 +67,14 @@ public: qint64 duration() const; bool isMuted() const; + qreal volume() const; void applySettings() {} public slots: void setState(QMediaRecorder::State state); void setMuted(bool); + void setVolume(qreal volume); private slots: void updateStatus(); diff --git a/src/plugins/gstreamer/camerabin/camerabinrecorder.cpp b/src/plugins/gstreamer/camerabin/camerabinrecorder.cpp index 90cf3cec2..5383a72ac 100644 --- a/src/plugins/gstreamer/camerabin/camerabinrecorder.cpp +++ b/src/plugins/gstreamer/camerabin/camerabinrecorder.cpp @@ -230,9 +230,21 @@ bool CameraBinRecorder::isMuted() const return m_session->isMuted(); } +qreal CameraBinRecorder::volume() const +{ + return 1.0; +} + void CameraBinRecorder::setMuted(bool muted) { m_session->setMuted(muted); } +void CameraBinRecorder::setVolume(qreal volume) +{ + if (!qFuzzyCompare(volume, qreal(1.0))) + qWarning() << "Media service doesn't support recorder audio gain."; +} + QT_END_NAMESPACE + diff --git a/src/plugins/gstreamer/camerabin/camerabinrecorder.h b/src/plugins/gstreamer/camerabin/camerabinrecorder.h index 8d890bae1..5cad3c499 100644 --- a/src/plugins/gstreamer/camerabin/camerabinrecorder.h +++ b/src/plugins/gstreamer/camerabin/camerabinrecorder.h @@ -66,6 +66,7 @@ public: qint64 duration() const; bool isMuted() const; + qreal volume() const; void applySettings(); GstEncodingContainerProfile *videoProfile(); @@ -73,6 +74,7 @@ public: public slots: void setState(QMediaRecorder::State state); void setMuted(bool); + void setVolume(qreal volume); private slots: void updateStatus(); diff --git a/src/plugins/gstreamer/mediacapture/qgstreamercapturesession.cpp b/src/plugins/gstreamer/mediacapture/qgstreamercapturesession.cpp index 30b1012b7..435a413ae 100644 --- a/src/plugins/gstreamer/mediacapture/qgstreamercapturesession.cpp +++ b/src/plugins/gstreamer/mediacapture/qgstreamercapturesession.cpp @@ -86,6 +86,7 @@ QGstreamerCaptureSession::QGstreamerCaptureSession(QGstreamerCaptureSession::Cap m_audioPreview(0), m_audioVolume(0), m_muted(false), + m_volume(1.0), m_videoSrc(0), m_videoTee(0), m_videoPreviewQueue(0), @@ -163,7 +164,8 @@ GstElement *QGstreamerCaptureSession::buildEncodeBin() return 0; } - g_object_set(G_OBJECT(m_audioVolume), "volume", (m_muted ? 0.0 : 1.0), NULL); + g_object_set(G_OBJECT(m_audioVolume), "mute", m_muted, NULL); + g_object_set(G_OBJECT(m_audioVolume), "volume", m_volume, NULL); // add ghostpads GstPad *pad = gst_element_get_static_pad(audioConvert, "sink"); @@ -1012,14 +1014,26 @@ bool QGstreamerCaptureSession::processBusMessage(const QGstreamerMessage &messag void QGstreamerCaptureSession::setMuted(bool muted) { - if (m_muted != muted) { + if (bool(m_muted) != muted) { m_muted = muted; if (m_audioVolume) - g_object_set(G_OBJECT(m_audioVolume), "volume", (m_muted ? 0.0 : 1.0), NULL); + g_object_set(G_OBJECT(m_audioVolume), "mute", m_muted, NULL); + emit mutedChanged(muted); } } +void QGstreamerCaptureSession::setVolume(qreal volume) +{ + if (!qFuzzyCompare(volume, m_volume)) { + m_volume = volume; + if (m_audioVolume) + g_object_set(G_OBJECT(m_audioVolume), "volume", m_volume, NULL); + + emit volumeChanged(volume); + } +} + void QGstreamerCaptureSession::addProbe(QGstreamerAudioProbeControl* probe) { QMutexLocker locker(&m_audioProbeMutex); diff --git a/src/plugins/gstreamer/mediacapture/qgstreamercapturesession.h b/src/plugins/gstreamer/mediacapture/qgstreamercapturesession.h index 7c88ce230..282f5b1d6 100644 --- a/src/plugins/gstreamer/mediacapture/qgstreamercapturesession.h +++ b/src/plugins/gstreamer/mediacapture/qgstreamercapturesession.h @@ -131,6 +131,7 @@ public: qint64 duration() const; bool isMuted() const { return m_muted; } + qreal volume() const { return m_volume; } bool isReady() const; @@ -148,6 +149,7 @@ signals: void imageCaptured(int requestId, const QImage &img); void imageSaved(int requestId, const QString &path); void mutedChanged(bool); + void volumeChanged(qreal); void readyChanged(bool); void viewfinderChanged(); @@ -159,6 +161,7 @@ public slots: void setMetaData(const QMap<QByteArray, QVariant>&); void setMuted(bool); + void setVolume(qreal volume); private: enum PipelineMode { EmptyPipeline, PreviewPipeline, RecordingPipeline, PreviewAndRecordingPipeline }; @@ -210,7 +213,8 @@ private: GstElement *m_audioPreviewQueue; GstElement *m_audioPreview; GstElement *m_audioVolume; - bool m_muted; + gboolean m_muted; + double m_volume; GstElement *m_videoSrc; GstElement *m_videoTee; diff --git a/src/plugins/gstreamer/mediacapture/qgstreamerrecordercontrol.cpp b/src/plugins/gstreamer/mediacapture/qgstreamerrecordercontrol.cpp index 3ff148e08..cfcdb1046 100644 --- a/src/plugins/gstreamer/mediacapture/qgstreamerrecordercontrol.cpp +++ b/src/plugins/gstreamer/mediacapture/qgstreamerrecordercontrol.cpp @@ -56,6 +56,7 @@ QGstreamerRecorderControl::QGstreamerRecorderControl(QGstreamerCaptureSession *s connect(m_session, SIGNAL(error(int,QString)), SLOT(handleSessionError(int,QString))); connect(m_session, SIGNAL(durationChanged(qint64)), SIGNAL(durationChanged(qint64))); connect(m_session, SIGNAL(mutedChanged(bool)), SIGNAL(mutedChanged(bool))); + connect(m_session, SIGNAL(volumeChanged(qreal)), SIGNAL(volumeChanged(qreal))); m_hasPreviewState = m_session->captureMode() != QGstreamerCaptureSession::Audio; } @@ -309,11 +310,21 @@ bool QGstreamerRecorderControl::isMuted() const return m_session->isMuted(); } +qreal QGstreamerRecorderControl::volume() const +{ + return m_session->volume(); +} + void QGstreamerRecorderControl::setMuted(bool muted) { m_session->setMuted(muted); } +void QGstreamerRecorderControl::setVolume(qreal volume) +{ + m_session->setVolume(volume); +} + QDir QGstreamerRecorderControl::defaultDir() const { QStringList dirCandidates; diff --git a/src/plugins/gstreamer/mediacapture/qgstreamerrecordercontrol.h b/src/plugins/gstreamer/mediacapture/qgstreamerrecordercontrol.h index 4696e1118..d58191cee 100644 --- a/src/plugins/gstreamer/mediacapture/qgstreamerrecordercontrol.h +++ b/src/plugins/gstreamer/mediacapture/qgstreamerrecordercontrol.h @@ -67,6 +67,7 @@ public: qint64 duration() const; bool isMuted() const; + qreal volume() const; void applySettings(); @@ -76,6 +77,7 @@ public slots: void pause(); void stop(); void setMuted(bool); + void setVolume(qreal volume); private slots: void updateStatus(); |