|
|
|
@@ -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; |
|
|
|
} |
|
|
|
|
|
|
|
|