multi_audio: Changes to please GCC2
* avoid template function pointers * use a default function pointer
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user