summaryrefslogtreecommitdiffstats
path: root/src/multimedia/platform/windows/audio/qwindowsaudiosource.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/multimedia/platform/windows/audio/qwindowsaudiosource.cpp')
-rw-r--r--src/multimedia/platform/windows/audio/qwindowsaudiosource.cpp13
1 files changed, 5 insertions, 8 deletions
diff --git a/src/multimedia/platform/windows/audio/qwindowsaudiosource.cpp b/src/multimedia/platform/windows/audio/qwindowsaudiosource.cpp
index d86b27157..8523f9982 100644
--- a/src/multimedia/platform/windows/audio/qwindowsaudiosource.cpp
+++ b/src/multimedia/platform/windows/audio/qwindowsaudiosource.cpp
@@ -305,14 +305,11 @@ bool QWindowsAudioSource::open()
if (!QWindowsAudioUtils::formatToWaveFormatExtensible(settings, wfx)) {
qWarning("QAudioSource: open error, invalid format.");
} else if (buffer_size == 0) {
- buffer_size
- = (settings.sampleRate()
- * settings.channelCount()
- * settings.bytesPerSample()
- + 39) / 5;
- period_size = buffer_size / 5;
+ period_size = settings.sampleRate() / 25 * settings.bytesPerFrame();
+ buffer_size = period_size * 5;
} else {
- period_size = buffer_size / 5;
+ if (int bpf = settings.bytesPerFrame())
+ period_size = bpf * (buffer_size / 5 / bpf);
}
if (period_size == 0) {
@@ -645,7 +642,7 @@ bool QWindowsAudioSource::deviceReady()
if(pullMode) {
// reads some audio data and writes it to QIODevice
- read(0, buffer_size);
+ read(0, period_size * (buffer_size / period_size));
} else {
// emits readyRead() so user will call read() on QIODevice to get some audio data
InputPrivate* a = qobject_cast<InputPrivate*>(audioSource);