@ -167,6 +167,79 @@ static inline int idctRowCondDC(int16_t *row)
return 2 ;
}
inline static void idctSparseCol ( int16_t * col )
{
int a0 , a1 , a2 , a3 , b0 , b1 , b2 , b3 ;
col [ 0 ] + = ( 1 < < ( COL_SHIFT - 1 ) ) / W4 ;
a0 = W4 * col [ 8 * 0 ] ;
a1 = W4 * col [ 8 * 0 ] ;
a2 = W4 * col [ 8 * 0 ] ;
a3 = W4 * col [ 8 * 0 ] ;
if ( col [ 8 * 2 ] ) {
a0 + = W2 * col [ 8 * 2 ] ;
a1 + = W6 * col [ 8 * 2 ] ;
a2 - = W6 * col [ 8 * 2 ] ;
a3 - = W2 * col [ 8 * 2 ] ;
}
if ( col [ 8 * 4 ] ) {
a0 + = W4 * col [ 8 * 4 ] ;
a1 - = W4 * col [ 8 * 4 ] ;
a2 - = W4 * col [ 8 * 4 ] ;
a3 + = W4 * col [ 8 * 4 ] ;
}
if ( col [ 8 * 6 ] ) {
a0 + = W6 * col [ 8 * 6 ] ;
a1 - = W2 * col [ 8 * 6 ] ;
a2 + = W2 * col [ 8 * 6 ] ;
a3 - = W6 * col [ 8 * 6 ] ;
}
if ( col [ 8 * 1 ] ) {
b0 = W1 * col [ 8 * 1 ] ;
b1 = W3 * col [ 8 * 1 ] ;
b2 = W5 * col [ 8 * 1 ] ;
b3 = W7 * col [ 8 * 1 ] ;
} else {
b0 = b1 = b2 = b3 = 0 ;
}
if ( col [ 8 * 3 ] ) {
b0 + = W3 * col [ 8 * 3 ] ;
b1 - = W7 * col [ 8 * 3 ] ;
b2 - = W1 * col [ 8 * 3 ] ;
b3 - = W5 * col [ 8 * 3 ] ;
}
if ( col [ 8 * 5 ] ) {
b0 + = W5 * col [ 8 * 5 ] ;
b1 - = W1 * col [ 8 * 5 ] ;
b2 + = W7 * col [ 8 * 5 ] ;
b3 + = W3 * col [ 8 * 5 ] ;
}
if ( col [ 8 * 7 ] ) {
b0 + = W7 * col [ 8 * 7 ] ;
b1 - = W5 * col [ 8 * 7 ] ;
b2 + = W3 * col [ 8 * 7 ] ;
b3 - = W1 * col [ 8 * 7 ] ;
}
col [ 8 * 0 ] = ( a0 + b0 ) > > COL_SHIFT ;
col [ 8 * 7 ] = ( a0 - b0 ) > > COL_SHIFT ;
col [ 8 * 1 ] = ( a1 + b1 ) > > COL_SHIFT ;
col [ 8 * 6 ] = ( a1 - b1 ) > > COL_SHIFT ;
col [ 8 * 2 ] = ( a2 + b2 ) > > COL_SHIFT ;
col [ 8 * 5 ] = ( a2 - b2 ) > > COL_SHIFT ;
col [ 8 * 3 ] = ( a3 + b3 ) > > COL_SHIFT ;
col [ 8 * 4 ] = ( a3 - b3 ) > > COL_SHIFT ;
}
# else /* not ARCH_ALPHA */
static inline void idctRowCondDC ( int16_t * row )