Mercurial > libavcodec.hg
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; |