diff options
author | Reinhard Tartler <siretart@tauware.de> | 2010-05-21 18:32:58 +0000 |
---|---|---|
committer | Reinhard Tartler <siretart@tauware.de> | 2010-05-21 18:32:58 +0000 |
commit | dd92ff49c9b2d3b515238a525a3f94de7e891327 (patch) | |
tree | 5ee379f5f9fdd9d9c3a1fac2a3e2fd421655d90f /libavcodec | |
parent | b12045c8c7676ba5cced050be2f7df60f1efc88a (diff) |
Make lsf_sf_expand() 4 times faster.
backport r23096 by michael
Originally committed as revision 23219 to svn://svn.ffmpeg.org/ffmpeg/branches/0.6
Diffstat (limited to 'libavcodec')
-rw-r--r-- | libavcodec/mpegaudiodec.c | 39 |
1 files changed, 24 insertions, 15 deletions
diff --git a/libavcodec/mpegaudiodec.c b/libavcodec/mpegaudiodec.c index 40383a8143..25fad80284 100644 --- a/libavcodec/mpegaudiodec.c +++ b/libavcodec/mpegaudiodec.c @@ -1315,23 +1315,32 @@ static int mp_decode_layer2(MPADecodeContext *s) return 3 * 12; } -static inline void lsf_sf_expand(int *slen, +#define SPLIT(dst,sf,n)\ + if(n==3){\ + int m= (sf*171)>>9;\ + dst= sf - 3*m;\ + sf=m;\ + }else if(n==4){\ + dst= sf&3;\ + sf>>=2;\ + }else if(n==5){\ + int m= (sf*205)>>10;\ + dst= sf - 5*m;\ + sf=m;\ + }else if(n==6){\ + int m= (sf*171)>>10;\ + dst= sf - 6*m;\ + sf=m;\ + }else{\ + dst=0;\ + } + +static av_always_inline void lsf_sf_expand(int *slen, int sf, int n1, int n2, int n3) { - if (n3) { - slen[3] = sf % n3; - sf /= n3; - } else { - slen[3] = 0; - } - if (n2) { - slen[2] = sf % n2; - sf /= n2; - } else { - slen[2] = 0; - } - slen[1] = sf % n1; - sf /= n1; + SPLIT(slen[3], sf, n3) + SPLIT(slen[2], sf, n2) + SPLIT(slen[1], sf, n1) slen[0] = sf; } |