changeset 6806:e4be053e7d9b libavcodec

Remove unneeded fields from the decoder context
author vitor
date Thu, 15 May 2008 18:34:31 +0000
parents 8faad14a40a5
children c19ef48adf18
files ra144.c
diffstat 1 files changed, 45 insertions(+), 54 deletions(-) [+]
line wrap: on
line diff
--- a/ra144.c	Thu May 15 18:31:55 2008 +0000
+++ b/ra144.c	Thu May 15 18:34:31 2008 +0000
@@ -31,20 +31,14 @@
 
 /* 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 @@
 
     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 @@
 {
     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 @@
 
 
 /* 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 @@
     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 @@
     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 @@
     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 @@
 
     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 @@
                 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 @@
 
     /* 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];
 
-        shptr = glob->output_buffer;
-        while (shptr < glob->output_buffer + BLOCKSIZE)
+        do_output_subblock(glob, gsp, gval, output_buffer, &gb);
+
+        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);