@ -22,6 +22,7 @@
# include "config.h"
# include "libavutil/attributes.h"
# include "libavutil/intfloat.h"
# include "sbrdsp.h"
static void sbr_sum64x5_c ( float * z )
@ -51,37 +52,52 @@ static float sbr_sum_square_c(float (*x)[2], int n)
static void sbr_neg_odd_64_c ( float * x )
{
union av_intfloat32 * xi = ( union av_intfloat32 * ) x ;
int i ;
for ( i = 1 ; i < 64 ; i + = 2 )
x [ i ] = - x [ i ] ;
for ( i = 1 ; i < 64 ; i + = 4 )
{
xi [ i + 0 ] . i ^ = 1U < < 31 ;
xi [ i + 2 ] . i ^ = 1U < < 31 ;
}
}
static void sbr_qmf_pre_shuffle_c ( float * z )
{
union av_intfloat32 * zi = ( union av_intfloat32 * ) z ;
int k ;
z [ 64 ] = z [ 0 ] ;
z [ 65 ] = z [ 1 ] ;
for ( k = 1 ; k < 32 ; k + + ) {
z [ 64 + 2 * k ] = - z [ 64 - k ] ;
z [ 64 + 2 * k + 1 ] = z [ k + 1 ] ;
zi [ 64 ] . i = zi [ 0 ] . i ;
zi [ 65 ] . i = zi [ 1 ] . i ;
for ( k = 1 ; k < 31 ; k + = 2 ) {
zi [ 64 + 2 * k + 0 ] . i = zi [ 64 - k ] . i ^ ( 1U < < 31 ) ;
zi [ 64 + 2 * k + 1 ] . i = zi [ k + 1 ] . i ;
zi [ 64 + 2 * k + 2 ] . i = zi [ 63 - k ] . i ^ ( 1U < < 31 ) ;
zi [ 64 + 2 * k + 3 ] . i = zi [ k + 2 ] . i ;
}
zi [ 64 + 2 * 31 + 0 ] . i = zi [ 64 - 31 ] . i ^ ( 1U < < 31 ) ;
zi [ 64 + 2 * 31 + 1 ] . i = zi [ 31 + 1 ] . i ;
}
static void sbr_qmf_post_shuffle_c ( float W [ 32 ] [ 2 ] , const float * z )
{
const union av_intfloat32 * zi = ( const union av_intfloat32 * ) z ;
union av_intfloat32 * Wi = ( union av_intfloat32 * ) W ;
int k ;
for ( k = 0 ; k < 32 ; k + + ) {
W [ k ] [ 0 ] = - z [ 63 - k ] ;
W [ k ] [ 1 ] = z [ k ] ;
for ( k = 0 ; k < 32 ; k + = 2 ) {
Wi [ 2 * k + 0 ] . i = zi [ 63 - k ] . i ^ ( 1U < < 31 ) ;
Wi [ 2 * k + 1 ] . i = zi [ k + 0 ] . i ;
Wi [ 2 * k + 2 ] . i = zi [ 62 - k ] . i ^ ( 1U < < 31 ) ;
Wi [ 2 * k + 3 ] . i = zi [ k + 1 ] . i ;
}
}
static void sbr_qmf_deint_neg_c ( float * v , const float * src )
{
const union av_intfloat32 * si = ( const union av_intfloat32 * ) src ;
union av_intfloat32 * vi = ( union av_intfloat32 * ) v ;
int i ;
for ( i = 0 ; i < 32 ; i + + ) {
v [ i ] = src [ 63 - 2 * i ] ;
v [ 63 - i ] = - src [ 63 - 2 * i - 1 ] ;
vi [ i ] . i = si [ 63 - 2 * i ] . i ;
vi [ 63 - i ] . i = si [ 63 - 2 * i - 1 ] . i ^ ( 1U < < 31 ) ;
}
}