summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2021-12-20 18:23:49 +0100
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2021-12-22 13:42:13 +0000
commit97596f6cf3582fd5e7d90c917e4cdaa1965efecf (patch)
treec564317a49f5c445fdfa22438547af57f80add95
parent08c51a63c3b55ac6dfe53e8884b1eb5b9eaa4c94 (diff)
audiosource example: Refactor push mode
Factor out a function to calculate the level from the data to make it clearer that push does not require reimplementing a QIODevice. Complements a71362d9ef7098c1d7869b3768a0990a61474980. Change-Id: I4899b96d1e8d0336f960e514bfd355a894522aa8 Reviewed-by: André de la Rocha <andre.rocha@qt.io> (cherry picked from commit 28932bcc4c40a6c5f96bf2beb860c916c1161056) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r--examples/multimedia/audiosource/audiosource.cpp24
-rw-r--r--examples/multimedia/audiosource/audiosource.h2
2 files changed, 16 insertions, 10 deletions
diff --git a/examples/multimedia/audiosource/audiosource.cpp b/examples/multimedia/audiosource/audiosource.cpp
index c2b9547b4..1f84ae63a 100644
--- a/examples/multimedia/audiosource/audiosource.cpp
+++ b/examples/multimedia/audiosource/audiosource.cpp
@@ -81,7 +81,7 @@ qint64 AudioInfo::readData(char * /* data */, qint64 /* maxlen */)
return 0;
}
-qint64 AudioInfo::writeData(const char *data, qint64 len)
+qreal AudioInfo::calculateLevel(const char *data, qint64 len) const
{
const int channelBytes = m_format.bytesPerSample();
const int sampleBytes = m_format.bytesPerFrame();
@@ -98,8 +98,12 @@ qint64 AudioInfo::writeData(const char *data, qint64 len)
ptr += channelBytes;
}
}
+ return maxValue;
+}
- m_level = maxValue;
+qint64 AudioInfo::writeData(const char *data, qint64 len)
+{
+ m_level = calculateLevel(data, len);
emit levelChanged(m_level);
@@ -210,18 +214,18 @@ void InputTest::toggleMode()
m_audioInput->start(m_audioInfo.data());
} else {
m_modeButton->setText(tr("Enable pull mode"));
- auto io = m_audioInput->start();
+ auto *io = m_audioInput->start();
connect(io, &QIODevice::readyRead,
- [&, io]() {
- qint64 len = m_audioInput->bytesAvailable();
- const int BufferSize = 4096;
- if (len > BufferSize)
- len = BufferSize;
+ [this, io]() {
+ static const qint64 BufferSize = 4096;
+ const qint64 len = qMin(m_audioInput->bytesAvailable(), BufferSize);
QByteArray buffer(len, 0);
qint64 l = io->read(buffer.data(), len);
- if (l > 0)
- m_audioInfo->write(buffer.constData(), l);
+ if (l > 0) {
+ const qreal level = m_audioInfo->calculateLevel(buffer.constData(), l);
+ m_canvas->setLevel(level);
+ }
});
}
diff --git a/examples/multimedia/audiosource/audiosource.h b/examples/multimedia/audiosource/audiosource.h
index 7fde1b2cb..fce664fd9 100644
--- a/examples/multimedia/audiosource/audiosource.h
+++ b/examples/multimedia/audiosource/audiosource.h
@@ -79,6 +79,8 @@ public:
qint64 readData(char *data, qint64 maxlen) override;
qint64 writeData(const char *data, qint64 len) override;
+ qreal calculateLevel(const char *data, qint64 len) const;
+
signals:
void levelChanged(qreal level);