comparison mpegaudiodec.c @ 3625:8042fcb3a62a libavcodec

move the +400 out of the innermost loop
author michael
date Fri, 25 Aug 2006 13:46:56 +0000
parents 7d8ef3c542a1
children a6251ee2dfdb
comparison
equal deleted inserted replaced
3624:7d8ef3c542a1 3625:8042fcb3a62a
421 double f, fm; 421 double f, fm;
422 int e, m; 422 int e, m;
423 f = pow((double)(i/4), 4.0 / 3.0) * pow(2, (i&3)*0.25); 423 f = pow((double)(i/4), 4.0 / 3.0) * pow(2, (i&3)*0.25);
424 fm = frexp(f, &e); 424 fm = frexp(f, &e);
425 m = (uint32_t)(fm*(1LL<<31) + 0.5); 425 m = (uint32_t)(fm*(1LL<<31) + 0.5);
426 e+= FRAC_BITS - 31 + 5; 426 e+= FRAC_BITS - 31 + 5 - 100;
427 427
428 /* normalized to FRAC_BITS */ 428 /* normalized to FRAC_BITS */
429 table_4_3_value[i] = m; 429 table_4_3_value[i] = m;
430 // av_log(NULL, AV_LOG_DEBUG, "%d %d %f\n", i, m, pow((double)i, 4.0 / 3.0)); 430 // av_log(NULL, AV_LOG_DEBUG, "%d %d %f\n", i, m, pow((double)i, 4.0 / 3.0));
431 table_4_3_exp[i] = -e; 431 table_4_3_exp[i] = -e;
432 } 432 }
433 for(i=0; i<512*16; i++){ 433 for(i=0; i<512*16; i++){
434 int exponent= (i>>4)-400; 434 int exponent= (i>>4);
435 double f= pow(i&15, 4.0 / 3.0) * pow(2, exponent*0.25 + FRAC_BITS + 5); 435 double f= pow(i&15, 4.0 / 3.0) * pow(2, (exponent-400)*0.25 + FRAC_BITS + 5);
436 expval_table[exponent+400][i&15]= lrintf(f); 436 expval_table[exponent][i&15]= lrintf(f);
437 if((i&15)==1) 437 if((i&15)==1)
438 exp_table[exponent+400]= lrintf(f); 438 exp_table[exponent]= lrintf(f);
439 } 439 }
440 440
441 for(i=0;i<7;i++) { 441 for(i=0;i<7;i++) {
442 float f; 442 float f;
443 int v; 443 int v;
1641 shift = g->scalefac_scale + 1; 1641 shift = g->scalefac_scale + 1;
1642 1642
1643 bstab = band_size_long[s->sample_rate_index]; 1643 bstab = band_size_long[s->sample_rate_index];
1644 pretab = mpa_pretab[g->preflag]; 1644 pretab = mpa_pretab[g->preflag];
1645 for(i=0;i<g->long_end;i++) { 1645 for(i=0;i<g->long_end;i++) {
1646 v0 = gain - ((g->scale_factors[i] + pretab[i]) << shift); 1646 v0 = gain - ((g->scale_factors[i] + pretab[i]) << shift) + 400;
1647 len = bstab[i]; 1647 len = bstab[i];
1648 for(j=len;j>0;j--) 1648 for(j=len;j>0;j--)
1649 *exp_ptr++ = v0; 1649 *exp_ptr++ = v0;
1650 } 1650 }
1651 1651
1656 gains[2] = gain - (g->subblock_gain[2] << 3); 1656 gains[2] = gain - (g->subblock_gain[2] << 3);
1657 k = g->long_end; 1657 k = g->long_end;
1658 for(i=g->short_start;i<13;i++) { 1658 for(i=g->short_start;i<13;i++) {
1659 len = bstab[i]; 1659 len = bstab[i];
1660 for(l=0;l<3;l++) { 1660 for(l=0;l<3;l++) {
1661 v0 = gains[l] - (g->scale_factors[k++] << shift); 1661 v0 = gains[l] - (g->scale_factors[k++] << shift) + 400;
1662 for(j=len;j>0;j--) 1662 for(j=len;j>0;j--)
1663 *exp_ptr++ = v0; 1663 *exp_ptr++ = v0;
1664 } 1664 }
1665 } 1665 }
1666 } 1666 }
1727 if (x == 15) 1727 if (x == 15)
1728 x += get_bitsz(&s->gb, linbits); 1728 x += get_bitsz(&s->gb, linbits);
1729 v = l3_unscale(x, exponent); 1729 v = l3_unscale(x, exponent);
1730 #else 1730 #else
1731 if (x < 15){ 1731 if (x < 15){
1732 v = expval_table[ exponent + 400 ][ x ]; 1732 v = expval_table[ exponent ][ x ];
1733 // v = expval_table[ (exponent&3) + 400 ][ x ] >> FFMIN(0 - (exponent>>2), 31); 1733 // v = expval_table[ (exponent&3) ][ x ] >> FFMIN(0 - (exponent>>2), 31);
1734 }else{ 1734 }else{
1735 x += get_bitsz(&s->gb, linbits); 1735 x += get_bitsz(&s->gb, linbits);
1736 v = l3_unscale(x, exponent); 1736 v = l3_unscale(x, exponent);
1737 } 1737 }
1738 #endif 1738 #endif
1747 if (y == 15) 1747 if (y == 15)
1748 y += get_bitsz(&s->gb, linbits); 1748 y += get_bitsz(&s->gb, linbits);
1749 v = l3_unscale(y, exponent); 1749 v = l3_unscale(y, exponent);
1750 #else 1750 #else
1751 if (y < 15){ 1751 if (y < 15){
1752 v = expval_table[ exponent + 400 ][ y ]; 1752 v = expval_table[ exponent ][ y ];
1753 }else{ 1753 }else{
1754 y += get_bitsz(&s->gb, linbits); 1754 y += get_bitsz(&s->gb, linbits);
1755 v = l3_unscale(y, exponent); 1755 v = l3_unscale(y, exponent);
1756 } 1756 }
1757 #endif 1757 #endif
1789 g->sb_hybrid[s_index+3]= 0; 1789 g->sb_hybrid[s_index+3]= 0;
1790 while(code){ 1790 while(code){
1791 const static int idxtab[16]={3,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0}; 1791 const static int idxtab[16]={3,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0};
1792 int pos= s_index+idxtab[code]; 1792 int pos= s_index+idxtab[code];
1793 code ^= 8>>idxtab[code]; 1793 code ^= 8>>idxtab[code];
1794 v = exp_table[ exponents[pos] + 400]; 1794 v = exp_table[ exponents[pos] ];
1795 // v = exp_table[ (exponents[pos]&3) ] >> FFMIN(0 - (exponents[pos]>>2), 31);
1795 if(get_bits1(&s->gb)) 1796 if(get_bits1(&s->gb))
1796 v = -v; 1797 v = -v;
1797 g->sb_hybrid[pos] = v; 1798 g->sb_hybrid[pos] = v;
1798 } 1799 }
1799 s_index+=4; 1800 s_index+=4;