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)
:
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<float>;
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<double>;
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<int32>;
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<int16>;
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<uint8>;
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<int8>;
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<typename T>
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--;
}
}
@@ -25,7 +25,10 @@ public:
protected:
//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 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);
}