Mercurial > libavcodec.hg
changeset 11708:8d2e66ba12cf libavcodec
Make lsf_sf_expand() 4 times faster.
author | michael |
---|---|
date | Tue, 11 May 2010 20:33:48 +0000 |
parents | eb9e142ea51f |
children | 6f9b4c452130 |
files | mpegaudiodec.c |
diffstat | 1 files changed, 24 insertions(+), 16 deletions(-) [+] |
line wrap: on
line diff
--- a/mpegaudiodec.c Tue May 11 19:52:42 2010 +0000 +++ b/mpegaudiodec.c Tue May 11 20:33:48 2010 +0000 @@ -1318,24 +1318,32 @@ return 3 * 12; } -//FIXME optimze this shit -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; }