summaryrefslogtreecommitdiffstats
path: root/examples
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2021-12-20 18:23:49 +0100
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2021-12-22 14:08:46 +0100
commit28932bcc4c40a6c5f96bf2beb860c916c1161056 (patch)
treeefcdd9f9502518278b38dd7516c28052524715bd /examples
parent4bae921b03c00714efb3ef1eea06d4ca8f9b70d4 (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. Pick-to: 6.3 6.2 Change-Id: I4899b96d1e8d0336f960e514bfd355a894522aa8 Reviewed-by: André de la Rocha <andre.rocha@qt.io>
Diffstat (limited to 'examples')
-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);