Remove unneeded fields from the decoder context
authorVitor Sessak <vitor1001@gmail.com>
Thu, 15 May 2008 18:34:31 +0000 (18:34 +0000)
committerVitor Sessak <vitor1001@gmail.com>
Thu, 15 May 2008 18:34:31 +0000 (18:34 +0000)
Originally committed as revision 13163 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavcodec/ra144.c

index c62eb0e..5303abe 100644 (file)
 
 /* internal globals */
 typedef struct {
-    unsigned int     resetflag, val, oldval;
-    unsigned int     gval;
-    unsigned short  *gsp;
+    unsigned int     oldval;
     unsigned int     gbuf1[8];
     unsigned short   gbuf2[120];
-    signed   short   output_buffer[40];
     unsigned int    *decptr;                /* decoder ptr */
     signed   short  *decsp;
 
     /* the swapped buffers */
-    unsigned int     swapb1a[10];
-    unsigned int     swapb2a[10];
-    unsigned int     swapb1b[10];
-    unsigned int     swapb2b[10];
+    unsigned int     swapbuffers[4][10];
     unsigned int    *swapbuf1;
     unsigned int    *swapbuf2;
     unsigned int    *swapbuf1alt;
@@ -52,17 +46,9 @@ typedef struct {
 
     unsigned int buffer[5];
     unsigned short int buffer_2[148];
-    unsigned short int buffer_a[40];
-    unsigned short int buffer_b[40];
-    unsigned short int buffer_c[40];
-    unsigned short int buffer_d[40];
 
-    unsigned short int work[50];
     unsigned short *sptr;
 
-    int buffer1[10];
-    int buffer2[10];
-
     signed short wavtable1[2304];
     unsigned short wavtable2[2304];
 } Real144_internal;
@@ -71,11 +57,10 @@ static int ra144_decode_init(AVCodecContext * avctx)
 {
     Real144_internal *glob = avctx->priv_data;
 
-    glob->resetflag   = 1;
-    glob->swapbuf1    = glob->swapb1a;
-    glob->swapbuf2    = glob->swapb2a;
-    glob->swapbuf1alt = glob->swapb1b;
-    glob->swapbuf2alt = glob->swapb2b;
+    glob->swapbuf1    = glob->swapbuffers[0];
+    glob->swapbuf2    = glob->swapbuffers[1];
+    glob->swapbuf1alt = glob->swapbuffers[2];
+    glob->swapbuf2alt = glob->swapbuffers[3];
 
     memcpy(glob->wavtable1, wavtable1, sizeof(wavtable1));
     memcpy(glob->wavtable2, wavtable2, sizeof(wavtable2));
@@ -123,40 +108,40 @@ static void do_voice(int *a1, int *a2)
 
 
 /* do quarter-block output */
-static void do_output_subblock(Real144_internal *glob, unsigned int x, GetBitContext *gb)
+static void do_output_subblock(Real144_internal *glob, unsigned short  *gsp, unsigned int gval, signed short *output_buffer, GetBitContext *gb)
 {
+    unsigned short int buffer_a[40];
+    unsigned short int buffer_b[40];
+    unsigned short int buffer_c[40];
+    unsigned short int buffer_d[40];
     int e, f, g;
     int a = get_bits(gb, 7);
     int d = get_bits(gb, 8);
     int b = get_bits(gb, 7);
     int c = get_bits(gb, 7);
 
-    if (x == 1)
-        memset(glob->buffer, 0, 20);
-
     if (a) {
         a += HALFBLOCK - 1;
-        rotate_block(glob->buffer_2, glob->buffer_a, a);
+        rotate_block(glob->buffer_2, buffer_a, a);
     }
 
-    memcpy(glob->buffer_b, etable1 + b * BLOCKSIZE, BLOCKSIZE * 2);
-    e = ((ftable1[b] >> 4) *glob->gval) >> 8;
-    memcpy(glob->buffer_c, etable2 + c * BLOCKSIZE, BLOCKSIZE * 2);
-    f=((ftable2[c] >> 4) *glob->gval) >> 8;
+    memcpy(buffer_b, etable1 + b * BLOCKSIZE, BLOCKSIZE * 2);
+    e = ((ftable1[b] >> 4) * gval) >> 8;
+    memcpy(buffer_c, etable2 + c * BLOCKSIZE, BLOCKSIZE * 2);
+    f=((ftable2[c] >> 4) * gval) >> 8;
 
     if (a)
-        g = irms(glob->buffer_a, glob->gval) >> 12;
+        g = irms(buffer_a, gval) >> 12;
     else
         g = 0;
 
-    add_wav(glob, d, a, g, e, f, glob->buffer_a, glob->buffer_b,
-            glob->buffer_c, glob->buffer_d);
+    add_wav(glob, d, a, g, e, f, buffer_a, buffer_b,
+            buffer_c, buffer_d);
 
     memmove(glob->buffer_2, glob->buffer_2 + BLOCKSIZE, (BUFFERSIZE - BLOCKSIZE) * 2);
-    memcpy(glob->buffer_2 + BUFFERSIZE - BLOCKSIZE, glob->buffer_d, BLOCKSIZE * 2);
+    memcpy(glob->buffer_2 + BUFFERSIZE - BLOCKSIZE, buffer_d, BLOCKSIZE * 2);
 
-    final(glob,glob->gsp, glob->buffer_d, glob->output_buffer, glob->buffer,
-          BLOCKSIZE);
+    final(glob, gsp, buffer_d, output_buffer, glob->buffer, BLOCKSIZE);
 }
 
 /* rotate block */
@@ -233,14 +218,15 @@ static void final(Real144_internal *glob, short *i1, short *i2, void *out,
     int buffer[10];
     short *ptr;
     short *ptr2;
+    unsigned short int work[50];
 
-    memcpy(glob->work, statbuf,20);
-    memcpy(glob->work + 10, i2, len * 2);
+    memcpy(work, statbuf,20);
+    memcpy(work + 10, i2, len * 2);
 
     for(i=0; i<10; i++)
         buffer[9-i] = i1[i];
 
-    ptr2 = (ptr = glob->work) + len;
+    ptr2 = (ptr = work) + len;
 
     while (ptr < ptr2) {
         for(sum=0, x=0; x<=9; x++)
@@ -320,11 +306,13 @@ static int eq(Real144_internal *glob, short *in, int *target)
     short *sptr;
     int *ptr1, *ptr2, *ptr3;
     int *bp1, *bp2;
+    int buffer1[10];
+    int buffer2[10];
 
     retval = 0;
-    bp1 = glob->buffer1;
-    bp2 = glob->buffer2;
-    ptr2 = (ptr3 = glob->buffer2) + 9;
+    bp1 = buffer1;
+    bp2 = buffer2;
+    ptr2 = (ptr3 = buffer2) + 9;
     sptr = in;
 
     while (ptr2 >= ptr3)
@@ -416,6 +404,8 @@ static int ra144_decode_frame(AVCodecContext * avctx,
     signed short *shptr;
     int16_t *datao;
     int16_t *data = vdata;
+    unsigned int val;
+
     Real144_internal *glob = avctx->priv_data;
     GetBitContext gb;
 
@@ -432,15 +422,15 @@ static int ra144_decode_frame(AVCodecContext * avctx,
 
     do_voice(glob->swapbuf1, glob->swapbuf2);
 
-    glob->val = decodeval[get_bits(&gb, 5) << 1]; // Useless table entries?
-    a = t_sqrt(glob->val*glob->oldval) >> 12;
+    val = decodeval[get_bits(&gb, 5) << 1]; // Useless table entries?
+    a = t_sqrt(val*glob->oldval) >> 12;
 
     for (c=0; c < NBLOCKS; c++) {
         if (c == (NBLOCKS - 1)) {
-            dec1(glob, glob->swapbuf1, glob->swapbuf2, 3, glob->val);
+            dec1(glob, glob->swapbuf1, glob->swapbuf2, 3, val);
         } else {
             if (c * 2 == (NBLOCKS - 2)) {
-                if (glob->oldval < glob->val) {
+                if (glob->oldval < val) {
                     dec2(glob, glob->swapbuf1, glob->swapbuf2, 3, a, glob->swapbuf2alt, c);
                 } else {
                     dec2(glob, glob->swapbuf1alt, glob->swapbuf2alt, 3, a, glob->swapbuf2, c);
@@ -449,7 +439,7 @@ static int ra144_decode_frame(AVCodecContext * avctx,
                 if (c * 2 < (NBLOCKS - 2)) {
                     dec2(glob, glob->swapbuf1alt, glob->swapbuf2alt, 3, glob->oldval, glob->swapbuf2, c);
                 } else {
-                    dec2(glob, glob->swapbuf1, glob->swapbuf2, 3, glob->val, glob->swapbuf2alt, c);
+                    dec2(glob, glob->swapbuf1, glob->swapbuf2, 3, val, glob->swapbuf2alt, c);
                 }
             }
         }
@@ -457,18 +447,19 @@ static int ra144_decode_frame(AVCodecContext * avctx,
 
     /* do output */
     for (b=0, c=0; c<4; c++) {
-        glob->gval = glob->gbuf1[c * 2];
-        glob->gsp = glob->gbuf2 + b;
-        do_output_subblock(glob, glob->resetflag, &gb);
-        glob->resetflag = 0;
+        unsigned int gval = glob->gbuf1[c * 2];
+        unsigned short *gsp = glob->gbuf2 + b;
+        signed short output_buffer[40];
+
+        do_output_subblock(glob, gsp, gval, output_buffer, &gb);
 
-        shptr = glob->output_buffer;
-        while (shptr < glob->output_buffer + BLOCKSIZE)
+        shptr = output_buffer;
+        while (shptr < output_buffer + BLOCKSIZE)
             *data++ = av_clip_int16(*(shptr++) << 2);
         b += 30;
     }
 
-    glob->oldval = glob->val;
+    glob->oldval = val;
 
     FFSWAP(unsigned int *, glob->swapbuf1alt, glob->swapbuf1);
     FFSWAP(unsigned int *, glob->swapbuf2alt, glob->swapbuf2);