+++ /dev/null
-/****************************************************************************
- * DCT/IDCT functions
- ****************************************************************************/
-/* be carefull that "dct" could be equal to "luma" (ie dct_4x4(dct,dct) )*/
-static void dct_2x2_dc( int16_t dct[2][2], int16_t chroma[2][2] )
-{
- int tmp[2][2];
-
- tmp[0][0] = chroma[0][0] + chroma[0][1];
- tmp[1][0] = chroma[0][0] - chroma[0][1];
- tmp[0][1] = chroma[1][0] + chroma[1][1];
- tmp[1][1] = chroma[1][0] - chroma[1][1];
-
- dct[0][0] = tmp[0][0] + tmp[0][1];
- dct[0][1] = tmp[1][0] + tmp[1][1];
- dct[1][0] = tmp[0][0] - tmp[0][1];
- dct[1][1] = tmp[1][0] - tmp[1][1];
-}
-
-static void idct_2x2_dc( int16_t dct[2][2], int16_t chroma[2][2] )
-{
- dct_2x2_dc( chroma, dct );
-}
-
-static void dct_4x4_dc( int16_t dct[4][4], int16_t luma[4][4] )
-{
- int16_t tmp[4][4];
- int i;
-
- for( i = 0; i < 4; i++ )
- {
- tmp[0][i] = luma[i][0] + luma[i][1] + luma[i][2] + luma[i][3];
- tmp[1][i] = luma[i][0] + luma[i][1] - luma[i][2] - luma[i][3];
- tmp[2][i] = luma[i][0] - luma[i][1] - luma[i][2] + luma[i][3];
- tmp[3][i] = luma[i][0] - luma[i][1] + luma[i][2] - luma[i][3];
- }
-
- for( i = 0; i < 4; i++ )
- {
- dct[0][i] = ( tmp[i][0] + tmp[i][1] + tmp[i][2] + tmp[i][3] + 1) / 2;
- dct[1][i] = ( tmp[i][0] + tmp[i][1] - tmp[i][2] - tmp[i][3] + 1) / 2;
- dct[2][i] = ( tmp[i][0] - tmp[i][1] - tmp[i][2] + tmp[i][3] + 1) / 2;
- dct[3][i] = ( tmp[i][0] - tmp[i][1] + tmp[i][2] - tmp[i][3] + 1) / 2;
- }
-}
-
-static void dct_4x4( int16_t dct[4][4], int16_t luma[4][4] )
-{
- int16_t tmp[4][4];
- int i;
-
- for( i = 0; i < 4; i++ )
- {
- tmp[0][i] = luma[i][0] + luma[i][1] + luma[i][2] + luma[i][3];
- tmp[1][i] = 2*luma[i][0] + luma[i][1] - luma[i][2] - 2*luma[i][3];
- tmp[2][i] = luma[i][0] - luma[i][1] - luma[i][2] + luma[i][3];
- tmp[3][i] = luma[i][0] - 2*luma[i][1] + 2*luma[i][2] - luma[i][3];
- }
-
- for( i = 0; i < 4; i++ )
- {
- dct[0][i] = tmp[i][0] + tmp[i][1] + tmp[i][2] + tmp[i][3];
- dct[1][i] = 2*tmp[i][0] + tmp[i][1] - tmp[i][2] - 2*tmp[i][3];
- dct[2][i] = tmp[i][0] - tmp[i][1] - tmp[i][2] + tmp[i][3];
- dct[3][i] = tmp[i][0] - 2*tmp[i][1] + 2*tmp[i][2] - tmp[i][3];
- }
-}
-
-static void idct_4x4( int16_t dct[4][4], int16_t luma[4][4] )
-{
- int16_t tmp[4][4];
- int i;
-
- for( i = 0; i < 4; i++ )
- {
- tmp[0][i] = dct[0][i] + dct[1][i] + dct[2][i] + (dct[3][i]>>1);
- tmp[1][i] = dct[0][i] + (dct[1][i]>>1) - dct[2][i] - dct[3][i];
- tmp[2][i] = dct[0][i] - (dct[1][i]>>1) - dct[2][i] + dct[3][i];
- tmp[3][i] = dct[0][i] - dct[1][i] + dct[2][i] - (dct[3][i]>>1);
- }
-
- for( i = 0; i < 4; i++ )
- {
- /* XXX XXX use >> 6 and not / 64 -> doesn't give the same result :((((((((( */
- luma[i][0] = ( tmp[i][0] + tmp[i][1] + tmp[i][2] + (tmp[i][3]>>1) + 32 ) >> 6;
- luma[i][1] = ( tmp[i][0] + (tmp[i][1]>>1) - tmp[i][2] - tmp[i][3] + 32 ) >> 6;
- luma[i][2] = ( tmp[i][0] - (tmp[i][1]>>1) - tmp[i][2] + tmp[i][3] + 32 ) >> 6;
- luma[i][3] = ( tmp[i][0] - tmp[i][1] + tmp[i][2] - (tmp[i][3]>>1) + 32 ) >> 6;
- }
-}
-static void idct_4x4_dc( int16_t dct[4][4], int16_t luma[4][4] )
-{
- int16_t tmp[4][4];
- int i;
-
- for( i = 0; i < 4; i++ )
- {
- tmp[0][i] = dct[0][i] + dct[1][i] + dct[2][i] + dct[3][i];
- tmp[1][i] = dct[0][i] + dct[1][i] - dct[2][i] - dct[3][i];
- tmp[2][i] = dct[0][i] - dct[1][i] - dct[2][i] + dct[3][i];
- tmp[3][i] = dct[0][i] - dct[1][i] + dct[2][i] - dct[3][i];
- }
-
- for( i = 0; i < 4; i++ )
- {
- luma[i][0] = ( tmp[i][0] + tmp[i][1] + tmp[i][2] + tmp[i][3] ) ;
- luma[i][1] = ( tmp[i][0] + tmp[i][1] - tmp[i][2] - tmp[i][3] ) ;
- luma[i][2] = ( tmp[i][0] - tmp[i][1] - tmp[i][2] + tmp[i][3] ) ;
- luma[i][3] = ( tmp[i][0] - tmp[i][1] + tmp[i][2] - tmp[i][3] ) ;
- }
-}