From 24664700b3162bb67ff2e28a1de2505fb76c3e0b Mon Sep 17 00:00:00 2001 From: Val Doroshchuk Date: Tue, 2 Jan 2018 17:27:33 +0100 Subject: DirectShow: Fix crackling when playing custom sample rate Seems waveOutWrite() requires WAVEHDR->dwBufferLength to be even number otherwise some crackling might be heard while playing. And looks like it is not related to QAudioFormat, any of it produces the issue. Task-number: QTBUG-64931 Change-Id: I87dbe165611325d9c0291a3bffdc091397b42741 Reviewed-by: Maurice Kalinowski --- src/plugins/windowsaudio/qwindowsaudiooutput.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/plugins/windowsaudio/qwindowsaudiooutput.cpp b/src/plugins/windowsaudio/qwindowsaudiooutput.cpp index eb4caf128..d1c0b475f 100644 --- a/src/plugins/windowsaudio/qwindowsaudiooutput.cpp +++ b/src/plugins/windowsaudio/qwindowsaudiooutput.cpp @@ -241,6 +241,10 @@ bool QWindowsAudioOutput::open() period_size = buffer_size / 5; } + // Make even size of wave block to prevent crackling + // due to waveOutWrite() does not like odd buffer length + period_size &= ~1; + if (period_size == 0) { errorState = QAudio::OpenError; deviceState = QAudio::StoppedState; -- cgit v1.2.1