summaryrefslogtreecommitdiffstats
path: root/src/plugins/audiocapture
diff options
context:
space:
mode:
authorDmytro Poplavskiy <dmytro.poplavskiy@nokia.com>2012-05-01 13:10:33 +1000
committerQt by Nokia <qt-info@nokia.com>2012-05-02 03:15:01 +0200
commitb7935a84d71b479f5320e5b062274d344835ba26 (patch)
treee72ac1774590d91f621ed9b21cf0c0ab2c87903b /src/plugins/audiocapture
parentaf932e8653b024c93ed49ba30d6f06839ecfced6 (diff)
Added QMediaRecorder::status property
QMediaRecorder::state property represents the user request and changed synchronously during record(), pause() or stop() calls. Recorder status is changed asynchronously and represents the actual status of media recorder. This also makes API more consistent with QMediaPlayer and QCamera. Change-Id: I80b4aaa70bb88e555c492908da8c29d0fc5ed5ea Reviewed-by: Ling Hu <ling.hu@nokia.com>
Diffstat (limited to 'src/plugins/audiocapture')
-rw-r--r--src/plugins/audiocapture/audiomediarecordercontrol.cpp53
-rw-r--r--src/plugins/audiocapture/audiomediarecordercontrol.h7
2 files changed, 55 insertions, 5 deletions
diff --git a/src/plugins/audiocapture/audiomediarecordercontrol.cpp b/src/plugins/audiocapture/audiomediarecordercontrol.cpp
index e1fb14d35..e17157c6a 100644
--- a/src/plugins/audiocapture/audiomediarecordercontrol.cpp
+++ b/src/plugins/audiocapture/audiomediarecordercontrol.cpp
@@ -46,11 +46,13 @@
AudioMediaRecorderControl::AudioMediaRecorderControl(QObject *parent)
:QMediaRecorderControl(parent)
+ , m_state(QMediaRecorder::StoppedState)
+ , m_prevStatus(QMediaRecorder::UnloadedStatus)
{
m_session = qobject_cast<AudioCaptureSession*>(parent);
connect(m_session,SIGNAL(positionChanged(qint64)),this,SIGNAL(durationChanged(qint64)));
- connect(m_session,SIGNAL(stateChanged(QMediaRecorder::State)),this,SIGNAL(stateChanged(QMediaRecorder::State)));
- connect(m_session,SIGNAL(error(int,QString)),this,SIGNAL(error(int,QString)));
+ connect(m_session,SIGNAL(stateChanged(QMediaRecorder::State)), this,SLOT(updateStatus()));
+ connect(m_session,SIGNAL(error(int,QString)),this,SLOT(handleSessionError(int,QString)));
}
AudioMediaRecorderControl::~AudioMediaRecorderControl()
@@ -72,6 +74,20 @@ QMediaRecorder::State AudioMediaRecorderControl::state() const
return (QMediaRecorder::State)m_session->state();
}
+QMediaRecorder::Status AudioMediaRecorderControl::status() const
+{
+ static QMediaRecorder::Status statusTable[3][3] = {
+ //Stopped recorder state:
+ { QMediaRecorder::LoadedStatus, QMediaRecorder::FinalizingStatus, QMediaRecorder::FinalizingStatus },
+ //Recording recorder state:
+ { QMediaRecorder::StartingStatus, QMediaRecorder::RecordingStatus, QMediaRecorder::PausedStatus },
+ //Paused recorder state:
+ { QMediaRecorder::StartingStatus, QMediaRecorder::RecordingStatus, QMediaRecorder::PausedStatus }
+ };
+
+ return statusTable[m_state][m_session->state()];
+}
+
qint64 AudioMediaRecorderControl::duration() const
{
return m_session->position();
@@ -79,17 +95,29 @@ qint64 AudioMediaRecorderControl::duration() const
void AudioMediaRecorderControl::record()
{
- m_session->record();
+ if (m_state != QMediaRecorder::RecordingState) {
+ m_state = QMediaRecorder::RecordingState;
+ m_session->record();
+ updateStatus();
+ }
}
void AudioMediaRecorderControl::pause()
{
- m_session->stop();
+ if (m_state != QMediaRecorder::PausedState) {
+ m_state = QMediaRecorder::PausedState;
+ m_session->pause();
+ updateStatus();
+ }
}
void AudioMediaRecorderControl::stop()
{
- m_session->stop();
+ if (m_state != QMediaRecorder::StoppedState) {
+ m_state = QMediaRecorder::StoppedState;
+ m_session->pause();
+ updateStatus();
+ }
}
bool AudioMediaRecorderControl::isMuted() const
@@ -100,3 +128,18 @@ bool AudioMediaRecorderControl::isMuted() const
void AudioMediaRecorderControl::setMuted(bool)
{
}
+
+void AudioMediaRecorderControl::updateStatus()
+{
+ QMediaRecorder::Status newStatus = status();
+ if (m_prevStatus != newStatus) {
+ m_prevStatus = newStatus;
+ emit statusChanged(m_prevStatus);
+ }
+}
+
+void AudioMediaRecorderControl::handleSessionError(int code, const QString &description)
+{
+ emit error(code, description);
+ stop();
+}
diff --git a/src/plugins/audiocapture/audiomediarecordercontrol.h b/src/plugins/audiocapture/audiomediarecordercontrol.h
index 10e20d793..edd54ec83 100644
--- a/src/plugins/audiocapture/audiomediarecordercontrol.h
+++ b/src/plugins/audiocapture/audiomediarecordercontrol.h
@@ -62,6 +62,7 @@ public:
bool setOutputLocation(const QUrl &sink);
QMediaRecorder::State state() const;
+ QMediaRecorder::Status status() const;
qint64 duration() const;
@@ -75,8 +76,14 @@ public slots:
void stop();
void setMuted(bool);
+private slots:
+ void updateStatus();
+ void handleSessionError(int code, const QString &description);
+
private:
AudioCaptureSession* m_session;
+ QMediaRecorder::State m_state;
+ QMediaRecorder::Status m_prevStatus;
};
#endif