multi_audio: Changes to please GCC2

* avoid template function pointers
* use a default function pointer
This commit is contained in:
Jerome Duval
2012-03-01 00:45:12 +01:00
parent e9091262c5
commit 7633665c77
2 changed files with 107 additions and 16 deletions
@@ -20,7 +20,7 @@
Resampler::Resampler(uint32 sourceFormat, uint32 destFormat) Resampler::Resampler(uint32 sourceFormat, uint32 destFormat)
: :
fFunc(NULL) fFunc(&Resampler::_Void)
{ {
PRINT(("Resampler() in 0x%x, out 0x%x\n", (unsigned int)sourceFormat, PRINT(("Resampler() in 0x%x, out 0x%x\n", (unsigned int)sourceFormat,
(unsigned int)destFormat)); (unsigned int)destFormat));
@@ -29,7 +29,7 @@ Resampler::Resampler(uint32 sourceFormat, uint32 destFormat)
case media_raw_audio_format::B_AUDIO_FLOAT: case media_raw_audio_format::B_AUDIO_FLOAT:
switch (destFormat) { switch (destFormat) {
case media_raw_audio_format::B_AUDIO_FLOAT: case media_raw_audio_format::B_AUDIO_FLOAT:
fFunc = &Resampler::_CopyType2Type<float>; fFunc = &Resampler::_CopyFloat2Float;
break; break;
case media_raw_audio_format::B_AUDIO_DOUBLE: case media_raw_audio_format::B_AUDIO_DOUBLE:
fFunc = &Resampler::_CopyFloat2Double; fFunc = &Resampler::_CopyFloat2Double;
@@ -55,7 +55,7 @@ Resampler::Resampler(uint32 sourceFormat, uint32 destFormat)
fFunc = &Resampler::_CopyDouble2Float; fFunc = &Resampler::_CopyDouble2Float;
break; break;
case media_raw_audio_format::B_AUDIO_DOUBLE: case media_raw_audio_format::B_AUDIO_DOUBLE:
fFunc = &Resampler::_CopyType2Type<double>; fFunc = &Resampler::_CopyDouble2Double;
break; break;
case media_raw_audio_format::B_AUDIO_INT: case media_raw_audio_format::B_AUDIO_INT:
fFunc = &Resampler::_CopyDouble2Int; fFunc = &Resampler::_CopyDouble2Int;
@@ -81,7 +81,7 @@ Resampler::Resampler(uint32 sourceFormat, uint32 destFormat)
fFunc = &Resampler::_CopyInt2Double; fFunc = &Resampler::_CopyInt2Double;
break; break;
case media_raw_audio_format::B_AUDIO_INT: case media_raw_audio_format::B_AUDIO_INT:
fFunc = &Resampler::_CopyType2Type<int32>; fFunc = &Resampler::_CopyInt2Int;
break; break;
case media_raw_audio_format::B_AUDIO_SHORT: case media_raw_audio_format::B_AUDIO_SHORT:
fFunc = &Resampler::_CopyInt2Short; fFunc = &Resampler::_CopyInt2Short;
@@ -107,7 +107,7 @@ Resampler::Resampler(uint32 sourceFormat, uint32 destFormat)
fFunc = &Resampler::_CopyShort2Int; fFunc = &Resampler::_CopyShort2Int;
break; break;
case media_raw_audio_format::B_AUDIO_SHORT: case media_raw_audio_format::B_AUDIO_SHORT:
fFunc = &Resampler::_CopyType2Type<int16>; fFunc = &Resampler::_CopyShort2Short;
break; break;
case media_raw_audio_format::B_AUDIO_UCHAR: case media_raw_audio_format::B_AUDIO_UCHAR:
fFunc = &Resampler::_CopyShort2UChar; fFunc = &Resampler::_CopyShort2UChar;
@@ -133,7 +133,7 @@ Resampler::Resampler(uint32 sourceFormat, uint32 destFormat)
fFunc = &Resampler::_CopyUChar2Short; fFunc = &Resampler::_CopyUChar2Short;
break; break;
case media_raw_audio_format::B_AUDIO_UCHAR: case media_raw_audio_format::B_AUDIO_UCHAR:
fFunc = &Resampler::_CopyType2Type<uint8>; fFunc = &Resampler::_CopyUChar2UChar;
break; break;
case media_raw_audio_format::B_AUDIO_CHAR: case media_raw_audio_format::B_AUDIO_CHAR:
fFunc = &Resampler::_CopyUChar2Char; fFunc = &Resampler::_CopyUChar2Char;
@@ -159,7 +159,7 @@ Resampler::Resampler(uint32 sourceFormat, uint32 destFormat)
fFunc = &Resampler::_CopyChar2UChar; fFunc = &Resampler::_CopyChar2UChar;
break; break;
case media_raw_audio_format::B_AUDIO_CHAR: case media_raw_audio_format::B_AUDIO_CHAR:
fFunc = &Resampler::_CopyType2Type<int8>; fFunc = &Resampler::_CopyChar2Char;
break; break;
} }
break; break;
@@ -172,20 +172,20 @@ Resampler::~Resampler()
} }
status_t void
Resampler::InitCheck() const Resampler::_Void(const void *inputData, uint32 inputStride,
void *outputData, uint32 outputStride, uint32 sampleCount)
{ {
return fFunc != NULL ? B_OK : B_ERROR;
} }
template<typename T>
void void
Resampler::_CopyType2Type(const void *inputData, uint32 inputStride, Resampler::_CopyFloat2Float(const void *inputData, uint32 inputStride,
void *outputData, uint32 outputStride, uint32 sampleCount) void *outputData, uint32 outputStride, uint32 sampleCount)
{ {
while (sampleCount > 0) { while (sampleCount > 0) {
*(T*)outputData = *(const T*)inputData; *(float*)outputData = *(const float*)inputData;
outputData = (void*)((uint8*)outputData + outputStride); outputData = (void*)((uint8*)outputData + outputStride);
inputData = (void*)((uint8*)inputData + inputStride); 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 void
Resampler::_CopyDouble2Int(const void *inputData, uint32 inputStride, Resampler::_CopyDouble2Int(const void *inputData, uint32 inputStride,
void *outputData, uint32 outputStride, uint32 sampleCount) 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 void
Resampler::_CopyShort2UChar(const void *inputData, uint32 inputStride, Resampler::_CopyShort2UChar(const void *inputData, uint32 inputStride,
void *outputData, uint32 outputStride, uint32 sampleCount) 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 void
Resampler::_CopyInt2Short(const void *inputData, uint32 inputStride, Resampler::_CopyInt2Short(const void *inputData, uint32 inputStride,
void *outputData, uint32 outputStride, uint32 sampleCount) 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 void
Resampler::_CopyUChar2Char(const void *inputData, uint32 inputStride, Resampler::_CopyUChar2Char(const void *inputData, uint32 inputStride,
void *outputData, uint32 outputStride, uint32 sampleCount) 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--;
}
}
@@ -25,7 +25,10 @@ public:
protected: protected:
//static functions for converting datas //static functions for converting datas
template<typename T> 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 inputStride, void *outputData,
uint32 outputStride, uint32 sampleCount); uint32 outputStride, uint32 sampleCount);
virtual void _CopyFloat2Double(const void *inputData, virtual void _CopyFloat2Double(const void *inputData,
@@ -47,6 +50,9 @@ protected:
virtual void _CopyDouble2Float(const void *inputData, virtual void _CopyDouble2Float(const void *inputData,
uint32 inputStride, void *outputData, uint32 inputStride, void *outputData,
uint32 outputStride, uint32 sampleCount); uint32 outputStride, uint32 sampleCount);
virtual void _CopyDouble2Double(const void *inputData,
uint32 inputStride, void *outputData,
uint32 outputStride, uint32 sampleCount);
virtual void _CopyDouble2Short(const void *inputData, virtual void _CopyDouble2Short(const void *inputData,
uint32 inputStride, void *outputData, uint32 inputStride, void *outputData,
uint32 outputStride, uint32 sampleCount); uint32 outputStride, uint32 sampleCount);
@@ -66,6 +72,9 @@ protected:
virtual void _CopyInt2Double(const void *inputData, virtual void _CopyInt2Double(const void *inputData,
uint32 inputStride, void *outputData, uint32 inputStride, void *outputData,
uint32 outputStride, uint32 sampleCount); uint32 outputStride, uint32 sampleCount);
virtual void _CopyInt2Int(const void *inputData,
uint32 inputStride, void *outputData,
uint32 outputStride, uint32 sampleCount);
virtual void _CopyInt2Short(const void *inputData, virtual void _CopyInt2Short(const void *inputData,
uint32 inputStride, void *outputData, uint32 inputStride, void *outputData,
uint32 outputStride, uint32 sampleCount); uint32 outputStride, uint32 sampleCount);
@@ -85,6 +94,9 @@ protected:
virtual void _CopyShort2Int(const void *inputData, virtual void _CopyShort2Int(const void *inputData,
uint32 inputStride, void *outputData, uint32 inputStride, void *outputData,
uint32 outputStride, uint32 sampleCount); uint32 outputStride, uint32 sampleCount);
virtual void _CopyShort2Short(const void *inputData,
uint32 inputStride, void *outputData,
uint32 outputStride, uint32 sampleCount);
virtual void _CopyShort2UChar(const void *inputData, virtual void _CopyShort2UChar(const void *inputData,
uint32 inputStride, void *outputData, uint32 inputStride, void *outputData,
uint32 outputStride, uint32 sampleCount); uint32 outputStride, uint32 sampleCount);
@@ -104,6 +116,9 @@ protected:
virtual void _CopyUChar2Int(const void *inputData, virtual void _CopyUChar2Int(const void *inputData,
uint32 inputStride, void *outputData, uint32 inputStride, void *outputData,
uint32 outputStride, uint32 sampleCount); uint32 outputStride, uint32 sampleCount);
virtual void _CopyUChar2UChar(const void *inputData,
uint32 inputStride, void *outputData,
uint32 outputStride, uint32 sampleCount);
virtual void _CopyUChar2Char(const void *inputData, virtual void _CopyUChar2Char(const void *inputData,
uint32 inputStride, void *outputData, uint32 inputStride, void *outputData,
uint32 outputStride, uint32 sampleCount); uint32 outputStride, uint32 sampleCount);
@@ -123,6 +138,9 @@ protected:
virtual void _CopyChar2UChar(const void *inputData, virtual void _CopyChar2UChar(const void *inputData,
uint32 inputStride, void *outputData, uint32 inputStride, void *outputData,
uint32 outputStride, uint32 sampleCount); uint32 outputStride, uint32 sampleCount);
virtual void _CopyChar2Char(const void *inputData,
uint32 inputStride, void *outputData,
uint32 outputStride, uint32 sampleCount);
private: private:
void (Resampler::*fFunc)(const void *inputData, void (Resampler::*fFunc)(const void *inputData,
@@ -135,8 +153,6 @@ inline void
Resampler::Resample(const void *inputData, uint32 inputStride, Resampler::Resample(const void *inputData, uint32 inputStride,
void *outputData, uint32 outputStride, uint32 sampleCount) void *outputData, uint32 outputStride, uint32 sampleCount)
{ {
if (this->InitCheck() != B_OK)
return;
(this->*fFunc)(inputData, inputStride, outputData, outputStride, (this->*fFunc)(inputData, inputStride, outputData, outputStride,
sampleCount); sampleCount);
} }