Add the audio decoder variant of QMediaPlayer.

Rather than the probe based way of doing it.  Initially private.

Change-Id: I30005f8da22f6451cb9de8eb3f0e193838d48c93
Reviewed-by: Ling Hu <ling.hu@nokia.com>
Reviewed-by: Jonas Rabbe <jonas.rabbe@nokia.com>
This commit is contained in:
Michael Goddard
2012-02-06 17:45:10 +10:00
committed by Qt by Nokia
parent 272be4554f
commit 87ec3461c1
13 changed files with 1596 additions and 4 deletions

View File

@@ -35,6 +35,9 @@ PUBLIC_HEADERS += \
controls/qmediaaudioprobecontrol.h \
controls/qmediavideoprobecontrol.h
PRIVATE_HEADERS += \
controls/qaudiodecodercontrol_p.h
SOURCES += \
controls/qaudioencodercontrol.cpp \
controls/qcameracapturebufferformatcontrol.cpp \
@@ -67,4 +70,5 @@ SOURCES += \
controls/qvideoencodercontrol.cpp \
controls/qvideorenderercontrol.cpp \
controls/qmediaaudioprobecontrol.cpp \
controls/qmediavideoprobecontrol.cpp
controls/qmediavideoprobecontrol.cpp \
controls/qaudiodecodercontrol_p.cpp

View File

@@ -0,0 +1,212 @@
/****************************************************************************
**
** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/
**
** 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 "qmediacontrol_p.h"
#include "qaudiodecodercontrol_p.h"
QT_BEGIN_NAMESPACE
/*!
\class QAudioDecoderControl
\inmodule QtMultimedia
\ingroup multimedia
\ingroup multimedia_control
\brief The QAudioDecoderControl class provides access to the audio decoding
functionality of a QMediaService.
\preliminary
The functionality provided by this control is exposed to application
code through the QAudioDecoder class.
The interface name of QAudioDecoderControl is \c com.nokia.Qt.QAudioDecoderControl/1.0 as
defined in QAudioDecoderControl_iid.
\sa QMediaService::requestControl(), QAudioDecoder
*/
/*!
\macro QAudioDecoderControl_iid
\c com.nokia.Qt.QAudioDecoderControl/1.0
Defines the interface name of the QAudioDecoderControl class.
\relates QAudioDecoderControl
*/
/*!
Destroys an audio decoder control.
*/
QAudioDecoderControl::~QAudioDecoderControl()
{
}
/*!
Constructs a new audio decoder control with the given \a parent.
*/
QAudioDecoderControl::QAudioDecoderControl(QObject *parent):
QMediaControl(*new QMediaControlPrivate, parent)
{
}
/*!
\fn QAudioDecoderControl::state() const
Returns the state of a player control.
*/
/*!
\fn QAudioDecoderControl::stateChanged(QAudioDecoder::State state)
Signals that the \a state of a player control has changed.
\sa state()
*/
/*!
\fn QAudioDecoderControl::sourceFilename() const
Returns the current media source filename, or a null QString if none (or a device)
*/
/*!
\fn QAudioDecoderControl::setSourceFilename(const QString &fileName)
Sets the current source to \a fileName. Changing the source will
stop any current decoding and discard any buffers.
Sources are exclusive, so only one can be set.
*/
/*!
\fn QAudioDecoderControl::sourceDevice() const
Returns the current media source QIODevice, or 0 if none (or a file).
*/
/*!
\fn QAudioDecoderControl::setSourceDevice(QIODevice *device)
Sets the current source to \a device. Changing the source will
stop any current decoding and discard any buffers.
Sources are exclusive, so only one can be set.
*/
/*!
\fn QAudioDecoderControl::start()
Starts decoding the current media.
If successful the player control will immediately enter the \l {QAudioDecoder::DecodingState}
{decoding} state.
\sa state(), read()
*/
/*!
\fn QAudioDecoderControl::stop()
Stops playback of the current media and discards any buffers.
If successful the player control will immediately enter the \l {QAudioDecoder::StoppedState}
{stopped} state.
*/
/*!
\fn QAudioDecoderControl::error(int error, const QString &errorString)
Signals that an \a error has occurred. The \a errorString provides a more detailed explanation.
*/
/*!
\fn QAudioDecoderControl::bufferAvailableChanged(bool available)
Signals that the bufferAvailable property has changed to \a available.
*/
/*!
\fn QAudioDecoderControl::bufferReady()
Signals that a new buffer is ready for reading.
*/
/*!
\fn QAudioDecoderControl::formatChanged(const QAudioFormat &format)
Signals that the current audio format of the decoder has changed to \a format.
\sa audioFormat(), setAudioFormat
*/
/*!
\fn QAudioDecoderControl::audioFormat()
Returns the current audio format of the decoded stream.
Any buffers returned should have this format.
\sa setAudioFormat, audioFormatChanged
*/
/*!
\fn QAudioDecoderControl::setAudioFormat(const QAudioFormat &format)
Set the desired audio format for decoded samples to \a format.
If the decoder does not support this format, \l error() will
be set to \c FormatError.
If you do not specify a format, the format of the decoded
audio itself will be used. Otherwise, some format conversion
will be applied.
If you wish to reset the decoded format to that of the original
audio file, you can specify an invalid \a format.
*/
#include "moc_qaudiodecodercontrol_p.cpp"
QT_END_NAMESPACE

View File

@@ -0,0 +1,103 @@
/****************************************************************************
**
** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/
**
** 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 QAUDIODECODERCONTROL_H
#define QAUDIODECODERCONTROL_H
#include "qmediacontrol.h"
#include <private/qaudiodecoder_p.h>
#include <QtCore/qpair.h>
#include "qaudiobuffer.h"
QT_BEGIN_HEADER
QT_BEGIN_NAMESPACE
QT_MODULE(Multimedia)
class QIODevice;
class Q_MULTIMEDIA_EXPORT QAudioDecoderControl : public QMediaControl
{
Q_OBJECT
public:
~QAudioDecoderControl();
virtual QAudioDecoder::State state() const = 0;
virtual QString sourceFilename() const = 0;
virtual void setSourceFilename(const QString &fileName) = 0;
virtual QIODevice* sourceDevice() const = 0;
virtual void setSourceDevice(QIODevice *device) = 0;
virtual void start() = 0;
virtual void stop() = 0;
virtual QAudioFormat audioFormat() const = 0;
virtual void setAudioFormat(const QAudioFormat &format) = 0;
virtual QAudioBuffer read(bool *ok) = 0;
virtual bool bufferAvailable() const = 0;
Q_SIGNALS:
void stateChanged(QAudioDecoder::State newState);
void formatChanged(const QAudioFormat &format);
void error(int error, const QString &errorString);
void bufferReady();
void bufferAvailableChanged(bool available);
protected:
QAudioDecoderControl(QObject* parent = 0);
};
#define QAudioDecoderControl_iid "com.nokia.Qt.QAudioDecoderControl/1.0"
Q_MEDIA_DECLARE_CONTROL(QAudioDecoderControl, QAudioDecoderControl_iid)
QT_END_NAMESPACE
QT_END_HEADER
#endif // QAUDIODECODERCONTROL_H