# HG changeset patch # User michael # Date 1156381299 0 # Node ID d97b4709aaf01347bbf4cae2817e24de3ef17c03 # Parent 6560c84eef72cfbf33e1520f3c2361b79335adf2 optimizing high freq decode diff -r 6560c84eef72 -r d97b4709aaf0 mpegaudiodec.c --- a/mpegaudiodec.c Thu Aug 24 00:03:51 2006 +0000 +++ b/mpegaudiodec.c Thu Aug 24 01:01:39 2006 +0000 @@ -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;