Add new gapless playback control interface
authorLing Hu <ling.hu@nokia.com>
Tue, 3 Jan 2012 03:59:02 +0000 (13:59 +1000)
committerQt by Nokia <qt-info@nokia.com>
Wed, 4 Jan 2012 02:43:32 +0000 (03:43 +0100)
Change-Id: If14c20af6da81dd65177102c9b955e3ebd40c722
Reviewed-by: Mithra Pattison <mithra.pattison@nokia.com>
Reviewed-by: Michael Goddard <michael.goddard@nokia.com>
src/multimedia/multimedia.pro
src/multimedia/qmediagaplessplaybackcontrol.cpp [new file with mode: 0644]
src/multimedia/qmediagaplessplaybackcontrol.h [new file with mode: 0644]

index e8ea8e4..120f8fa 100644 (file)
@@ -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 (file)
index 0000000..84363e0
--- /dev/null
@@ -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 (file)
index 0000000..852bdb2
--- /dev/null
@@ -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