diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2021-12-20 18:23:49 +0100 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2021-12-22 13:42:13 +0000 |
commit | 97596f6cf3582fd5e7d90c917e4cdaa1965efecf (patch) | |
tree | c564317a49f5c445fdfa22438547af57f80add95 | |
parent | 08c51a63c3b55ac6dfe53e8884b1eb5b9eaa4c94 (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.cpp | 24 | ||||
-rw-r--r-- | examples/multimedia/audiosource/audiosource.h | 2 |
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); |