aboutsummaryrefslogtreecommitdiffstats
path: root/libavcodec
diff options
context:
space:
mode:
authorVitor Sessak <vitor1001@gmail.com>2008-05-24 09:20:09 +0000
committerVitor Sessak <vitor1001@gmail.com>2008-05-24 09:20:09 +0000
commit2279dd9e41ea31ee80545c8eed10d79452628b39 (patch)
tree55e6cbb29b79856173925f81d1c0e43d91d011bf /libavcodec
parent08533939791a2442fa1c82622fc910e9427ff65e (diff)
downloadffmpeg-2279dd9e41ea31ee80545c8eed10d79452628b39.tar.gz
Simplify final()
Originally committed as revision 13277 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec')
-rw-r--r--libavcodec/ra144.c29
1 files changed, 12 insertions, 17 deletions
diff --git a/libavcodec/ra144.c b/libavcodec/ra144.c
index e0b43c1870..18f304d1e0 100644
--- a/libavcodec/ra144.c
+++ b/libavcodec/ra144.c
@@ -145,38 +145,33 @@ static void add_wav(int n, int f, int m1, int m2, int m3, const short *s1,
static void final(const short *i1, const short *i2,
void *out, int *statbuf, int len)
{
- int x, sum, i;
- int buffer[10];
- short *ptr;
- short *ptr2;
+ int x, i;
unsigned short int work[50];
+ short *ptr = work;
memcpy(work, statbuf,20);
memcpy(work + 10, i2, len * 2);
- for(i=0; i<10; i++)
- buffer[9-i] = i1[i];
-
- ptr2 = (ptr = work) + len;
+ for (i=0; i<len; i++) {
+ int sum = 0;
- while (ptr < ptr2) {
- for(sum=0, x=0; x<=9; x++)
- sum += buffer[x] * (ptr[x]);
+ for(x=0; x<10; x++)
+ sum += i1[9-x] * ptr[x];
- sum = sum >> 12;
- x = ptr[10] - sum;
+ sum >>= 12;
- if (x<-32768 || x>32767) {
+ if (ptr[10] - sum < -32768 || ptr[10] - sum > 32767) {
memset(out, 0, len * 2);
memset(statbuf, 0, 20);
return;
}
- ptr[10] = x;
+ ptr[10] -= sum;
ptr++;
}
- memcpy(out, ptr+10 - len, len * 2);
- memcpy(statbuf, ptr, 20);
+
+ memcpy(out, work+10, len * 2);
+ memcpy(statbuf, work + 40, 20);
}
static unsigned int rms(const int *data, int f)