diff options
Diffstat (limited to 'src/multimedia/audio/qaudiohelpers.cpp')
-rw-r--r-- | src/multimedia/audio/qaudiohelpers.cpp | 95 |
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); } } } |