[cvs] / xvidcore / src / dct / simple_idct.c Repository:
ViewVC logotype

Diff of /xvidcore/src/dct/simple_idct.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.2.2.2, Mon Jun 9 13:53:13 2003 UTC revision 1.3, Mon Jun 9 17:08:16 2003 UTC
# Line 1  Line 1 
1  /*****************************************************************************  /*
2   *   * Simple IDCT
  *  XVID MPEG-4 VIDEO CODEC  
  *  - Inverse DCT (More precise version)  -  
3   *   *
4   *  Copyright (c) 2001 Michael Niedermayer <michaelni@gmx.at>   *  Copyright (c) 2001 Michael Niedermayer <michaelni@gmx.at>
5   *   *
6   *  Originally distributed under the GNU LGPL License (ffmpeg).   * This library is free software; you can redistribute it and/or
7   *  It is licensed under the GNU GPL for the XviD tree.   * modify it under the terms of the GNU Lesser General Public
8     * License as published by the Free Software Foundation; either
9     * version 2 of the License, or (at your option) any later version.
10   *   *
11   *  This program is free software ; you can redistribute it and/or modify   * This library is distributed in the hope that it will be useful,
  *  it under the terms of the GNU General Public License as published by  
  *  the Free Software Foundation ; either version 2 of the License, or  
  *  (at your option) any later version.  
  *  
  *  This program is distributed in the hope that it will be useful,  
12   *  but WITHOUT ANY WARRANTY ; without even the implied warranty of   *  but WITHOUT ANY WARRANTY ; without even the implied warranty of
13   *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14   *  GNU General Public License for more details.   * Lesser General Public License for more details.
15   *   *
16   *  You should have received a copy of the GNU General Public License   * You should have received a copy of the GNU Lesser General Public
17   *  along with this program ; if not, write to the Free Software   * License along with this library; if not, write to the Free Software
18   *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA   *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
19   *   */
  * $Id$  
  *  
  ****************************************************************************/  
   
20  /*  /*
21    based upon some outcommented c code from mpeg2dec (idct_mmx.c    based upon some outcommented c code from mpeg2dec (idct_mmx.c
22    written by Aaron Holtzman <aholtzma@ess.engr.uvic.ca>)    written by Aaron Holtzman <aholtzma@ess.engr.uvic.ca>)
23   */   */
   
24  #include "../portab.h"  #include "../portab.h"
25  #include "idct.h"  #include "idct.h"
26    
# Line 45  Line 35 
35  #define ROW_SHIFT 8  #define ROW_SHIFT 8
36  #define COL_SHIFT 17  #define COL_SHIFT 17
37  #else  #else
38  #define W1  22725  /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */  #define W1  22725  //cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5
39  #define W2  21407  /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */  #define W2  21407  //cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5
40  #define W3  19266  /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */  #define W3  19266  //cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5
41  #define W4  16383  /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */  #define W4  16383  //cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5
42  #define W5  12873  /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */  #define W5  12873  //cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5
43  #define W6  8867   /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */  #define W6  8867   //cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5
44  #define W7  4520   /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */  #define W7  4520   //cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5
45  #define ROW_SHIFT 11  #define ROW_SHIFT 11
46  #define COL_SHIFT 20 /* 6 */  #define COL_SHIFT 20 // 6
47  #endif  #endif
48    
49  #if defined(ARCH_IS_PPC)  #if defined(ARCH_IS_PPC)
# Line 240  Line 230 
230      for(i=0; i<8; i++)      for(i=0; i<8; i++)
231          idctSparseCol(block + i);          idctSparseCol(block + i);
232  }  }
   
   
 /* Input permutation for the simple_idct_mmx */  
 static const uint8_t simple_mmx_permutation[64]={  
         0x00, 0x08, 0x04, 0x09, 0x01, 0x0C, 0x05, 0x0D,  
         0x10, 0x18, 0x14, 0x19, 0x11, 0x1C, 0x15, 0x1D,  
         0x20, 0x28, 0x24, 0x29, 0x21, 0x2C, 0x25, 0x2D,  
         0x12, 0x1A, 0x16, 0x1B, 0x13, 0x1E, 0x17, 0x1F,  
         0x02, 0x0A, 0x06, 0x0B, 0x03, 0x0E, 0x07, 0x0F,  
         0x30, 0x38, 0x34, 0x39, 0x31, 0x3C, 0x35, 0x3D,  
         0x22, 0x2A, 0x26, 0x2B, 0x23, 0x2E, 0x27, 0x2F,  
         0x32, 0x3A, 0x36, 0x3B, 0x33, 0x3E, 0x37, 0x3F,  
 };  
   
 #if defined(ARCH_IS_IA32)  
 /* wrapper function, as simple_idct_mmx expects data to be permutated */  
 void simple_idct_mmx2(int16_t * const block)  
 {  
     int16_t tmp[64];  
     int i;  
   
     for(i=0;i<64;i++) tmp[simple_mmx_permutation[i]] = block[i];  
     simple_idct_mmx(tmp);  
     for(i=0;i<64;i++) block[i] = tmp[i];  
 }  
 #endif  

Legend:
Removed from v.1.2.2.2  
changed lines
  Added in v.1.3

No admin address has been configured
ViewVC Help
Powered by ViewVC 1.0.4