From 093a3efbf3c98226652113ad78ae289a247c8a2c Mon Sep 17 00:00:00 2001 From: Ling Hu Date: Tue, 3 Jan 2012 13:59:02 +1000 Subject: Add new gapless playback control interface Change-Id: If14c20af6da81dd65177102c9b955e3ebd40c722 Reviewed-by: Mithra Pattison Reviewed-by: Michael Goddard --- src/multimedia/multimedia.pro | 7 +- src/multimedia/qmediagaplessplaybackcontrol.cpp | 165 ++++++++++++++++++++++++ src/multimedia/qmediagaplessplaybackcontrol.h | 81 ++++++++++++ 3 files changed, 250 insertions(+), 3 deletions(-) create mode 100644 src/multimedia/qmediagaplessplaybackcontrol.cpp create mode 100644 src/multimedia/qmediagaplessplaybackcontrol.h (limited to 'src/multimedia') diff --git a/src/multimedia/multimedia.pro b/src/multimedia/multimedia.pro index e8ea8e48a..120f8faf6 100644 --- a/src/multimedia/multimedia.pro +++ b/src/multimedia/multimedia.pro @@ -19,7 +19,6 @@ load(qt_module_config) HEADERS += qtmultimediaversion.h - PRIVATE_HEADERS += \ qmediacontrol_p.h \ qmediaobject_p.h \ @@ -72,7 +71,8 @@ PUBLIC_HEADERS += \ qmediatimerange.h \ qmedianetworkaccesscontrol.h \ qmediaenumdebug.h \ - qtmultimediadefs.h + qtmultimediadefs.h \ + qmediagaplessplaybackcontrol.h SOURCES += qmediacontrol.cpp \ qmediaobject.cpp \ @@ -115,7 +115,8 @@ SOURCES += qmediacontrol.cpp \ qmedianetworkaccesscontrol.cpp \ qvideosurfaceoutput.cpp \ qmediabackgroundplaybackcontrol.cpp \ - qtmedianamespace.cpp + qtmedianamespace.cpp \ + qmediagaplessplaybackcontrol.cpp #Camera PUBLIC_HEADERS += \ diff --git a/src/multimedia/qmediagaplessplaybackcontrol.cpp b/src/multimedia/qmediagaplessplaybackcontrol.cpp new file mode 100644 index 000000000..84363e00c --- /dev/null +++ b/src/multimedia/qmediagaplessplaybackcontrol.cpp @@ -0,0 +1,165 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qmediagaplessplaybackcontrol.h" +#include "qmediacontrol_p.h" + +/*! + \class QMediaGaplessPlaybackControl + \inmodule QtMultimedia + \ingroup multimedia + \since 5.0 + + \brief The QMediaGaplessPlaybackControl class provides access to the gapless playback + related control of a QMediaService. + + If a QMediaService supports gapless playback it will implement QMediaGaplessPlaybackControl. + This control provides a means to set the \l {setNextMedia()}{next media} or + \l {setCrossfadeTime()}{crossfade time} for smooth transitions between tracks. + + The functionality provided by this control is exposed to application + code through the QMediaPlayer class. + + The interface name of QMediaGaplessPlaybackControl is + \c com.nokia.Qt.QMediaGaplessPlaybackControl/1.0 as defined in QMediaGaplessPlaybackControl_iid. + + \sa QMediaService::requestControl(), QMediaPlayer +*/ + +/*! + \macro QMediaGaplessPlaybackControl_iid + + \c com.nokia.Qt.QMediaGaplessPlaybackControl/1.0 + + Defines the interface name of the QMediaGaplessPlaybackControl class. + + \relates QMediaGaplessPlaybackControl +*/ + +/*! + Destroys a gapless playback control. +*/ +QMediaGaplessPlaybackControl::~QMediaGaplessPlaybackControl() +{ +} + +/*! + Constructs a new gapless playback control with the given \a parent. +*/ +QMediaGaplessPlaybackControl::QMediaGaplessPlaybackControl(QObject *parent): + QMediaControl(*new QMediaControlPrivate, parent) +{ +} + +/*! + \fn QMediaGaplessPlaybackControl::nextMedia() const + + Returns the content of the next media + \since 1.0 +*/ + +/*! + \fn QMediaGaplessPlaybackControl::setNextMedia(const QMediaContent& media) + + Sets the next media for smooth transition. + \since 1.0 +*/ + +/*! + \fn QMediaGaplessPlaybackControl::nextMediaChanged(const QMediaContent& media) + + Signals that the next media has changed (either explicitly via \l setNextMedia() or when the + player clears the next media while advancing to it). + + \since 1.0 + \sa nextMedia() +*/ + +/*! + \fn QMediaGaplessPlaybackControl::advancedToNextMedia() + + Signals when the player advances to the next media (the content of next media will be cleared). + + \since 1.0 + \sa nextMedia() +*/ + +/*! + \fn QMediaGaplessPlaybackControl::isCrossfadeSupported() const + + Indicates whether crossfading is supported or not. + If crossfading is not supported, \l setCrossfadTime() will be ignored and \l crossfadeTime() will + always return 0. + + \since 1.0 +*/ + +/*! + \fn QMediaGaplessPlaybackControl::setCrossfadeTime(qreal crossfadeTime) + + Sets the crossfade time in seconds for smooth transition. + + Positive value means how much time it will take for the next media to transit from silent to + full volume and vice versa for current one. So both current and the next one will be playing + during this period of time. + + A crossfade time of zero or negative will result in gapless playback (suitable for some + continuous media). + + \since 1.0 +*/ + +/*! + \fn QMediaGaplessPlaybackControl::crossfadeTime() const + + Returns current crossfade time in seconds. + \since 1.0 +*/ + +/*! + \fn QMediaGaplessPlaybackControl::crossfadeTimeChanged(qreal crossfadeTime) + + Signals that the crossfade time has changed. + + \since 1.0 + \sa crossfadeTime() +*/ + diff --git a/src/multimedia/qmediagaplessplaybackcontrol.h b/src/multimedia/qmediagaplessplaybackcontrol.h new file mode 100644 index 000000000..852bdb222 --- /dev/null +++ b/src/multimedia/qmediagaplessplaybackcontrol.h @@ -0,0 +1,81 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#ifndef QMEDIAGAPLESSPLAYBACKCONTROL_H +#define QMEDIAGAPLESSPLAYBACKCONTROL_H + +#include "qmediacontrol.h" +#include "qmediacontent.h" + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +QT_MODULE(Multimedia) + +class Q_MULTIMEDIA_EXPORT QMediaGaplessPlaybackControl : public QMediaControl +{ +public: + virtual ~QMediaGaplessPlaybackControl(); + + virtual QMediaContent nextMedia() const = 0; + virtual void setNextMedia(const QMediaContent &media) = 0; + + virtual bool isCrossfadeSupported() const = 0; + virtual qreal crossfadeTime() const = 0; + virtual void setCrossfadeTime(qreal crossfadeTime) = 0; + +Q_SIGNALS: + void crossfadeTimeChanged(qreal crossfadeTime); + void nextMediaChanged(const QMediaContent& media); + void advancedToNextMedia(); + +protected: + QMediaGaplessPlaybackControl(QObject* parent = 0); +}; + +#define QMediaGaplessPlaybackControl_iid "com.nokia.Qt.QMediaGaplessPlaybackControl/1.0" +Q_MEDIA_DECLARE_CONTROL(QMediaGaplessPlaybackControl, QMediaGaplessPlaybackControl_iid) + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif // QMEDIAGAPLESSPLAYBACKCONTROL_H -- cgit v1.2.3