Browse Source

Make lsf_sf_expand() 4 times faster.

Originally committed as revision 23096 to svn://svn.ffmpeg.org/ffmpeg/trunk
tags/n0.8
Michael Niedermayer 15 years ago
parent
commit
fd9451c68f
1 changed files with 24 additions and 16 deletions
  1. +24
    -16
      libavcodec/mpegaudiodec.c

+ 24
- 16
libavcodec/mpegaudiodec.c View File

@@ -1318,24 +1318,32 @@ static int mp_decode_layer2(MPADecodeContext *s)
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;
}



Loading…
Cancel
Save