Details
-
Bug
-
Resolution: Done
-
P4: Low
-
4.6.2
-
None
-
Win XP
Description
I found a following code at src/multimedia/audio/qaudiooutput_win32_p.cpp:146
void QAudioOutputPrivate::freeBlocks(WAVEHDR* blockArray) { WAVEHDR* blocks = blockArray; int count = buffer_size/period_size; for(int i = 0; i < count; i++) { waveOutUnprepareHeader(hWaveOut,&blocks[i], sizeof(WAVEHDR)); blocks+=sizeof(WAVEHDR); } HeapFree(GetProcessHeap(), 0, blockArray); }
I think it can't bee good. Especially the "&blocks[i]" part.
This looks better:
... for(int i = 0; i < count; i++) { waveOutUnprepareHeader(hWaveOut,blocks, sizeof(WAVEHDR)); blocks+=sizeof(WAVEHDR); } ...
or
... for(int i = 0; i < count; i++) { if(blocks->dwFlags & WHDR_PREPARED) waveOutUnprepareHeader(hWaveOut,blocks, sizeof(WAVEHDR)); blocks+=sizeof(WAVEHDR); } ...
Like in QAudioOutputPrivate::write(...).