summaryrefslogtreecommitdiffstats
path: root/src/multimedia/audio/qaudiohelpers.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/multimedia/audio/qaudiohelpers.cpp')
-rw-r--r--src/multimedia/audio/qaudiohelpers.cpp95
1 files changed, 15 insertions, 80 deletions
diff --git a/src/multimedia/audio/qaudiohelpers.cpp b/src/multimedia/audio/qaudiohelpers.cpp
index ac5e308aa..4d8e983cf 100644
--- a/src/multimedia/audio/qaudiohelpers.cpp
+++ b/src/multimedia/audio/qaudiohelpers.cpp
@@ -43,49 +43,6 @@
QT_BEGIN_NAMESPACE
-// Base implementation of 24 bits number.
-// Used to adjust 3 bytes values by a factor.
-// TODO: Uses little-endian only.
-class Int24
-{
-public:
- quint8 data[3];
- Int24(qint32 v) {
- data[0] = v & 0xFF;
- data[1] = (v & 0xFF00) >> 8;
- data[2] = (v & 0xFF0000) >> 16;
- }
- template<class T>
- [[nodiscard]] T multiply(qreal factor, T v = 0) const {
- v |= data[0];
- v |= data[1] << 8;
- v |= data[2] << 16;
- v *= factor;
- return v;
- }
-};
-
-class qint24: public Int24
-{
-public:
- qint24(qint32 v): Int24(v) {}
- qint24 operator*(qreal factor) const {
- // Checks if it is a signed value.
- qint32 v = (data[2] & 0x80) ? 0xFF000000 : 0;
- return multiply(factor, v);
- }
-};
-
-class quint24: public Int24
-{
-public:
- quint24(quint32 v): Int24(v) {}
- quint24 operator*(qreal factor) const {
- return multiply<quint32>(factor);
- }
-};
-
-
namespace QAudioHelperInternal
{
@@ -106,18 +63,6 @@ template<> struct signedVersion<quint8>
enum {offset = 0x80};
};
-template<> struct signedVersion<quint16>
-{
- using TS = qint16;
- enum {offset = 0x8000};
-};
-
-template<> struct signedVersion<quint32>
-{
- using TS = qint32;
- enum {offset = 0x80000000};
-};
-
template<class T> void adjustUnsignedSamples(qreal factor, const void *src, void *dst, int samples)
{
const T *pSrc = (const T *)src;
@@ -129,34 +74,24 @@ template<class T> void adjustUnsignedSamples(qreal factor, const void *src, void
void qMultiplySamples(qreal factor, const QAudioFormat &format, const void* src, void* dest, int len)
{
- int samplesCount = len / (format.sampleSize()/8);
-
- switch ( format.sampleSize() ) {
- case 8:
- if (format.sampleType() == QAudioFormat::SignedInt)
- QAudioHelperInternal::adjustSamples<qint8>(factor,src,dest,samplesCount);
- else if (format.sampleType() == QAudioFormat::UnSignedInt)
- QAudioHelperInternal::adjustUnsignedSamples<quint8>(factor,src,dest,samplesCount);
+ int samplesCount = len / (format.bytesPerSample());
+
+ switch (format.sampleFormat()) {
+ case QAudioFormat::Unknown:
+ case QAudioFormat::NSampleFormats:
+ return;
+ case QAudioFormat::UInt8:
+ QAudioHelperInternal::adjustUnsignedSamples<quint8>(factor,src,dest,samplesCount);
+ break;
+ case QAudioFormat::Int16:
+ QAudioHelperInternal::adjustSamples<qint16>(factor,src,dest,samplesCount);
break;
- case 16:
- if (format.sampleType() == QAudioFormat::SignedInt)
- QAudioHelperInternal::adjustSamples<qint16>(factor,src,dest,samplesCount);
- else if (format.sampleType() == QAudioFormat::UnSignedInt)
- QAudioHelperInternal::adjustUnsignedSamples<quint16>(factor,src,dest,samplesCount);
+ case QAudioFormat::Int32:
+ QAudioHelperInternal::adjustSamples<qint32>(factor,src,dest,samplesCount);
break;
- case 24:
- if (format.sampleType() == QAudioFormat::SignedInt)
- QAudioHelperInternal::adjustSamples<qint24>(factor,src,dest,samplesCount);
- else if (format.sampleType() == QAudioFormat::UnSignedInt)
- QAudioHelperInternal::adjustSamples<quint24>(factor,src,dest,samplesCount);
+ case QAudioFormat::Float:
+ QAudioHelperInternal::adjustSamples<float>(factor,src,dest,samplesCount);
break;
- default:
- if (format.sampleType() == QAudioFormat::SignedInt)
- QAudioHelperInternal::adjustSamples<qint32>(factor,src,dest,samplesCount);
- else if (format.sampleType() == QAudioFormat::UnSignedInt)
- QAudioHelperInternal::adjustUnsignedSamples<quint32>(factor,src,dest,samplesCount);
- else if (format.sampleType() == QAudioFormat::Float)
- QAudioHelperInternal::adjustSamples<float>(factor,src,dest,samplesCount);
}
}
}