Update ARM version of rate filler code in line with LordHoto's change

in revision 47014.

svn-id: r47051
This commit is contained in:
Robin Watts 2010-01-05 21:56:13 +00:00
parent d183420c86
commit 61c413e114
2 changed files with 69 additions and 41 deletions

View file

@ -137,7 +137,8 @@ extern "C" {
#endif
}
extern "C" void ARM_SimpleRate_M(AudioStream &input,
extern "C" st_sample_t *ARM_SimpleRate_M(
AudioStream &input,
int (*fn)(Audio::AudioStream&,int16*,int),
SimpleRateDetails *sr,
st_sample_t *obuf,
@ -145,7 +146,8 @@ extern "C" void ARM_SimpleRate_M(AudioStream &input,
st_volume_t vol_l,
st_volume_t vol_r);
extern "C" void ARM_SimpleRate_S(AudioStream &input,
extern "C" st_sample_t *ARM_SimpleRate_S(
AudioStream &input,
int (*fn)(Audio::AudioStream&,int16*,int),
SimpleRateDetails *sr,
st_sample_t *obuf,
@ -153,7 +155,8 @@ extern "C" void ARM_SimpleRate_S(AudioStream &input,
st_volume_t vol_l,
st_volume_t vol_r);
extern "C" void ARM_SimpleRate_R(AudioStream &input,
extern "C" st_sample_t *ARM_SimpleRate_R(
AudioStream &input,
int (*fn)(Audio::AudioStream&,int16*,int),
SimpleRateDetails *sr,
st_sample_t *obuf,
@ -178,23 +181,25 @@ int SimpleRateConverter<stereo, reverseStereo>::flow(AudioStream &input, st_samp
fprintf(stderr, "Simple st=%d rev=%d\n", stereo, reverseStereo);
fflush(stderr);
#endif
st_sample_t *ostart = obuf;
if (!stereo) {
ARM_SimpleRate_M(input,
&SimpleRate_readFudge,
&sr,
obuf, osamp, vol_l, vol_r);
obuf = ARM_SimpleRate_M(input,
&SimpleRate_readFudge,
&sr,
obuf, osamp, vol_l, vol_r);
} else if (reverseStereo) {
ARM_SimpleRate_R(input,
&SimpleRate_readFudge,
&sr,
obuf, osamp, vol_l, vol_r);
obuf = ARM_SimpleRate_R(input,
&SimpleRate_readFudge,
&sr,
obuf, osamp, vol_l, vol_r);
} else {
ARM_SimpleRate_S(input,
&SimpleRate_readFudge,
&sr,
obuf, osamp, vol_l, vol_r);
obuf = ARM_SimpleRate_S(input,
&SimpleRate_readFudge,
&sr,
obuf, osamp, vol_l, vol_r);
}
return (ST_SUCCESS);
return (obuf-ostart)/2;
}
/**
@ -236,7 +241,8 @@ extern "C" {
#endif
}
extern "C" void ARM_LinearRate_M(AudioStream &input,
extern "C" st_sample_t *ARM_LinearRate_M(
AudioStream &input,
int (*fn)(Audio::AudioStream&,int16*,int),
LinearRateDetails *lr,
st_sample_t *obuf,
@ -244,7 +250,8 @@ extern "C" void ARM_LinearRate_M(AudioStream &input,
st_volume_t vol_l,
st_volume_t vol_r);
extern "C" void ARM_LinearRate_S(AudioStream &input,
extern "C" st_sample_t *ARM_LinearRate_S(
AudioStream &input,
int (*fn)(Audio::AudioStream&,int16*,int),
LinearRateDetails *lr,
st_sample_t *obuf,
@ -252,7 +259,8 @@ extern "C" void ARM_LinearRate_S(AudioStream &input,
st_volume_t vol_l,
st_volume_t vol_r);
extern "C" void ARM_LinearRate_R(AudioStream &input,
extern "C" st_sample_t *ARM_LinearRate_R(
AudioStream &input,
int (*fn)(Audio::AudioStream&,int16*,int),
LinearRateDetails *lr,
st_sample_t *obuf,
@ -304,7 +312,7 @@ LinearRateConverter<stereo, reverseStereo>::LinearRateConverter(st_rate_t inrate
/*
* Processed signed long samples from ibuf to obuf.
* Return number of samples processed.
* Return number of sample pairs processed.
*/
template<bool stereo, bool reverseStereo>
int LinearRateConverter<stereo, reverseStereo>::flow(AudioStream &input, st_sample_t *obuf, st_size_t osamp, st_volume_t vol_l, st_volume_t vol_r) {
@ -313,23 +321,25 @@ int LinearRateConverter<stereo, reverseStereo>::flow(AudioStream &input, st_samp
fprintf(stderr, "Linear st=%d rev=%d\n", stereo, reverseStereo);
fflush(stderr);
#endif
st_sample_t *ostart = obuf;
if (!stereo) {
ARM_LinearRate_M(input,
&SimpleRate_readFudge,
&lr,
obuf, osamp, vol_l, vol_r);
obuf = ARM_LinearRate_M(input,
&SimpleRate_readFudge,
&lr,
obuf, osamp, vol_l, vol_r);
} else if (reverseStereo) {
ARM_LinearRate_R(input,
&SimpleRate_readFudge,
&lr,
obuf, osamp, vol_l, vol_r);
obuf = ARM_LinearRate_R(input,
&SimpleRate_readFudge,
&lr,
obuf, osamp, vol_l, vol_r);
} else {
ARM_LinearRate_S(input,
&SimpleRate_readFudge,
&lr,
obuf, osamp, vol_l, vol_r);
obuf = ARM_LinearRate_S(input,
&SimpleRate_readFudge,
&lr,
obuf, osamp, vol_l, vol_r);
}
return (ST_SUCCESS);
return (obuf-ostart)/2;
}
@ -347,19 +357,22 @@ extern "C" {
#endif
}
extern "C" void ARM_CopyRate_M(st_size_t len,
extern "C" st_sample_t *ARM_CopyRate_M(
st_size_t len,
st_sample_t *obuf,
st_volume_t vol_l,
st_volume_t vol_r,
st_sample_t *_buffer);
extern "C" void ARM_CopyRate_S(st_size_t len,
extern "C" st_sample_t *ARM_CopyRate_S(
st_size_t len,
st_sample_t *obuf,
st_volume_t vol_l,
st_volume_t vol_r,
st_sample_t *_buffer);
extern "C" void ARM_CopyRate_R(st_size_t len,
extern "C" st_sample_t *ARM_CopyRate_R(
st_size_t len,
st_sample_t *obuf,
st_volume_t vol_l,
st_volume_t vol_r,
@ -384,6 +397,7 @@ fprintf(stderr, "Copy st=%d rev=%d\n", stereo, reverseStereo);
fflush(stderr);
#endif
st_size_t len;
st_sample_t *ostart = obuf;
if (stereo)
osamp *= 2;
@ -398,17 +412,17 @@ fflush(stderr);
// Read up to 'osamp' samples into our temporary buffer
len = input.readBuffer(_buffer, osamp);
if (len <= 0)
return (ST_SUCCESS);
return 0;
// Mix the data into the output buffer
if (stereo && reverseStereo)
ARM_CopyRate_R(len, obuf, vol_l, vol_r, _buffer);
obuf = ARM_CopyRate_R(len, obuf, vol_l, vol_r, _buffer);
else if (stereo)
ARM_CopyRate_S(len, obuf, vol_l, vol_r, _buffer);
obuf = ARM_CopyRate_S(len, obuf, vol_l, vol_r, _buffer);
else
ARM_CopyRate_M(len, obuf, vol_l, vol_r, _buffer);
obuf = ARM_CopyRate_M(len, obuf, vol_l, vol_r, _buffer);
return (ST_SUCCESS);
return (obuf-ostart)/2;
}
virtual int drain(st_sample_t *obuf, st_size_t osamp, st_volume_t vol) {
return (ST_SUCCESS);

View file

@ -72,6 +72,8 @@ CopyRate_M_loop:
SUBS r0,r0,#1 @ len--
BGT CopyRate_M_loop @ and loop
MOV r0, r1 @ return obuf
LDMFD r13!,{r4-r7,PC}
_ARM_CopyRate_S:
@ -108,6 +110,8 @@ CopyRate_S_loop:
SUBS r0,r0,#2 @ len -= 2
BGT CopyRate_S_loop @ and loop
MOV r0, r1 @ return obuf
LDMFD r13!,{r4-r7,PC}
_ARM_CopyRate_R:
@ -144,6 +148,8 @@ CopyRate_R_loop:
SUBS r0,r0,#2 @ len -= 2
BGT CopyRate_R_loop @ and loop
MOV r0, r1 @ return obuf
LDMFD r13!,{r4-r7,PC}
_ARM_SimpleRate_M:
@ -199,6 +205,9 @@ SimpleRate_M_end:
LDR r14,[r13,#8] @ r14 = sr
ADD r13,r13,#12 @ Skip over r0-r2 on stack
STMIA r14,{r0,r1,r2} @ Store back updated values
MOV r0, r3 @ return obuf
LDMFD r13!,{r4-r8,r10-r11,PC}
SimpleRate_M_read:
LDR r0, [r13,#8] @ r0 = sr (8 = 4*2)
@ -283,6 +292,7 @@ SimpleRate_S_end:
LDR r14,[r13,#8] @ r14 = sr
ADD r13,r13,#12 @ skip over r0-r2 on stack
STMIA r14,{r0,r1,r2} @ store back updated values
MOV r0, r3 @ return obuf
LDMFD r13!,{r4-r8,r10-r11,PC}
SimpleRate_S_read:
LDR r0, [r13,#8] @ r0 = sr (8 = 4*2)
@ -367,6 +377,7 @@ SimpleRate_R_end:
LDR r14,[r13,#8] @ r14 = sr
ADD r13,r13,#12 @ Skip over r0-r2 on stack
STMIA r14,{r0,r1,r2} @ Store back updated values
MOV r0, r3 @ return obuf
LDMFD r13!,{r4-r8,r10-r11,PC}
SimpleRate_R_read:
LDR r0, [r13,#8] @ r0 = sr (8 = 4*2)
@ -469,6 +480,7 @@ LinearRate_M_part2:
LinearRate_M_end:
ADD r13,r13,#8
STMIA r2,{r0,r1,r8}
MOV r0, r3 @ return obuf
LDMFD r13!,{r4-r11,PC}
LinearRate_M_read:
ADD r0, r2, #28 @ r0 = inPtr = inBuf
@ -576,6 +588,7 @@ LinearRate_S_part2:
LinearRate_S_end:
ADD r13,r13,#8
STMIA r2,{r0,r1,r8}
MOV r0, r3 @ return obuf
LDMFD r13!,{r4-r11,PC}
LinearRate_S_read:
ADD r0, r2, #28 @ r0 = inPtr = inBuf
@ -680,6 +693,7 @@ LinearRate_R_part2:
LinearRate_R_end:
ADD r13,r13,#8
STMIA r2,{r0,r1,r8}
MOV r0, r3 @ return obuf
LDMFD r13!,{r4-r11,PC}
LinearRate_R_read:
ADD r0, r2, #28 @ r0 = inPtr = inBuf