[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, Sat Feb 15 15:22:18 2003 UTC revision 1.4, Mon Mar 22 22:36:23 2004 UTC
# Line 1  Line 1 
1  /*  /*****************************************************************************
2   * Simple IDCT   *
3     *  XVID MPEG-4 VIDEO CODEC
4     *  - Inverse DCT (More precise version)  -
5   *   *
6   * Copyright (c) 2001 Michael Niedermayer <michaelni@gmx.at>   * Copyright (c) 2001 Michael Niedermayer <michaelni@gmx.at>
7   *   *
8   * This library is free software; you can redistribute it and/or   *  Originally distributed under the GNU LGPL License (ffmpeg).
9   * modify it under the terms of the GNU Lesser General Public   *  It is licensed under the GNU GPL for the XviD tree.
  * License as published by the Free Software Foundation; either  
  * version 2 of the License, or (at your option) any later version.  
10   *   *
11   * This library is distributed in the hope that it will be useful,   *  This program is free software ; you can redistribute it and/or modify
12     *  it under the terms of the GNU General Public License as published by
13     *  the Free Software Foundation ; either version 2 of the License, or
14     *  (at your option) any later version.
15     *
16     *  This program is distributed in the hope that it will be useful,
17   * but WITHOUT ANY WARRANTY; without even the implied warranty of   * but WITHOUT ANY WARRANTY; without even the implied warranty of
18   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU   *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19   * Lesser General Public License for more details.   *  GNU General Public License for more details.
20   *   *
21   * You should have received a copy of the GNU Lesser General Public   *  You should have received a copy of the GNU General Public License
22   * License along with this library; if not, write to the Free Software   *  along with this program ; if not, write to the Free Software
23   * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA   * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
24   */   *
25     * $Id$
26     *
27     ****************************************************************************/
28    
29  /*  /*
30    based upon some outcommented c code from mpeg2dec (idct_mmx.c    based upon some outcommented c code from mpeg2dec (idct_mmx.c
31    written by Aaron Holtzman <aholtzma@ess.engr.uvic.ca>)    written by Aaron Holtzman <aholtzma@ess.engr.uvic.ca>)
32   */   */
33    
34  #include "../portab.h"  #include "../portab.h"
35  #include "idct.h"  #include "idct.h"
36    
# Line 35  Line 45 
45  #define ROW_SHIFT 8  #define ROW_SHIFT 8
46  #define COL_SHIFT 17  #define COL_SHIFT 17
47  #else  #else
48  #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 */
49  #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 */
50  #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 */
51  #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 */
52  #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 */
53  #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 */
54  #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 */
55  #define ROW_SHIFT 11  #define ROW_SHIFT 11
56  #define COL_SHIFT 20 // 6  #define COL_SHIFT 20 /* 6 */
57  #endif  #endif
58    
59  #if defined(ARCH_IS_PPC)  #if defined(ARCH_IS_PPC)
# Line 230  Line 240 
240      for(i=0; i<8; i++)      for(i=0; i<8; i++)
241          idctSparseCol(block + i);          idctSparseCol(block + i);
242  }  }
   
   
 /* 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  
changed lines
  Added in v.1.4

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