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

📄 idct_llm_int.c

📁 由bmp生成mpeg2 的I_frame 数据
💻 C
字号:
/*******************************************************************
        IDCT module used LLM algorithm (based IJG idct_int.c)
 *******************************************************************/

#include "idct_clip_table.h"

#define IDCT_LLM_INT_C
#include "idct_llm_int.h"

#define FIX_0_298631336   2446
#define FIX_0_390180644   3196
#define FIX_0_541196100   4433
#define FIX_0_765366865   6270
#define FIX_0_899976223   7373
#define FIX_1_175875602   9633
#define FIX_1_501321110  12299
#define FIX_1_847759065  15137
#define FIX_1_961570560  16069
#define FIX_2_053119869  16819
#define FIX_2_562915447  20995
#define FIX_3_072711026  25172

void __stdcall idct_llm_int(short *block)
{
	int i;
	int t;
	
	int w0, w1, w2, w3;
	int w4, w5, w6, w7;
	
	int z1, z2, z3, z4, z5;

	short *s, *d;
	int *w;
	
	int work[64];

	s = block;
	w = work;

	for(i=0;i<8;i++){
		if((s[1] | s[2] | s[3] | s[4] | s[5] | s[6] | s[7]) == 0) {
			w[0] = w[1] = w[2] = w[3] = w[4] = w[5] = w[6] = w[7] = (s[0] << 4);
			s += 8;
			w += 8;
			continue;
		}

		z2 = s[2];
		z3 = s[6];

		z1 = (z2+z3) * FIX_0_541196100;
		w2 = z1 + (z3 * (- FIX_1_847759065));
		w3 = z1 + (z2 * FIX_0_765366865);

		w0 = (s[0] + s[4]) << 13;
		w1 = (s[0] - s[4]) << 13;

		w4 = w0 + w3;
		w5 = w1 + w2;
		w6 = w1 - w2;
		w7 = w0 - w3;

		w0 = s[7];
		w1 = s[5];
		w2 = s[3];
		w3 = s[1];

		z1 = w0 + w3;
		z2 = w1 + w2;
		z3 = w0 + w2;
		z4 = w1 + w3;
		z5 = (z3 + z4) * FIX_1_175875602;

		w0 *= FIX_0_298631336;
		w1 *= FIX_2_053119869;
		w2 *= FIX_3_072711026;
		w3 *= FIX_1_501321110;
		z1 *= (- FIX_0_899976223);
		z2 *= (- FIX_2_562915447);
		z3 *= (- FIX_1_961570560);
		z4 *= (- FIX_0_390180644);

		z3 += z5;
		z4 += z5;

		w0 += z1 + z3;
		w1 += z2 + z4;
		w2 += z2 + z3;
		w3 += z1 + z4;

		/* 嶼弍塃僔僼僩偼晧偺柍尷戝偵娵傔傜傟傞 */
		w[0] = (w4 + w3 + 256) >> 9;
		w[1] = (w5 + w2 + 256) >> 9;
		w[2] = (w6 + w1 + 256) >> 9;
		w[3] = (w7 + w0 + 256) >> 9;
		w[4] = (w7 - w0 + 256) >> 9;
		w[5] = (w6 - w1 + 256) >> 9;
		w[6] = (w5 - w2 + 256) >> 9;
		w[7] = (w4 - w3 + 256) >> 9;
		
		s += 8;
		w += 8;
	}

	w = work;
	d = block;
	
	for(i=0;i<8;i++){
		if((w[1*8] | w[2*8] | w[3*8] | w[4*8] | w[5*8] | w[6*8] | w[7*8]) == 0) {
			if(w[0] < 0){
				t = w[0] - 64;
			}else{
				t = w[0] + 64;
			}
			d[0*8] = d[1*8] = d[2*8] = d[3*8] = d[4*8] = d[5*8] = d[6*8] = d[7*8] = idct_clip_table[IDCT_CLIP_TABLE_OFFSET+((t)>>7)];
			w += 1;
			d += 1;
			continue;
		}

		z2 = w[2*8];
		z3 = w[6*8];

		z1 = (z2+z3) * FIX_0_541196100;
		w2 = z1 + (z3 * (- FIX_1_847759065));
		w3 = z1 + (z2 * FIX_0_765366865);

		w0 = (w[0*8] + w[4*8]) << 13;
		w1 = (w[0*8] - w[4*8]) << 13;

		w4 = w0 + w3;
		w7 = w0 - w3;
		w5 = w1 + w2;
		w6 = w1 - w2;

		w0 = w[7*8];
		w1 = w[5*8];
		w2 = w[3*8];
		w3 = w[1*8];

		z1 = w0 + w3;
		z2 = w1 + w2;
		z3 = w0 + w2;
		z4 = w1 + w3;
		z5 = (z3 + z4) * FIX_1_175875602;

		w0 *= FIX_0_298631336;
		w1 *= FIX_2_053119869;
		w2 *= FIX_3_072711026;
		w3 *= FIX_1_501321110;
		z1 *= (- FIX_0_899976223);
		z2 *= (- FIX_2_562915447);
		z3 *= (- FIX_1_961570560);
		z4 *= (- FIX_0_390180644);

		z3 += z5;
		z4 += z5;

		w0 += z1 + z3;
		w1 += z2 + z4;
		w2 += z2 + z3;
		w3 += z1 + z4;

		d[0*8] = idct_clip_table[IDCT_CLIP_TABLE_OFFSET+((w4+w3+524288) >> 20)];
		d[1*8] = idct_clip_table[IDCT_CLIP_TABLE_OFFSET+((w5+w2+524288) >> 20)];
		d[2*8] = idct_clip_table[IDCT_CLIP_TABLE_OFFSET+((w6+w1+524288) >> 20)];
		d[3*8] = idct_clip_table[IDCT_CLIP_TABLE_OFFSET+((w7+w0+524288) >> 20)];
		d[4*8] = idct_clip_table[IDCT_CLIP_TABLE_OFFSET+((w7-w0+524288) >> 20)];
		d[5*8] = idct_clip_table[IDCT_CLIP_TABLE_OFFSET+((w6-w1+524288) >> 20)];
		d[6*8] = idct_clip_table[IDCT_CLIP_TABLE_OFFSET+((w5-w2+524288) >> 20)];
		d[7*8] = idct_clip_table[IDCT_CLIP_TABLE_OFFSET+((w4-w3+524288) >> 20)];
		
		w += 1;
		d += 1;
	}
}

⌨️ 快捷键说明

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