[Ffmpeg-cvslog] r6060 - trunk/libavcodec/mpegaudiodec.c

michael subversion
Thu Aug 24 03:01:39 CEST 2006


Author: michael
Date: Thu Aug 24 03:01:39 2006
New Revision: 6060

Modified:
   trunk/libavcodec/mpegaudiodec.c

Log:
optimizing high freq decode


Modified: trunk/libavcodec/mpegaudiodec.c
==============================================================================
--- trunk/libavcodec/mpegaudiodec.c	(original)
+++ trunk/libavcodec/mpegaudiodec.c	Thu Aug 24 03:01:39 2006
@@ -1741,22 +1741,22 @@
         }
         last_gb= s->gb;
 
-        code = get_vlc2(&s->gb, vlc->table, vlc->bits, 2);
+        code = get_vlc2(&s->gb, vlc->table, vlc->bits, 1);
         dprintf("t=%d code=%d\n", g->count1table_select, code);
-        if (code < 0)
-            return -1;
-        for(i=0;i<4;i++) {
-            if (code & (8 >> i)) {
-                /* non zero value. Could use a hand coded function for
-                   'one' value */
-                v = l3_unscale(1, exponents[s_index]);
-                if(get_bits1(&s->gb))
-                    v = -v;
-            } else {
-                v = 0;
-            }
-            g->sb_hybrid[s_index++] = v;
+        g->sb_hybrid[s_index+0]=
+        g->sb_hybrid[s_index+1]=
+        g->sb_hybrid[s_index+2]=
+        g->sb_hybrid[s_index+3]= 0;
+        while(code){
+            const static int idxtab[16]={3,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0};
+            int pos= s_index+idxtab[code];
+            code ^= 8>>idxtab[code];
+            v = l3_unscale(1, exponents[pos]);
+            if(get_bits1(&s->gb))
+                v = -v;
+            g->sb_hybrid[pos] = v;
         }
+        s_index+=4;
     }
     memset(&g->sb_hybrid[s_index], 0, sizeof(*g->sb_hybrid)*(576 - s_index));
     return 0;




More information about the ffmpeg-cvslog mailing list