summaryrefslogtreecommitdiffstats
path: root/src/multimedia/audio
diff options
context:
space:
mode:
Diffstat (limited to 'src/multimedia/audio')
-rw-r--r--src/multimedia/audio/qaudiooutput_win32_p.cpp25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/multimedia/audio/qaudiooutput_win32_p.cpp b/src/multimedia/audio/qaudiooutput_win32_p.cpp
index 7592643f4..a189ddd0f 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 <QtEndian>
#ifndef SPEAKER_FRONT_LEFT
#define SPEAKER_FRONT_LEFT 0x00000001
@@ -466,6 +467,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];