⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mvidct.h

📁 优化过的xvid1.1.2源代码
💻 H
字号:
#ifndef __MVIDCT_H__
#define __MVIDCT_H__

#include "MVGlobal.h"


#define 	W1 							2841					/* 2048*sqrt(2)*cos(1*pi/16) */
#define 	W2 							2676					/* 2048*sqrt(2)*cos(2*pi/16) */
#define 	W3 							2408					/* 2048*sqrt(2)*cos(3*pi/16) */
#define 	W5 							1609					/* 2048*sqrt(2)*cos(5*pi/16) */
#define 	W6 							1108					/* 2048*sqrt(2)*cos(6*pi/16) */
#define 	W7 							565					/* 2048*sqrt(2)*cos(7*pi/16) */

short iclip[1024];		/* clipping table */
short *iclp;

/*related to idct functions is two .one is init
* second is idct, idct function is inline .
* functions are from idc.c 
* 20070122 wuhaibin
*/ 
void idct_int32_init(void);

__inline void idct_int32(short *const block)
{

    short *blk;
	long i;
	long X0, X1, X2, X3, X4, X5, X6, X7, X8;


	for (i = 0; i < 8; i++)		
	{
		blk = block + (i << 3);
		if (!((X1 = blk[4] << 11) | (X2 = blk[6]) |
			  (X3 = blk[2])|(X4 = blk[1])|(X5 = blk[7])|
			  (X6 = blk[5])|(X7 = blk[3])))
		{
			blk[0] = blk[1] = blk[2] = blk[3] = blk[4] = blk[5] = blk[6] =
				blk[7] = blk[0] << 3;
			continue;
		}

		X0 = (blk[0] << 11) + 128;	

		X8 = W7 * (X4 + X5);
		X4 = X8 + (W1 - W7) * X4;
		X5 = X8 - (W1 + W7) * X5;
		X8 = W3 * (X6 + X7);
		X6 = X8 - (W3 - W5) * X6;
		X7 = X8 - (W3 + W5) * X7;

		X8 = X0 + X1;
		X0 -= X1;
		X1 = W6 * (X3 + X2);
		X2 = X1 - (W2 + W6) * X2;
		X3 = X1 + (W2 - W6) * X3;
		X1 = X4 + X6;
		X4 -= X6;
		X6 = X5 + X7;
		X5 -= X7;

		X7 = X8 + X3;
		X8 -= X3;
		X3 = X0 + X2;
		X0 -= X2;
		X2 = (181 * (X4 + X5) + 128) >> 8;
		X4 = (181 * (X4 - X5) + 128) >> 8;

		blk[0] = (short) ((X7 + X1) >> 8);
		blk[1] = (short) ((X3 + X2) >> 8);
		blk[2] = (short) ((X0 + X4) >> 8);
		blk[3] = (short) ((X8 + X6) >> 8);
		blk[4] = (short) ((X8 - X6) >> 8);
		blk[5] = (short) ((X0 - X4) >> 8);
		blk[6] = (short) ((X3 - X2) >> 8);
		blk[7] = (short) ((X7 - X1) >> 8);

	}



	for (i = 0; i < 8; i++)		
	{
		blk = block + i;
		
		// shortcut  wuhaibin 2007-01-17 num1 * num2 -> sum, 7*8->56;
		if (!((X1 = (blk[32] << 8)) | (X2 = blk[48]) |
		     (X3 = blk[16])|(X4 = blk[8])|(X5 = blk[56])|
		     (X6 = blk[40]) | (X7 = blk[24])))
	 {
			blk[0] = blk[8] = blk[16] = blk[24] = blk[32] =
				blk[40] = blk[48] = blk[56] =
				iclp[(blk[0] + 32) >> 6];
			continue;
		}

		X0 = (blk[0] << 8) + 8192;

		X8 = W7 * (X4 + X5) + 4;
		X4 = (X8 + (W1 - W7) * X4) >> 3;
		X5 = (X8 - (W1 + W7) * X5) >> 3;
		X8 = W3 * (X6 + X7) + 4;
		X6 = (X8 - (W3 - W5) * X6) >> 3;
		X7 = (X8 - (W3 + W5) * X7) >> 3;

		X8 = X0 + X1;
		X0 -= X1;
		X1 = W6 * (X3 + X2) + 4;
		X2 = (X1 - (W2 + W6) * X2) >> 3;
		X3 = (X1 + (W2 - W6) * X3) >> 3;
		X1 = X4 + X6;
		X4 -= X6;
		X6 = X5 + X7;
		X5 -= X7;

		X7 = X8 + X3;
		X8 -= X3;
		X3 = X0 + X2;
		X0 -= X2;
		X2 = (181 * (X4 + X5) + 128) >> 8;
		X4 = (181 * (X4 - X5) + 128) >> 8;

		blk[0] = iclp[(X7 + X1) >> 14];
		blk[8] = iclp[(X3 + X2) >> 14];
		blk[16] = iclp[(X0 + X4) >> 14];
		blk[24] = iclp[(X8 + X6) >> 14];
		blk[32] = iclp[(X8 - X6) >> 14];
		blk[40] = iclp[(X0 - X4) >> 14];
		blk[48] = iclp[(X3 - X2) >> 14];
		blk[56] = iclp[(X7 - X1) >> 14];
	}

}							

#endif;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -