From a333545518832c606110025ac6e06f6366807db2 Mon Sep 17 00:00:00 2001 From: Lev Zelenskiy Date: Fri, 29 Jun 2012 15:52:39 +1000 Subject: Added support for big endian data to QAudioOutput win32 backend. Convert data from big endian to little endian. QTBUG-19881 Change-Id: Id98c2158ed056dd89fe2656e8f262d4b37f94eb7 Reviewed-by: Michael Goddard --- src/multimedia/audio/qaudiooutput_win32_p.cpp | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/multimedia/audio/qaudiooutput_win32_p.cpp b/src/multimedia/audio/qaudiooutput_win32_p.cpp index 35851a9..e3d1f2f 100644 --- a/src/multimedia/audio/qaudiooutput_win32_p.cpp +++ b/src/multimedia/audio/qaudiooutput_win32_p.cpp @@ -51,6 +51,7 @@ // #include "qaudiooutput_win32_p.h" +#include #ifndef SPEAKER_FRONT_LEFT #define SPEAKER_FRONT_LEFT 0x00000001 @@ -455,6 +456,30 @@ qint64 QAudioOutputPrivate::write( const char *data, qint64 len ) char* p = (char*)data; int l = (int)len; + QByteArray reverse; + if (settings.byteOrder() == QAudioFormat::BigEndian) { + + switch (settings.sampleSize()) { + case 8: + // No need to convert + break; + + case 16: + reverse.resize(l); + for (qint64 i = 0; i < (l >> 1); i++) + *((qint16*)reverse.data() + i) = qFromBigEndian(*((qint16*)data + i)); + p = reverse.data(); + break; + + case 32: + reverse.resize(l); + for (qint64 i = 0; i < (l >> 2); i++) + *((qint32*)reverse.data() + i) = qFromBigEndian(*((qint32*)data + i)); + p = reverse.data(); + break; + } + } + WAVEHDR* current; int remain; current = &waveBlocks[waveCurrentBlock]; -- cgit v0.12