--- trunk/xvidcore/src/dct/idct.c 2002/11/26 23:44:11 677 +++ branches/release-1_0-branch/xvidcore/src/dct/idct.c 2004/03/22 23:56:55 1387 @@ -1,59 +1,66 @@ /***************************************************************************** * * XVID MPEG-4 VIDEO CODEC - * - inverse fast disrete cosine transformation - integer C version + * - Inverse DCT - * * These routines are from Independent JPEG Group's free JPEG software * Copyright (C) 1991-1998, Thomas G. Lane (see the file README.IJG) * - * This file is part of XviD, a free MPEG-4 video encoder/decoder - * - * XviD is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or + * This program is free software ; you can redistribute it and/or modify + * 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, - * but WITHOUT ANY WARRANTY; without even the implied warranty of + * but WITHOUT ANY WARRANTY ; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software + * along with this program ; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * Under section 8 of the GNU General Public License, the copyright - * holders of XVID explicitly forbid distribution in the following - * countries: - * - * - Japan - * - United States of America - * - * Linking XviD statically or dynamically with other modules is making a - * combined work based on XviD. Thus, the terms and conditions of the - * GNU General Public License cover the whole combination. - * - * As a special exception, the copyright holders of XviD give you - * permission to link XviD with independent modules that communicate with - * XviD solely through the VFW1.1 and DShow interfaces, regardless of the - * license terms of these independent modules, and to copy and distribute - * the resulting combined work under terms of your choice, provided that - * every copy of the combined work is accompanied by a complete copy of - * the source code of XviD (the version of XviD used to produce the - * combined work), being distributed under the terms of the GNU General - * Public License plus this exception. An independent module is a module - * which is not derived from or based on XviD. - * - * Note that people who make modified versions of XviD are not obligated - * to grant this special exception for their modified versions; it is - * their choice whether to do so. The GNU General Public License gives - * permission to release a modified version without this exception; this - * exception also makes it possible to release a modified version which - * carries forward this exception. + * $Id: idct.c,v 1.7 2004-03-22 22:36:23 edgomez Exp $ * - * $Id: idct.c,v 1.5 2002-11-26 23:44:10 edgomez Exp $ + ****************************************************************************/ + +/* Copyright (C) 1996, MPEG Software Simulation Group. All Rights Reserved. */ + +/* + * Disclaimer of Warranty * - *************************************************************************/ + * These software programs are available to the user without any license fee or + * royalty on an "as is" basis. The MPEG Software Simulation Group disclaims + * any and all warranties, whether express, implied, or statuary, including any + * implied warranties or merchantability or of fitness for a particular + * purpose. In no event shall the copyright-holder be liable for any + * incidental, punitive, or consequential damages of any kind whatsoever + * arising from the use of these programs. + * + * This disclaimer of warranty extends to the user of these programs and user's + * customers, employees, agents, transferees, successors, and assigns. + * + * The MPEG Software Simulation Group does not represent or warrant that the + * programs furnished hereunder are free of infringement of any third-party + * patents. + * + * Commercial implementations of MPEG-1 and MPEG-2 video, including shareware, + * are subject to royalty fees to patent holders. Many of these patents are + * general enough such that they are unavoidable regardless of implementation + * design. + * + * MPEG2AVI + * -------- + * v0.16B33 renamed the initialization function to init_idct_int32() + * v0.16B32 removed the unused idct_row() and idct_col() functions + * v0.16B3 changed var declarations to static, to enforce data align + * v0.16B22 idct_FAST() renamed to idct_int32() + * also merged idct_FAST() into a single function, to help VC++ + * optimize it. + * + * v0.14 changed int to long, to avoid confusion when compiling on x86 + * platform ( in VC++ "int" -> 32bits ) + */ /**********************************************************/ /* inverse two dimensional DCT, Chen-Wang algorithm */ @@ -78,18 +85,11 @@ #define W6 1108 /* 2048*sqrt(2)*cos(6*pi/16) */ #define W7 565 /* 2048*sqrt(2)*cos(7*pi/16) */ - -/* global declarations */ -/*void init_idct_int32 (void); */ -/*void idct_int32 (short *block); */ - /* private data */ static short iclip[1024]; /* clipping table */ static short *iclp; /* private prototypes */ -/*static void idctrow _ANSI_ARGS_((short *blk)); */ -/*static void idctcol _ANSI_ARGS_((short *blk)); */ /* row (horizontal) IDCT * @@ -124,7 +124,7 @@ X8 = W3*(X6+X7); X6 = X8 - (W3-W5)*X6; X7 = X8 - (W3+W5)*X7; - + /* second stage */ X8 = X0 + X1; X0 -= X1; @@ -135,7 +135,7 @@ X4 -= X6; X6 = X5 + X7; X5 -= X7; - + /* third stage */ X7 = X8 + X3; X8 -= X3; @@ -143,7 +143,7 @@ X0 -= X2; X2 = (181*(X4+X5)+128)>>8; X4 = (181*(X4-X5)+128)>>8; - + /* fourth stage */ blk[0] = (X7+X1)>>8; blk[1] = (X3+X2)>>8; @@ -165,7 +165,8 @@ * where: c[0] = 1/1024 * c[1..7] = (1/1024)*sqrt(2) */ -#if 0 + +#if 0 static void idctcol(blk) short *blk; { @@ -189,7 +190,7 @@ X8 = W3*(X6+X7) + 4; X6 = (X8-(W3-W5)*X6)>>3; X7 = (X8-(W3+W5)*X7)>>3; - + /* second stage */ X8 = X0 + X1; X0 -= X1; @@ -200,7 +201,7 @@ X4 -= X6; X6 = X5 + X7; X5 -= X7; - + /* third stage */ X7 = X8 + X3; X8 -= X3; @@ -208,7 +209,7 @@ X0 -= X2; X2 = (181*(X4+X5)+128)>>8; X4 = (181*(X4-X5)+128)>>8; - + /* fourth stage */ blk[8*0] = iclp[(X7+X1)>>14]; blk[8*1] = iclp[(X3+X2)>>14]; @@ -225,23 +226,27 @@ idctFuncPtr idct; /* two dimensional inverse discrete cosine transform */ -/*void j_rev_dct(block) */ -/*short *block; */ void idct_int32(short *const block) { - /* idct_int32_init() must be called before the first call to this function! */ + /* + * idct_int32_init() must be called before the first call to this + * function! + */ - /*int i; - long i; +#if 0 + int i; + long i; - for (i=0; i<8; i++) - idctrow(block+8*i); + for (i=0; i<8; i++) + idctrow(block+8*i); + + for (i=0; i<8; i++) + idctcol(block+i); +#endif - for (i=0; i<8; i++) - idctcol(block+i); */ static short *blk; static long i; static long X0, X1, X2, X3, X4, X5, X6, X7, X8; @@ -363,10 +368,8 @@ } /* end function idct_int32(block) */ -/*void */ -/*idct_int32_init() */ void -idct_int32_init(void) +idct_int32_init() { int i;