From 7633665c77393a53662ec622b966cd5c684995e5 Mon Sep 17 00:00:00 2001 From: Jerome Duval Date: Thu, 1 Mar 2012 00:45:12 +0100 Subject: [PATCH] multi_audio: Changes to please GCC2 * avoid template function pointers * use a default function pointer --- .../media-add-ons/multi_audio/Resampler.cpp | 101 +++++++++++++++--- .../media-add-ons/multi_audio/Resampler.h | 22 +++- 2 files changed, 107 insertions(+), 16 deletions(-) diff --git a/src/add-ons/media/media-add-ons/multi_audio/Resampler.cpp b/src/add-ons/media/media-add-ons/multi_audio/Resampler.cpp index 780ec8d240..5ff5e77fb0 100644 --- a/src/add-ons/media/media-add-ons/multi_audio/Resampler.cpp +++ b/src/add-ons/media/media-add-ons/multi_audio/Resampler.cpp @@ -20,7 +20,7 @@ Resampler::Resampler(uint32 sourceFormat, uint32 destFormat) : - fFunc(NULL) + fFunc(&Resampler::_Void) { PRINT(("Resampler() in 0x%x, out 0x%x\n", (unsigned int)sourceFormat, (unsigned int)destFormat)); @@ -29,7 +29,7 @@ Resampler::Resampler(uint32 sourceFormat, uint32 destFormat) case media_raw_audio_format::B_AUDIO_FLOAT: switch (destFormat) { case media_raw_audio_format::B_AUDIO_FLOAT: - fFunc = &Resampler::_CopyType2Type; + fFunc = &Resampler::_CopyFloat2Float; break; case media_raw_audio_format::B_AUDIO_DOUBLE: fFunc = &Resampler::_CopyFloat2Double; @@ -55,7 +55,7 @@ Resampler::Resampler(uint32 sourceFormat, uint32 destFormat) fFunc = &Resampler::_CopyDouble2Float; break; case media_raw_audio_format::B_AUDIO_DOUBLE: - fFunc = &Resampler::_CopyType2Type; + fFunc = &Resampler::_CopyDouble2Double; break; case media_raw_audio_format::B_AUDIO_INT: fFunc = &Resampler::_CopyDouble2Int; @@ -81,7 +81,7 @@ Resampler::Resampler(uint32 sourceFormat, uint32 destFormat) fFunc = &Resampler::_CopyInt2Double; break; case media_raw_audio_format::B_AUDIO_INT: - fFunc = &Resampler::_CopyType2Type; + fFunc = &Resampler::_CopyInt2Int; break; case media_raw_audio_format::B_AUDIO_SHORT: fFunc = &Resampler::_CopyInt2Short; @@ -107,7 +107,7 @@ Resampler::Resampler(uint32 sourceFormat, uint32 destFormat) fFunc = &Resampler::_CopyShort2Int; break; case media_raw_audio_format::B_AUDIO_SHORT: - fFunc = &Resampler::_CopyType2Type; + fFunc = &Resampler::_CopyShort2Short; break; case media_raw_audio_format::B_AUDIO_UCHAR: fFunc = &Resampler::_CopyShort2UChar; @@ -133,7 +133,7 @@ Resampler::Resampler(uint32 sourceFormat, uint32 destFormat) fFunc = &Resampler::_CopyUChar2Short; break; case media_raw_audio_format::B_AUDIO_UCHAR: - fFunc = &Resampler::_CopyType2Type; + fFunc = &Resampler::_CopyUChar2UChar; break; case media_raw_audio_format::B_AUDIO_CHAR: fFunc = &Resampler::_CopyUChar2Char; @@ -159,7 +159,7 @@ Resampler::Resampler(uint32 sourceFormat, uint32 destFormat) fFunc = &Resampler::_CopyChar2UChar; break; case media_raw_audio_format::B_AUDIO_CHAR: - fFunc = &Resampler::_CopyType2Type; + fFunc = &Resampler::_CopyChar2Char; break; } break; @@ -172,20 +172,20 @@ Resampler::~Resampler() } -status_t -Resampler::InitCheck() const +void +Resampler::_Void(const void *inputData, uint32 inputStride, + void *outputData, uint32 outputStride, uint32 sampleCount) { - return fFunc != NULL ? B_OK : B_ERROR; + } -template void -Resampler::_CopyType2Type(const void *inputData, uint32 inputStride, +Resampler::_CopyFloat2Float(const void *inputData, uint32 inputStride, void *outputData, uint32 outputStride, uint32 sampleCount) { while (sampleCount > 0) { - *(T*)outputData = *(const T*)inputData; + *(float*)outputData = *(const float*)inputData; outputData = (void*)((uint8*)outputData + outputStride); inputData = (void*)((uint8*)inputData + inputStride); @@ -284,6 +284,21 @@ Resampler::_CopyDouble2Float(const void *inputData, uint32 inputStride, } +void +Resampler::_CopyDouble2Double(const void *inputData, uint32 inputStride, + void *outputData, uint32 outputStride, uint32 sampleCount) +{ + while (sampleCount > 0) { + *(double*)outputData = *(const double*)inputData; + + outputData = (void*)((uint8*)outputData + outputStride); + inputData = (void*)((uint8*)inputData + inputStride); + + sampleCount--; + } +} + + void Resampler::_CopyDouble2Int(const void *inputData, uint32 inputStride, void *outputData, uint32 outputStride, uint32 sampleCount) @@ -389,6 +404,21 @@ Resampler::_CopyShort2Int(const void *inputData, uint32 inputStride, } +void +Resampler::_CopyShort2Short(const void *inputData, uint32 inputStride, + void *outputData, uint32 outputStride, uint32 sampleCount) +{ + while (sampleCount > 0) { + *(int16*)outputData = *(const int16*)inputData; + + outputData = (void*)((uint8*)outputData + outputStride); + inputData = (void*)((uint8*)inputData + inputStride); + + sampleCount--; + } +} + + void Resampler::_CopyShort2UChar(const void *inputData, uint32 inputStride, void *outputData, uint32 outputStride, uint32 sampleCount) @@ -449,6 +479,21 @@ Resampler::_CopyInt2Double(const void *inputData, uint32 inputStride, } +void +Resampler::_CopyInt2Int(const void *inputData, uint32 inputStride, + void *outputData, uint32 outputStride, uint32 sampleCount) +{ + while (sampleCount > 0) { + *(int32*)outputData = *(const int32*)inputData; + + outputData = (void*)((uint8*)outputData + outputStride); + inputData = (void*)((uint8*)inputData + inputStride); + + sampleCount--; + } +} + + void Resampler::_CopyInt2Short(const void *inputData, uint32 inputStride, void *outputData, uint32 outputStride, uint32 sampleCount) @@ -554,6 +599,21 @@ Resampler::_CopyUChar2Int(const void *inputData, uint32 inputStride, } +void +Resampler::_CopyUChar2UChar(const void *inputData, uint32 inputStride, + void *outputData, uint32 outputStride, uint32 sampleCount) +{ + while (sampleCount > 0) { + *(uint8*)outputData = *(const uint8*)inputData; + + outputData = (void*)((uint8*)outputData + outputStride); + inputData = (void*)((uint8*)inputData + inputStride); + + sampleCount--; + } +} + + void Resampler::_CopyUChar2Char(const void *inputData, uint32 inputStride, void *outputData, uint32 outputStride, uint32 sampleCount) @@ -643,3 +703,18 @@ Resampler::_CopyChar2UChar(const void *inputData, uint32 inputStride, } } + +void +Resampler::_CopyChar2Char(const void *inputData, uint32 inputStride, + void *outputData, uint32 outputStride, uint32 sampleCount) +{ + while (sampleCount > 0) { + *(int8*)outputData = *(const int8*)inputData; + + outputData = (void*)((uint8*)outputData + outputStride); + inputData = (void*)((uint8*)inputData + inputStride); + + sampleCount--; + } +} + diff --git a/src/add-ons/media/media-add-ons/multi_audio/Resampler.h b/src/add-ons/media/media-add-ons/multi_audio/Resampler.h index d392bd8832..45cf2d3b55 100644 --- a/src/add-ons/media/media-add-ons/multi_audio/Resampler.h +++ b/src/add-ons/media/media-add-ons/multi_audio/Resampler.h @@ -25,7 +25,10 @@ public: protected: //static functions for converting datas - template void _CopyType2Type(const void *inputData, + void _Void(const void *inputData, uint32 inputStride, + void *outputData, uint32 outputStride, + uint32 sampleCount); + virtual void _CopyFloat2Float(const void *inputData, uint32 inputStride, void *outputData, uint32 outputStride, uint32 sampleCount); virtual void _CopyFloat2Double(const void *inputData, @@ -47,6 +50,9 @@ protected: virtual void _CopyDouble2Float(const void *inputData, uint32 inputStride, void *outputData, uint32 outputStride, uint32 sampleCount); + virtual void _CopyDouble2Double(const void *inputData, + uint32 inputStride, void *outputData, + uint32 outputStride, uint32 sampleCount); virtual void _CopyDouble2Short(const void *inputData, uint32 inputStride, void *outputData, uint32 outputStride, uint32 sampleCount); @@ -66,6 +72,9 @@ protected: virtual void _CopyInt2Double(const void *inputData, uint32 inputStride, void *outputData, uint32 outputStride, uint32 sampleCount); + virtual void _CopyInt2Int(const void *inputData, + uint32 inputStride, void *outputData, + uint32 outputStride, uint32 sampleCount); virtual void _CopyInt2Short(const void *inputData, uint32 inputStride, void *outputData, uint32 outputStride, uint32 sampleCount); @@ -85,6 +94,9 @@ protected: virtual void _CopyShort2Int(const void *inputData, uint32 inputStride, void *outputData, uint32 outputStride, uint32 sampleCount); + virtual void _CopyShort2Short(const void *inputData, + uint32 inputStride, void *outputData, + uint32 outputStride, uint32 sampleCount); virtual void _CopyShort2UChar(const void *inputData, uint32 inputStride, void *outputData, uint32 outputStride, uint32 sampleCount); @@ -104,6 +116,9 @@ protected: virtual void _CopyUChar2Int(const void *inputData, uint32 inputStride, void *outputData, uint32 outputStride, uint32 sampleCount); + virtual void _CopyUChar2UChar(const void *inputData, + uint32 inputStride, void *outputData, + uint32 outputStride, uint32 sampleCount); virtual void _CopyUChar2Char(const void *inputData, uint32 inputStride, void *outputData, uint32 outputStride, uint32 sampleCount); @@ -123,6 +138,9 @@ protected: virtual void _CopyChar2UChar(const void *inputData, uint32 inputStride, void *outputData, uint32 outputStride, uint32 sampleCount); + virtual void _CopyChar2Char(const void *inputData, + uint32 inputStride, void *outputData, + uint32 outputStride, uint32 sampleCount); private: void (Resampler::*fFunc)(const void *inputData, @@ -135,8 +153,6 @@ inline void Resampler::Resample(const void *inputData, uint32 inputStride, void *outputData, uint32 outputStride, uint32 sampleCount) { - if (this->InitCheck() != B_OK) - return; (this->*fFunc)(inputData, inputStride, outputData, outputStride, sampleCount); }