summaryrefslogtreecommitdiffstats
path: root/src/multimedia/recording
diff options
context:
space:
mode:
Diffstat (limited to 'src/multimedia/recording')
-rw-r--r--src/multimedia/recording/qmediarecorder.cpp60
-rw-r--r--src/multimedia/recording/qmediarecorder.h5
-rw-r--r--src/multimedia/recording/qmediarecorder_p.h3
3 files changed, 60 insertions, 8 deletions
diff --git a/src/multimedia/recording/qmediarecorder.cpp b/src/multimedia/recording/qmediarecorder.cpp
index d1f3bdd1a..d57ca0b3e 100644
--- a/src/multimedia/recording/qmediarecorder.cpp
+++ b/src/multimedia/recording/qmediarecorder.cpp
@@ -50,6 +50,7 @@
#include <qaudioencodercontrol.h>
#include <qvideoencodercontrol.h>
#include <qmediacontainercontrol.h>
+#include <qmediaavailabilitycontrol.h>
#include <qcamera.h>
#include <qcameracontrol.h>
@@ -99,6 +100,7 @@ QMediaRecorderPrivate::QMediaRecorderPrivate():
audioControl(0),
videoControl(0),
metaDataControl(0),
+ availabilityControl(0),
notifyTimer(0),
state(QMediaRecorder::StoppedState),
error(QMediaRecorder::NoError)
@@ -143,6 +145,7 @@ void QMediaRecorderPrivate::_q_serviceDestroyed()
audioControl = 0;
videoControl = 0;
metaDataControl = 0;
+ availabilityControl = 0;
}
void QMediaRecorderPrivate::_q_updateActualLocation(const QUrl &location)
@@ -179,6 +182,19 @@ void QMediaRecorderPrivate::_q_applySettings()
}
}
+void QMediaRecorderPrivate::_q_availabilityChanged(QtMultimedia::AvailabilityError error)
+{
+ Q_Q(QMediaRecorder);
+ Q_UNUSED(error);
+
+ // Really this should not always emit, but
+ // we can't really tell from here (isAvailable
+ // may not have changed, or the mediaobject's overridden
+ // availabilityError() may not have changed).
+ q->availabilityErrorChanged(q->availabilityError());
+ q->availabilityChanged(q->isAvailable());
+}
+
void QMediaRecorderPrivate::restartCamera()
{
//restart camera if it can't apply new settings in the Active state
@@ -299,6 +315,11 @@ bool QMediaRecorder::setMediaObject(QMediaObject *object)
service->releaseControl(d->metaDataControl);
}
+ if (d->availabilityControl) {
+ disconnect(d->availabilityControl, SIGNAL(availabilityChanged(QtMultimedia::AvailabilityError)),
+ this, SLOT(_q_availabilityChanged(QtMultimedia::AvailabilityError)));
+ service->releaseControl(d->availabilityControl);
+ }
}
}
@@ -307,6 +328,7 @@ bool QMediaRecorder::setMediaObject(QMediaObject *object)
d->audioControl = 0;
d->videoControl = 0;
d->metaDataControl = 0;
+ d->availabilityControl = 0;
d->mediaObject = object;
@@ -344,6 +366,12 @@ bool QMediaRecorder::setMediaObject(QMediaObject *object)
}
}
+ d->availabilityControl = service->requestControl<QMediaAvailabilityControl*>();
+ if (d->availabilityControl) {
+ connect(d->availabilityControl, SIGNAL(availabilityChanged(QtMultimedia::AvailabilityError)),
+ this, SLOT(_q_availabilityChanged(QtMultimedia::AvailabilityError)));
+ }
+
connect(d->control, SIGNAL(stateChanged(QMediaRecorder::State)),
this, SLOT(_q_stateChanged(QMediaRecorder::State)));
@@ -399,24 +427,28 @@ bool QMediaRecorder::setMediaObject(QMediaObject *object)
/*!
Returns true if media recorder service ready to use.
+
+ \sa availabilityChanged()
*/
bool QMediaRecorder::isAvailable() const
{
- if (d_func()->control != NULL)
- return true;
- else
- return false;
+ return availabilityError() == QtMultimedia::NoError;
}
/*!
Returns the availability error code.
+
+ \sa availabilityErrorChanged()
*/
QtMultimedia::AvailabilityError QMediaRecorder::availabilityError() const
{
- if (d_func()->control != NULL)
- return QtMultimedia::NoError;
- else
+ if (d_func()->control == NULL)
return QtMultimedia::ServiceMissingError;
+
+ if (d_func()->availabilityControl)
+ return d_func()->availabilityControl->availability();
+
+ return QtMultimedia::NoError;
}
QUrl QMediaRecorder::outputLocation() const
@@ -767,7 +799,7 @@ void QMediaRecorder::setEncodingSettings(const QAudioEncoderSettings &audio,
Start recording.
This is an asynchronous call, with signal
- stateCahnged(QMediaRecorder::RecordingState) being emitted when recording
+ stateChanged(QMediaRecorder::RecordingState) being emitted when recording
started, otherwise the error() signal is emitted.
*/
@@ -852,6 +884,18 @@ void QMediaRecorder::stop()
*/
/*!
+ \fn QMediaRecorder::availableChanged(bool available)
+
+ Signals that the media recorder is now available (if \a available is true), or not.
+*/
+
+/*!
+ \fn QMediaRecorder::availabilityErrorChanged(QtMultimedia::AvailabilityError availability)
+
+ Signals that the service availability has changed to \a availability.
+*/
+
+/*!
\fn QMediaRecorder::mutedChanged(bool muted)
Signals that the \a muted state has changed. If true the recording is being muted.
diff --git a/src/multimedia/recording/qmediarecorder.h b/src/multimedia/recording/qmediarecorder.h
index 1aac73cf2..84a6eca63 100644
--- a/src/multimedia/recording/qmediarecorder.h
+++ b/src/multimedia/recording/qmediarecorder.h
@@ -42,6 +42,7 @@
#ifndef QMEDIARECORDER_H
#define QMEDIARECORDER_H
+#include <qtmedianamespace.h>
#include <qmediaobject.h>
#include <qmediaencodersettings.h>
#include <qmediabindableinterface.h>
@@ -173,6 +174,9 @@ Q_SIGNALS:
void metaDataChanged();
void metaDataChanged(const QString &key, const QVariant &value);
+ void availabilityChanged(bool available);
+ void availabilityErrorChanged(QtMultimedia::AvailabilityError error);
+
protected:
QMediaRecorder(QMediaRecorderPrivate &dd, QMediaObject *mediaObject, QObject *parent = 0);
bool setMediaObject(QMediaObject *object);
@@ -188,6 +192,7 @@ private:
Q_PRIVATE_SLOT(d_func(), void _q_updateActualLocation(const QUrl &))
Q_PRIVATE_SLOT(d_func(), void _q_updateNotifyInterval(int))
Q_PRIVATE_SLOT(d_func(), void _q_applySettings())
+ Q_PRIVATE_SLOT(d_func(), void _q_availabilityChanged(QtMultimedia::AvailabilityError))
};
QT_END_NAMESPACE
diff --git a/src/multimedia/recording/qmediarecorder_p.h b/src/multimedia/recording/qmediarecorder_p.h
index b899665eb..03919ef19 100644
--- a/src/multimedia/recording/qmediarecorder_p.h
+++ b/src/multimedia/recording/qmediarecorder_p.h
@@ -53,6 +53,7 @@ class QMediaContainerControl;
class QAudioEncoderControl;
class QVideoEncoderControl;
class QMetaDataWriterControl;
+class QMediaAvailabilityControl;
class QTimer;
class QMediaRecorderPrivate
@@ -73,6 +74,7 @@ public:
QAudioEncoderControl *audioControl;
QVideoEncoderControl *videoControl;
QMetaDataWriterControl *metaDataControl;
+ QMediaAvailabilityControl *availabilityControl;
bool settingsChanged;
@@ -90,6 +92,7 @@ public:
void _q_notify();
void _q_updateNotifyInterval(int ms);
void _q_applySettings();
+ void _q_availabilityChanged(QtMultimedia::AvailabilityError error);
QMediaRecorder *q_ptr;
};