Update ARM version of rate filler code in line with LordHoto's change
in revision 47014. svn-id: r47051
This commit is contained in:
parent
d183420c86
commit
61c413e114
2 changed files with 69 additions and 41 deletions
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue