diff options
Diffstat (limited to 'src/imports')
-rw-r--r-- | src/imports/multimedia/Video.qml | 30 | ||||
-rw-r--r-- | src/imports/multimedia/multimedia.cpp | 8 | ||||
-rw-r--r-- | src/imports/multimedia/qdeclarativeaudio.cpp | 45 | ||||
-rw-r--r-- | src/imports/multimedia/qdeclarativeaudio_p.h | 5 | ||||
-rw-r--r-- | src/imports/multimedia/qdeclarativecameracapture.cpp | 32 | ||||
-rw-r--r-- | src/imports/multimedia/qdeclarativecameracapture_p.h | 4 | ||||
-rw-r--r-- | src/imports/multimedia/qdeclarativecameraflash.cpp | 51 | ||||
-rw-r--r-- | src/imports/multimedia/qdeclarativecameraflash_p.h | 6 |
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; |