summaryrefslogtreecommitdiffstats
path: root/tests/auto/unit/qmultimedia_common
diff options
context:
space:
mode:
authorLev Zelenskiy <lev.zelenskiy@nokia.com>2012-02-24 12:50:32 +1000
committerQt by Nokia <qt-info@nokia.com>2012-02-24 06:00:41 +0100
commitb56d3e70df4a5bf25a1be97213b5dc36bc5e6dbd (patch)
treee35fd301a0e7198609679c95e2374d4b4aa28e85 /tests/auto/unit/qmultimedia_common
parent0b8c6115cdb1ed7174b558daa00a19841a2d5a78 (diff)
Changes to GStreamer backend for audio decoder.
Removed WaitingState. New signals: finished(), positionChanged(), durationChanged(). New methods: position(), duration(). A parameter removed from read() method. Unit tests updated. Change-Id: Ie9d8a2804285c5542e592cce69963adbdf6ebfb8 Reviewed-by: Jonas Rabbe <jonas.rabbe@nokia.com> Reviewed-by: Michael Goddard <michael.goddard@nokia.com>
Diffstat (limited to 'tests/auto/unit/qmultimedia_common')
-rw-r--r--tests/auto/unit/qmultimedia_common/mockaudiodecodercontrol.h55
1 files changed, 38 insertions, 17 deletions
diff --git a/tests/auto/unit/qmultimedia_common/mockaudiodecodercontrol.h b/tests/auto/unit/qmultimedia_common/mockaudiodecodercontrol.h
index 938da31c0..f0b0adc54 100644
--- a/tests/auto/unit/qmultimedia_common/mockaudiodecodercontrol.h
+++ b/tests/auto/unit/qmultimedia_common/mockaudiodecodercontrol.h
@@ -51,6 +51,8 @@
#include <QTimer>
#include <QIODevice>
+#define MOCK_DECODER_MAX_BUFFERS 10
+
QT_BEGIN_HEADER
QT_BEGIN_NAMESPACE
@@ -66,6 +68,7 @@ public:
: QAudioDecoderControl(parent)
, mState(QAudioDecoder::StoppedState)
, mDevice(0)
+ , mPosition(-1)
, mSerial(0)
{
mFormat.setChannels(1);
@@ -126,6 +129,7 @@ public:
if (!mSource.isEmpty()) {
mState = QAudioDecoder::DecodingState;
emit stateChanged(mState);
+ emit durationChanged(duration());
QTimer::singleShot(50, this, SLOT(pretendDecode()));
} else {
@@ -139,28 +143,33 @@ public:
if (mState != QAudioDecoder::StoppedState) {
mState = QAudioDecoder::StoppedState;
mSerial = 0;
+ mPosition = 0;
mBuffers.clear();
emit stateChanged(mState);
emit bufferAvailableChanged(false);
}
}
- QAudioBuffer read(bool *ok)
+ QAudioBuffer read()
{
+ QAudioBuffer a;
if (mBuffers.length() > 0) {
- if (ok)
- *ok = true;
- QAudioBuffer a = mBuffers.takeFirst();
- if (mBuffers.length() == 0)
+ a = mBuffers.takeFirst();
+ mPosition = a.startTime() / 1000;
+ emit positionChanged(mPosition);
+
+ if (mBuffers.isEmpty())
emit bufferAvailableChanged(false);
- QTimer::singleShot(50, this, SLOT(pretendDecode()));
- return a;
- } else {
- // Can't do anything here :(
- if (ok)
- *ok = false;
- return QAudioBuffer();
+
+ if (mBuffers.isEmpty() && mSerial >= MOCK_DECODER_MAX_BUFFERS) {
+ mState = QAudioDecoder::StoppedState;
+ emit finished();
+ emit stateChanged(mState);
+ } else
+ QTimer::singleShot(50, this, SLOT(pretendDecode()));
}
+
+ return a;
}
bool bufferAvailable() const
@@ -168,22 +177,33 @@ public:
return mBuffers.length() > 0;
}
+ qint64 position() const
+ {
+ return mPosition;
+ }
+
+ qint64 duration() const
+ {
+ return (sizeof(mSerial) * MOCK_DECODER_MAX_BUFFERS * qint64(1000)) / (mFormat.sampleRate() * mFormat.channels());
+ }
+
private slots:
void pretendDecode()
{
+ // Check if we've reached end of stream
+ if (mSerial >= MOCK_DECODER_MAX_BUFFERS)
+ return;
+
// We just keep the length of mBuffers to 3 or less.
if (mBuffers.length() < 3) {
QByteArray b(sizeof(mSerial), 0);
memcpy(b.data(), &mSerial, sizeof(mSerial));
+ qint64 position = (sizeof(mSerial) * mSerial * qint64(1000000)) / (mFormat.sampleRate() * mFormat.channels());
mSerial++;
- mBuffers.push_back(QAudioBuffer(b, mFormat));
+ mBuffers.push_back(QAudioBuffer(b, mFormat, position));
emit bufferReady();
if (mBuffers.count() == 1)
emit bufferAvailableChanged(true);
- } else {
- // Can't do anything here, wait for a read to restart the timer
- mState = QAudioDecoder::WaitingState;
- emit stateChanged(mState);
}
}
@@ -192,6 +212,7 @@ public:
QString mSource;
QIODevice *mDevice;
QAudioFormat mFormat;
+ qint64 mPosition;
int mSerial;
QList<QAudioBuffer> mBuffers;