summaryrefslogtreecommitdiffstats
path: root/src/imports
diff options
context:
space:
mode:
Diffstat (limited to 'src/imports')
-rw-r--r--src/imports/multimedia/Video.qml30
-rw-r--r--src/imports/multimedia/multimedia.cpp8
-rw-r--r--src/imports/multimedia/qdeclarativeaudio.cpp45
-rw-r--r--src/imports/multimedia/qdeclarativeaudio_p.h5
-rw-r--r--src/imports/multimedia/qdeclarativecameracapture.cpp32
-rw-r--r--src/imports/multimedia/qdeclarativecameracapture_p.h4
-rw-r--r--src/imports/multimedia/qdeclarativecameraflash.cpp51
-rw-r--r--src/imports/multimedia/qdeclarativecameraflash_p.h6
8 files changed, 178 insertions, 3 deletions
diff --git a/src/imports/multimedia/Video.qml b/src/imports/multimedia/Video.qml
index b3fee7495..66b86c74b 100644
--- a/src/imports/multimedia/Video.qml
+++ b/src/imports/multimedia/Video.qml
@@ -38,7 +38,7 @@
****************************************************************************/
import QtQuick 2.0
-import QtMultimedia 5.6
+import QtMultimedia 5.9
/*!
\qmltype Video
@@ -384,6 +384,34 @@ Item {
property alias autoPlay: player.autoPlay
/*!
+ \qmlproperty int Video::notifyInterval
+
+ The interval at which notifiable properties will update.
+
+ The notifiable properties are \l position and \l bufferProgress.
+
+ The interval is expressed in milliseconds, the default value is 1000.
+
+ \since 5.9
+ */
+ property alias notifyInterval: player.notifyInterval
+
+ /*!
+ \qmlproperty int Video::loops
+
+ This property holds the number of times the media is played. A value of \c 0 or \c 1 means
+ the media will be played only once; set to \c MediaPlayer.Infinite to enable infinite looping.
+
+ The value can be changed while the media is playing, in which case it will update
+ the remaining loops to the new value.
+
+ The default is \c 1.
+
+ \since 5.9
+ */
+ property alias loops: player.loops
+
+ /*!
\qmlsignal Video::paused()
This signal is emitted when playback is paused.
diff --git a/src/imports/multimedia/multimedia.cpp b/src/imports/multimedia/multimedia.cpp
index b7ab473c7..1b8c87cc0 100644
--- a/src/imports/multimedia/multimedia.cpp
+++ b/src/imports/multimedia/multimedia.cpp
@@ -143,6 +143,14 @@ public:
// 5.8 types (nothing new, re-register one of the types)
qmlRegisterType<QSoundEffect>(uri, 5, 8, "SoundEffect");
+ // 5.9 types
+ qmlRegisterType<QDeclarativeAudio, 2>(uri, 5, 9, "Audio");
+ qmlRegisterType<QDeclarativeAudio, 2>(uri, 5, 9, "MediaPlayer");
+ qmlRegisterUncreatableType<QDeclarativeCameraCapture, 1>(uri, 5, 9, "CameraCapture",
+ trUtf8("CameraCapture is provided by Camera"));
+ qmlRegisterUncreatableType<QDeclarativeCameraFlash, 1>(uri, 5, 9, "CameraFlash",
+ trUtf8("CameraFlash is provided by Camera"));
+
qmlRegisterType<QDeclarativeMediaMetaData>();
qmlRegisterType<QAbstractVideoFilter>();
}
diff --git a/src/imports/multimedia/qdeclarativeaudio.cpp b/src/imports/multimedia/qdeclarativeaudio.cpp
index 5a065072c..75bb21ee5 100644
--- a/src/imports/multimedia/qdeclarativeaudio.cpp
+++ b/src/imports/multimedia/qdeclarativeaudio.cpp
@@ -119,6 +119,7 @@ QDeclarativeAudio::QDeclarativeAudio(QObject *parent)
, m_status(QMediaPlayer::NoMedia)
, m_error(QMediaPlayer::ServiceMissingError)
, m_player(0)
+ , m_notifyInterval(1000)
{
}
@@ -201,6 +202,34 @@ void QDeclarativeAudio::setAudioRole(QDeclarativeAudio::AudioRole audioRole)
}
/*!
+ \qmlproperty int QtMultimedia::Audio::notifyInterval
+
+ The interval at which notifiable properties will update.
+
+ The notifiable properties are \l position and \l bufferProgress.
+
+ The interval is expressed in milliseconds, the default value is 1000.
+
+ \since 5.9
+*/
+int QDeclarativeAudio::notifyInterval() const
+{
+ return m_complete ? m_player->notifyInterval() : m_notifyInterval;
+}
+
+void QDeclarativeAudio::setNotifyInterval(int value)
+{
+ if (notifyInterval() == value)
+ return;
+ if (m_complete) {
+ m_player->setNotifyInterval(value);
+ return;
+ }
+ m_notifyInterval = value;
+ emit notifyIntervalChanged();
+}
+
+/*!
\qmlmethod list<int> QtMultimedia::Audio::supportedAudioRoles()
Returns a list of supported audio roles.
@@ -821,6 +850,8 @@ void QDeclarativeAudio::classBegin()
this, SIGNAL(hasVideoChanged()));
connect(m_player, SIGNAL(audioRoleChanged(QAudio::Role)),
this, SIGNAL(audioRoleChanged()));
+ connect(m_player, SIGNAL(notifyIntervalChanged(int)),
+ this, SIGNAL(notifyIntervalChanged()));
m_error = m_player->availability() == QMultimedia::ServiceMissing ? QMediaPlayer::ServiceMissingError : QMediaPlayer::NoError;
@@ -845,6 +876,8 @@ void QDeclarativeAudio::componentComplete()
m_player->setPlaybackRate(m_playbackRate);
if (m_audioRole != UnknownRole)
m_player->setAudioRole(QAudio::Role(m_audioRole));
+ if (m_notifyInterval != m_player->notifyInterval())
+ m_player->setNotifyInterval(m_notifyInterval);
if (!m_content.isNull() && (m_autoLoad || m_autoPlay)) {
m_player->setMedia(m_content, 0);
@@ -1165,6 +1198,18 @@ void QDeclarativeAudio::_q_mediaChanged(const QMediaContent &media)
*/
/*!
+ \qmlproperty int QtMultimedia::MediaPlayer::notifyInterval
+
+ The interval at which notifiable properties will update.
+
+ The notifiable properties are \l position and \l bufferProgress.
+
+ The interval is expressed in milliseconds, the default value is 1000.
+
+ \since 5.9
+*/
+
+/*!
\qmlmethod QtMultimedia::MediaPlayer::play()
Starts playback of the media.
diff --git a/src/imports/multimedia/qdeclarativeaudio_p.h b/src/imports/multimedia/qdeclarativeaudio_p.h
index 48c8704e9..ad30fa729 100644
--- a/src/imports/multimedia/qdeclarativeaudio_p.h
+++ b/src/imports/multimedia/qdeclarativeaudio_p.h
@@ -95,6 +95,7 @@ class QDeclarativeAudio : public QObject, public QQmlParserStatus
Q_PROPERTY(QObject *mediaObject READ mediaObject NOTIFY mediaObjectChanged SCRIPTABLE false DESIGNABLE false)
Q_PROPERTY(Availability availability READ availability NOTIFY availabilityChanged)
Q_PROPERTY(AudioRole audioRole READ audioRole WRITE setAudioRole NOTIFY audioRoleChanged REVISION 1)
+ Q_PROPERTY(int notifyInterval READ notifyInterval WRITE setNotifyInterval NOTIFY notifyIntervalChanged REVISION 2)
Q_ENUMS(Status)
Q_ENUMS(Error)
Q_ENUMS(Loop)
@@ -214,6 +215,8 @@ public:
bool autoPlay() const;
void setAutoPlay(bool autoplay);
+ int notifyInterval() const;
+ void setNotifyInterval(int);
public Q_SLOTS:
void play();
@@ -260,6 +263,7 @@ Q_SIGNALS:
void error(QDeclarativeAudio::Error error, const QString &errorString);
void mediaObjectChanged();
+ Q_REVISION(2) void notifyIntervalChanged();
private Q_SLOTS:
void _q_error(QMediaPlayer::Error);
@@ -294,6 +298,7 @@ private:
QScopedPointer<QDeclarativeMediaMetaData> m_metaData;
QMediaPlayer *m_player;
+ int m_notifyInterval;
friend class QDeclarativeMediaBaseAnimation;
};
diff --git a/src/imports/multimedia/qdeclarativecameracapture.cpp b/src/imports/multimedia/qdeclarativecameracapture.cpp
index 32f3cfc37..22d87ec22 100644
--- a/src/imports/multimedia/qdeclarativecameracapture.cpp
+++ b/src/imports/multimedia/qdeclarativecameracapture.cpp
@@ -112,6 +112,9 @@ QDeclarativeCameraCapture::QDeclarativeCameraCapture(QCamera *camera, QObject *p
connect(m_capture, SIGNAL(error(int,QCameraImageCapture::Error,QString)),
this, SLOT(_q_captureFailed(int,QCameraImageCapture::Error,QString)));
+ connect(m_camera, SIGNAL(statusChanged(QCamera::Status)),
+ this, SLOT(_q_cameraStatusChanged(QCamera::Status)));
+
QMediaService *service = camera->service();
m_metadataWriterControl = service ? service->requestControl<QMetaDataWriterControl*>() : 0;
}
@@ -239,6 +242,15 @@ void QDeclarativeCameraCapture::_q_captureFailed(int id, QCameraImageCapture::Er
qWarning() << "QCameraImageCapture error:" << message;
emit captureFailed(id, message);
}
+
+void QDeclarativeCameraCapture::_q_cameraStatusChanged(QCamera::Status status)
+{
+ if (status != QCamera::UnloadedStatus && status != QCamera::LoadedStatus &&
+ status != QCamera::ActiveStatus)
+ return;
+
+ emit supportedResolutionsChanged();
+}
/*!
\property QDeclarativeCameraCapture::resolution
@@ -251,6 +263,8 @@ void QDeclarativeCameraCapture::_q_captureFailed(int id, QCameraImageCapture::Er
This property holds the resolution/size of the image to be captured.
If empty, the system chooses the appropriate resolution.
+
+ \sa supportedResolutions
*/
QSize QDeclarativeCameraCapture::resolution()
@@ -289,6 +303,24 @@ QString QDeclarativeCameraCapture::errorString() const
}
/*!
+ \qmlproperty list<size> QtMultimedia::CameraCapture::supportedResolutions
+
+ This property holds a list of resolutions which are supported for capturing.
+ The information can be used to set a valid \e resolution. If the camera isn't
+ loaded, the list will be empty.
+
+ \since 5.9
+ \sa resolution
+ */
+QVariantList QDeclarativeCameraCapture::supportedResolutions()
+{
+ QVariantList supportedResolutions;
+ for (const QSize &res : m_capture->supportedResolutions())
+ supportedResolutions.append(QVariant(res));
+ return supportedResolutions;
+}
+
+/*!
\qmlmethod QtMultimedia::CameraCapture::setMetadata(key, value)
diff --git a/src/imports/multimedia/qdeclarativecameracapture_p.h b/src/imports/multimedia/qdeclarativecameracapture_p.h
index 06cb1b8f1..1b8066a4e 100644
--- a/src/imports/multimedia/qdeclarativecameracapture_p.h
+++ b/src/imports/multimedia/qdeclarativecameracapture_p.h
@@ -69,6 +69,7 @@ class QDeclarativeCameraCapture : public QObject
Q_PROPERTY(QString capturedImagePath READ capturedImagePath NOTIFY imageSaved)
Q_PROPERTY(QSize resolution READ resolution WRITE setResolution NOTIFY resolutionChanged)
Q_PROPERTY(QString errorString READ errorString NOTIFY captureFailed)
+ Q_PROPERTY(QVariantList supportedResolutions READ supportedResolutions NOTIFY supportedResolutionsChanged REVISION 1)
public:
~QDeclarativeCameraCapture();
@@ -80,6 +81,7 @@ public:
QString capturedImagePath() const;
QCameraImageCapture::Error error() const;
QString errorString() const;
+ QVariantList supportedResolutions();
public Q_SLOTS:
int capture();
@@ -99,12 +101,14 @@ Q_SIGNALS:
void captureFailed(int requestId, const QString &message);
void resolutionChanged(const QSize &);
+ void supportedResolutionsChanged();
private slots:
void _q_imageCaptured(int, const QImage&);
void _q_imageSaved(int, const QString&);
void _q_imageMetadataAvailable(int, const QString &, const QVariant &);
void _q_captureFailed(int, QCameraImageCapture::Error, const QString&);
+ void _q_cameraStatusChanged(QCamera::Status status);
private:
friend class QDeclarativeCamera;
diff --git a/src/imports/multimedia/qdeclarativecameraflash.cpp b/src/imports/multimedia/qdeclarativecameraflash.cpp
index f8adc5e71..551b88aef 100644
--- a/src/imports/multimedia/qdeclarativecameraflash.cpp
+++ b/src/imports/multimedia/qdeclarativecameraflash.cpp
@@ -73,11 +73,13 @@ QT_BEGIN_NAMESPACE
/*!
Construct a declarative camera flash object using \a parent object.
*/
-QDeclarativeCameraFlash::QDeclarativeCameraFlash(QCamera *camera, QObject *parent) :
- QObject(parent)
+QDeclarativeCameraFlash::QDeclarativeCameraFlash(QCamera *camera, QObject *parent)
+ : QObject(parent)
{
m_exposure = camera->exposure();
connect(m_exposure, SIGNAL(flashReady(bool)), this, SIGNAL(flashReady(bool)));
+ connect(camera, SIGNAL(statusChanged(QCamera::Status)),
+ this, SLOT(_q_cameraStatusChanged(QCamera::Status)));
}
QDeclarativeCameraFlash::~QDeclarativeCameraFlash()
@@ -133,6 +135,51 @@ void QDeclarativeCameraFlash::setFlashMode(QDeclarativeCameraFlash::FlashMode mo
}
}
+void QDeclarativeCameraFlash::_q_cameraStatusChanged(QCamera::Status status)
+{
+ if (status != QCamera::UnloadedStatus && status != QCamera::LoadedStatus &&
+ status != QCamera::ActiveStatus)
+ return;
+
+ emit supportedModesChanged();
+}
+
+/*!
+ \qmlproperty list<FlashMode> QtMultimedia::CameraFlash::supportedModes
+
+ This property holds the supported flash modes of the camera. If the list
+ only contains Camera.FlashOff, no flash is supported.
+
+ \code
+ Camera {
+ id: camera
+ flash {
+ onSupportedModesChanged {
+ if (flash.supportedModes.length == 1) {
+ // no flash supported
+ } else {
+ // some flash is supported
+ }
+ }
+ }
+ }
+ \endcode
+
+ \since 5.9
+ \sa mode
+ */
+QVariantList QDeclarativeCameraFlash::supportedModes() const
+{
+ QVariantList supportedModes;
+
+ for (int i=1; i <= (int) QCameraExposure::FlashManual; i = (i << 1)) {
+ if (m_exposure->isFlashModeSupported((QCameraExposure::FlashMode) i))
+ supportedModes.append(QVariant(i));
+ }
+
+ return supportedModes;
+}
+
/*!
\qmlsignal QtMultimedia::CameraFlash::flashModeChanged(int)
This signal is emitted when the \c flashMode property is changed.
diff --git a/src/imports/multimedia/qdeclarativecameraflash_p.h b/src/imports/multimedia/qdeclarativecameraflash_p.h
index 9247c7202..df037c4d6 100644
--- a/src/imports/multimedia/qdeclarativecameraflash_p.h
+++ b/src/imports/multimedia/qdeclarativecameraflash_p.h
@@ -63,6 +63,7 @@ class QDeclarativeCameraFlash : public QObject
Q_OBJECT
Q_PROPERTY(bool ready READ isFlashReady NOTIFY flashReady)
Q_PROPERTY(FlashMode mode READ flashMode WRITE setFlashMode NOTIFY flashModeChanged)
+ Q_PROPERTY(QVariantList supportedModes READ supportedModes NOTIFY supportedModesChanged REVISION 1)
Q_ENUMS(FlashMode)
public:
@@ -83,6 +84,7 @@ public:
FlashMode flashMode() const;
bool isFlashReady() const;
+ QVariantList supportedModes() const;
public Q_SLOTS:
void setFlashMode(FlashMode);
@@ -90,6 +92,10 @@ public Q_SLOTS:
Q_SIGNALS:
void flashReady(bool status);
void flashModeChanged(FlashMode);
+ void supportedModesChanged();
+
+private slots:
+ void _q_cameraStatusChanged(QCamera::Status status);
private:
friend class QDeclarativeCamera;