Fix a compile error on MSVC.
- Declare all variables at the start of scope. - Remove the needless local variables from these functions. Review URL: http://webrtc-codereview.appspot.com/97009 git-svn-id: http://webrtc.googlecode.com/svn/trunk@330 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
parent
2cf5122efb
commit
4a4d7c6693
@ -25,50 +25,42 @@ static const WebRtc_UWord16 kResampleAllpass2[3] = {12199, 37471, 60255};
|
||||
void WebRtcSpl_DownsampleBy2(const WebRtc_Word16* in, const WebRtc_Word16 len,
|
||||
WebRtc_Word16* out, WebRtc_Word32* filtState)
|
||||
{
|
||||
const WebRtc_Word16 *inptr;
|
||||
WebRtc_Word16 *outptr;
|
||||
WebRtc_Word32 *state;
|
||||
WebRtc_Word32 tmp1, tmp2, diff, in32, out32;
|
||||
WebRtc_Word16 i;
|
||||
|
||||
// local versions of pointers to input and output arrays
|
||||
inptr = in; // input array
|
||||
outptr = out; // output array (of length len/2)
|
||||
state = filtState; // filter state array; length = 8
|
||||
|
||||
register WebRtc_Word32 state0 = state[0];
|
||||
register WebRtc_Word32 state1 = state[1];
|
||||
register WebRtc_Word32 state2 = state[2];
|
||||
register WebRtc_Word32 state3 = state[3];
|
||||
register WebRtc_Word32 state4 = state[4];
|
||||
register WebRtc_Word32 state5 = state[5];
|
||||
register WebRtc_Word32 state6 = state[6];
|
||||
register WebRtc_Word32 state7 = state[7];
|
||||
register WebRtc_Word32 state0 = filtState[0];
|
||||
register WebRtc_Word32 state1 = filtState[1];
|
||||
register WebRtc_Word32 state2 = filtState[2];
|
||||
register WebRtc_Word32 state3 = filtState[3];
|
||||
register WebRtc_Word32 state4 = filtState[4];
|
||||
register WebRtc_Word32 state5 = filtState[5];
|
||||
register WebRtc_Word32 state6 = filtState[6];
|
||||
register WebRtc_Word32 state7 = filtState[7];
|
||||
|
||||
for (i = (len >> 1); i > 0; i--)
|
||||
{
|
||||
// lower allpass filter
|
||||
in32 = (WebRtc_Word32)(*inptr++) << 10;
|
||||
in32 = (WebRtc_Word32)(*in++) << 10;
|
||||
diff = in32 - state1;
|
||||
tmp1 = WEBRTC_SPL_SCALEDIFF32( kResampleAllpass2[0], diff, state0 );
|
||||
tmp1 = WEBRTC_SPL_SCALEDIFF32(kResampleAllpass2[0], diff, state0);
|
||||
state0 = in32;
|
||||
diff = tmp1 - state2;
|
||||
tmp2 = WEBRTC_SPL_SCALEDIFF32( kResampleAllpass2[1], diff, state1 );
|
||||
tmp2 = WEBRTC_SPL_SCALEDIFF32(kResampleAllpass2[1], diff, state1);
|
||||
state1 = tmp1;
|
||||
diff = tmp2 - state3;
|
||||
state3 = WEBRTC_SPL_SCALEDIFF32( kResampleAllpass2[2], diff, state2 );
|
||||
state3 = WEBRTC_SPL_SCALEDIFF32(kResampleAllpass2[2], diff, state2);
|
||||
state2 = tmp2;
|
||||
|
||||
// upper allpass filter
|
||||
in32 = (WebRtc_Word32)(*inptr++) << 10;
|
||||
in32 = (WebRtc_Word32)(*in++) << 10;
|
||||
diff = in32 - state5;
|
||||
tmp1 = WEBRTC_SPL_SCALEDIFF32( kResampleAllpass1[0], diff, state4 );
|
||||
tmp1 = WEBRTC_SPL_SCALEDIFF32(kResampleAllpass1[0], diff, state4);
|
||||
state4 = in32;
|
||||
diff = tmp1 - state6;
|
||||
tmp2 = WEBRTC_SPL_SCALEDIFF32( kResampleAllpass1[1], diff, state5 );
|
||||
tmp2 = WEBRTC_SPL_SCALEDIFF32(kResampleAllpass1[1], diff, state5);
|
||||
state5 = tmp1;
|
||||
diff = tmp2 - state7;
|
||||
state7 = WEBRTC_SPL_SCALEDIFF32( kResampleAllpass1[2], diff, state6 );
|
||||
state7 = WEBRTC_SPL_SCALEDIFF32(kResampleAllpass1[2], diff, state6);
|
||||
state6 = tmp2;
|
||||
|
||||
// add two allpass outputs, divide by two and round
|
||||
@ -76,111 +68,103 @@ void WebRtcSpl_DownsampleBy2(const WebRtc_Word16* in, const WebRtc_Word16 len,
|
||||
|
||||
// limit amplitude to prevent wrap-around, and write to output array
|
||||
#ifdef WEBRTC_ARCH_ARM_V7A
|
||||
__asm__("ssat %r0, #16, %r1" : "=r"(*outptr) : "r"(out32));
|
||||
outptr++;
|
||||
__asm__("ssat %r0, #16, %r1" : "=r"(*out) : "r"(out32));
|
||||
out++;
|
||||
#else
|
||||
if (out32 > 32767)
|
||||
*outptr++ = 32767;
|
||||
*out++ = 32767;
|
||||
else if (out32 < -32768)
|
||||
*outptr++ = -32768;
|
||||
*out++ = -32768;
|
||||
else
|
||||
*outptr++ = (WebRtc_Word16)out32;
|
||||
*out++ = (WebRtc_Word16)out32;
|
||||
#endif
|
||||
}
|
||||
|
||||
state[0]=state0;
|
||||
state[1]=state1;
|
||||
state[2]=state2;
|
||||
state[3]=state3;
|
||||
state[4]=state4;
|
||||
state[5]=state5;
|
||||
state[6]=state6;
|
||||
state[7]=state7;
|
||||
filtState[0] = state0;
|
||||
filtState[1] = state1;
|
||||
filtState[2] = state2;
|
||||
filtState[3] = state3;
|
||||
filtState[4] = state4;
|
||||
filtState[5] = state5;
|
||||
filtState[6] = state6;
|
||||
filtState[7] = state7;
|
||||
}
|
||||
|
||||
void WebRtcSpl_UpsampleBy2(const WebRtc_Word16* in, WebRtc_Word16 len, WebRtc_Word16* out,
|
||||
WebRtc_Word32* filtState)
|
||||
{
|
||||
const WebRtc_Word16 *inptr;
|
||||
WebRtc_Word16 *outptr;
|
||||
WebRtc_Word32 *state;
|
||||
WebRtc_Word32 tmp1, tmp2, diff, in32, out32;
|
||||
WebRtc_Word16 i;
|
||||
|
||||
// local versions of pointers to input and output arrays
|
||||
inptr = in; // input array
|
||||
outptr = out; // output array (of length len*2)
|
||||
state = filtState; // filter state array; length = 8
|
||||
|
||||
register WebRtc_Word32 state0 = state[0];
|
||||
register WebRtc_Word32 state1 = state[1];
|
||||
register WebRtc_Word32 state2 = state[2];
|
||||
register WebRtc_Word32 state3 = state[3];
|
||||
register WebRtc_Word32 state4 = state[4];
|
||||
register WebRtc_Word32 state5 = state[5];
|
||||
register WebRtc_Word32 state6 = state[6];
|
||||
register WebRtc_Word32 state7 = state[7];
|
||||
register WebRtc_Word32 state0 = filtState[0];
|
||||
register WebRtc_Word32 state1 = filtState[1];
|
||||
register WebRtc_Word32 state2 = filtState[2];
|
||||
register WebRtc_Word32 state3 = filtState[3];
|
||||
register WebRtc_Word32 state4 = filtState[4];
|
||||
register WebRtc_Word32 state5 = filtState[5];
|
||||
register WebRtc_Word32 state6 = filtState[6];
|
||||
register WebRtc_Word32 state7 = filtState[7];
|
||||
|
||||
for (i = len; i > 0; i--)
|
||||
{
|
||||
// lower allpass filter
|
||||
in32 = (WebRtc_Word32)(*inptr++) << 10;
|
||||
in32 = (WebRtc_Word32)(*in++) << 10;
|
||||
diff = in32 - state1;
|
||||
tmp1 = WEBRTC_SPL_SCALEDIFF32( kResampleAllpass1[0], diff, state0 );
|
||||
tmp1 = WEBRTC_SPL_SCALEDIFF32(kResampleAllpass1[0], diff, state0);
|
||||
state0 = in32;
|
||||
diff = tmp1 - state2;
|
||||
tmp2 = WEBRTC_SPL_SCALEDIFF32( kResampleAllpass1[1], diff, state1 );
|
||||
tmp2 = WEBRTC_SPL_SCALEDIFF32(kResampleAllpass1[1], diff, state1);
|
||||
state1 = tmp1;
|
||||
diff = tmp2 - state3;
|
||||
state3 = WEBRTC_SPL_SCALEDIFF32( kResampleAllpass1[2], diff, state2 );
|
||||
state3 = WEBRTC_SPL_SCALEDIFF32(kResampleAllpass1[2], diff, state2);
|
||||
state2 = tmp2;
|
||||
|
||||
// round; limit amplitude to prevent wrap-around; write to output array
|
||||
out32 = (state3 + 512) >> 10;
|
||||
#ifdef WEBRTC_ARCH_ARM_V7A
|
||||
__asm__("ssat %r0, #16, %r1":"=r"(*outptr): "r"(out32));
|
||||
outptr++;
|
||||
__asm__("ssat %r0, #16, %r1":"=r"(*out): "r"(out32));
|
||||
out++;
|
||||
#else
|
||||
if (out32 > 32767)
|
||||
*outptr++ = 32767;
|
||||
*out++ = 32767;
|
||||
else if (out32 < -32768)
|
||||
*outptr++ = -32768;
|
||||
*out++ = -32768;
|
||||
else
|
||||
*outptr++ = (WebRtc_Word16)out32;
|
||||
*out++ = (WebRtc_Word16)out32;
|
||||
#endif
|
||||
|
||||
// upper allpass filter
|
||||
diff = in32 - state5;
|
||||
tmp1 = WEBRTC_SPL_SCALEDIFF32( kResampleAllpass2[0], diff, state4 );
|
||||
tmp1 = WEBRTC_SPL_SCALEDIFF32(kResampleAllpass2[0], diff, state4);
|
||||
state4 = in32;
|
||||
diff = tmp1 - state6;
|
||||
tmp2 = WEBRTC_SPL_SCALEDIFF32( kResampleAllpass2[1], diff, state5 );
|
||||
tmp2 = WEBRTC_SPL_SCALEDIFF32(kResampleAllpass2[1], diff, state5);
|
||||
state5 = tmp1;
|
||||
diff = tmp2 - state7;
|
||||
state7 = WEBRTC_SPL_SCALEDIFF32( kResampleAllpass2[2], diff, state6 );
|
||||
state7 = WEBRTC_SPL_SCALEDIFF32(kResampleAllpass2[2], diff, state6);
|
||||
state6 = tmp2;
|
||||
|
||||
// round; limit amplitude to prevent wrap-around; write to output array
|
||||
out32 = (state7 + 512) >> 10;
|
||||
#ifdef WEBRTC_ARCH_ARM_V7A
|
||||
__asm__("ssat %r0, #16, %r1":"=r"(*outptr): "r"(out32));
|
||||
outptr++;
|
||||
__asm__("ssat %r0, #16, %r1":"=r"(*out): "r"(out32));
|
||||
out++;
|
||||
#else
|
||||
if (out32 > 32767)
|
||||
*outptr++ = 32767;
|
||||
*out++ = 32767;
|
||||
else if (out32 < -32768)
|
||||
*outptr++ = -32768;
|
||||
*out++ = -32768;
|
||||
else
|
||||
*outptr++ = (WebRtc_Word16)out32;
|
||||
*out++ = (WebRtc_Word16)out32;
|
||||
#endif
|
||||
}
|
||||
state[0]=state0;
|
||||
state[1]=state1;
|
||||
state[2]=state2;
|
||||
state[3]=state3;
|
||||
state[4]=state4;
|
||||
state[5]=state5;
|
||||
state[6]=state6;
|
||||
state[7]=state7;
|
||||
|
||||
|
||||
filtState[0] = state0;
|
||||
filtState[1] = state1;
|
||||
filtState[2] = state2;
|
||||
filtState[3] = state3;
|
||||
filtState[4] = state4;
|
||||
filtState[5] = state5;
|
||||
filtState[6] = state6;
|
||||
filtState[7] = state7;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user