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

📄 mp4_vld.c

📁 基于MPEG4的DIVX解码模块
💻 C
📖 第 1 页 / 共 2 页
字号:

		"slti	$8,$5,15;"
		"bne	$8,$0,FINAL_B19;"
		"li		$2,1;"
		
		"jr		$31;"
		"li		$2,0;"
		
		"LAST_19:beq	$8,$5,FINAL_B19;"
		"li		$2,8;"
	
		"li		$8,1;"
		"beq	$8,$5,FINAL_B19;"
		"li		$2,3;"
	
		"slti	$8,$5,7;"
		"bne	$8,$0,FINAL_B19;"
		"li		$2,2;"

		"slti	$8,$5,21;"
		"bne	$8,$0,FINAL_B19;"
		"li		$2,1;"

		"li		$2,0;"

		"FINAL_B19:;"
		".set reorder;"
		);

#else

	if (!last){ /* LAST == 0 */
		if (run ==  0) return 27;
		else if (run ==  1) return 10;
		else if (run ==  2) return  5;
		else if (run ==  3) return  4;
		else if (run <=  7) return  3;
		else if (run <=  9) return  2;
		else if (run <= 14) return  1;
		else return  0; 
	} else {    /* LAST == 1 */
		if (run ==  0) return  8;
		else if (run ==  1) return  3;
		else if (run <=  6) return  2;
		else if (run <= 20) return  1;
		else return  0; 
	}
#endif
}

/**/

// Table B-20 -- ESCL(b), LMAX values of inter macroblocks 

 int vldTableB20(int last, int run) {
#ifdef MIPS_ASM
	__asm (".set noreorder;"
		"bne	$4,$0,LAST_0;"
		"li		$8,0;"
		"beq	$8,$5,FINAL_B20;"
		"li		$2,12;"
	
		"li		$8,1;"
		"beq	$8,$5,FINAL_B20;"
		"li		$2,6;"
	
		"li		$8,2;"
		"beq	$8,$5,FINAL_B20;"
		"li		$2,4;"

		"slti	$8,$5,7;"
		"bne	$8,$0,FINAL_B20;"
		"li		$2,3;"


		"slti	$8,$5,11;"
		"bne	$8,$0,FINAL_B20;"
		"li		$2,2;"

		"slti	$8,$5,27;"
		"bne	$8,$0,FINAL_B20;"
		"li		$2,1;"
		"jr		$31;"
		"li		$2,0;"
		
		"LAST_0:beq	$8,$5,FINAL_B20;"
		"li		$2,3;"
	
		"li		$8,1;"
		"beq	$8,$5,FINAL_B20;"
		"li		$2,2;"
	
		"slti	$8,$5,41;"
		"bne	$8,$0,FINAL_B20;"
		"li		$2,1;"

		"li		$2,0;"

		"FINAL_B20:;"
		".set reorder;"
		);


#else
	if (!last){ /* LAST == 0 */
		if (run ==  0) return 12;
		else if (run ==  1) return  6;
		else if (run ==  2) return  4;
		else if (run <=  6) return  3;
		else if (run <= 10) return  2;
		else if (run <= 26) return  1;
		else return  0; 
	} else {    /* LAST == 1 */
		if (run ==  0) return  3;
		else if (run ==  1) return  2;
		else if (run <= 40) return  1;
		return  0; 
	}
#endif
}

/**/

// Table B-21 -- ESCR(a), RMAX values of intra macroblocks 

 int vldTableB21(int last, int level) {
#ifdef MIPS_ASM
	__asm (".set noreorder;"
		"bne	$4,$0,LAST_1;"
		"li		$8,1;"
		"beq	$8,$5,FINAL_B21;"
		"li		$2,14;"
	
		"li		$8,2;"
		"beq	$8,$5,FINAL_B21;"
		"li		$2,9;"
	
		"li		$8,3;"
		"beq	$8,$5,FINAL_B21;"
		"li		$2,7;"

		"li		$8,4;"
		"beq	$8,$5,FINAL_B21;"
		"li		$2,3;"

		"li		$8,5;"
		"beq	$8,$5,FINAL_B21;"
		"li		$2,2;"

		"slti	$8,$5,11;"
		"bne	$8,$0,FINAL_B21;"
		"li		$2,1;"
		"jr		$31;"
		"li		$2,0;"
		
		"LAST_1:beq	$8,$5,FINAL_B21;"
		"li		$2,20;"
	
		"li		$8,2;"
		"beq	$8,$5,FINAL_B21;"
		"li		$2,6;"
	
		"li		$8,3;"
		"beq	$8,$5,FINAL_B21;"
		"li		$2,1;"

		"li		$2,0;"

		"FINAL_B21:;"
		".set reorder;"
		);


#else
	if (!last){ /* LAST == 0 */
		if (level ==  1) return 14;
		else if (level ==  2) return  9;
		else if (level ==  3) return  7;
		else if (level ==  4) return  3;
		else if (level ==  5) return  2;
		else if (level <= 10) return  1;
		else return  0; 
	} else {    /* LAST == 1 */
		if (level ==  1) return  20;
		else if (level ==  2) return  6;
		else if (level ==  3) return  1;
		else return  0;
	}
#endif
}

/**/

// Table B-22 -- ESCR(b), RMAX values of inter macroblocks 

 int vldTableB22(int last, int level) {
#ifdef MIPS_ASM
	__asm (".set noreorder;"
		"bne	$4,$0,LAST_1_B22;"
		"li		$8,1;"
		"beq	$8,$5,FINAL_B22;"
		"li		$2,26;"
	
		"li		$8,2;"
		"beq	$8,$5,FINAL_B22;"
		"li		$2,10;"
	
		"li		$8,3;"
		"beq	$8,$5,FINAL_B22;"
		"li		$2,6;"

		"li		$8,4;"
		"beq	$8,$5,FINAL_B22;"
		"li		$2,2;"

		"slti	$8,$5,7;"
		"bne	$8,$0,FINAL_B22;"
		"li		$2,1;"
		"jr		$31;"
		"li		$2,0;"
		
		"LAST_1_B22:beq	$8,$5,FINAL_B22;"
		"li		$2,40;"
	
		"li		$8,2;"
		"beq	$8,$5,FINAL_B22;"
		"li		$2,1;"
	
		"li		$2,0;"

		"FINAL_B22:;"
		".set reorder;"
		);


#else

	if (!last){ /* LAST == 0 */
		if (level ==  1) return 26;
		else if (level ==  2) return 10;
		else if (level ==  3) return  6;
		else if (level ==  4) return  2;
		else if (level <=  6) return  1;
		else return  0;
	} else {    /* LAST == 1 */
		if (level ==  1) return  40;
		else if (level ==  2) return  1;
		else return  0;
	}
#endif
}

 int tableB1x_1_length(int code);
 int tableB1x_2_length(int code);
 int tableB1x_3_length(int code);

 int vldTableB16(int code) {
	int value,length;
	if (code >= 512) {
		code = (code >> 5) - 16;
		value = tableB16_1[code];
		length = tableB1x_1_length(code);
	} else if (code >= 128) {
		code = (code >> 2) - 32;
		value = tableB16_2[code];
		length = tableB1x_2_length(code);
	} else if (code >= 8) {
		code = code - 8;
		value = tableB16_3[code];
		length = tableB1x_3_length(code);
	} else {
		/* invalid Huffman code */
		return 0;
	}
	flushbits(length);
	return value;
}

/**/

 int vldTableB17(int code) {
	int value,length;
	if (code >= 512) {
		code = (code >> 5) - 16;
		value = tableB17_1[code];
		length = tableB1x_1_length(code);
	} else if (code >= 128) {
		code = (code >> 2) - 32;
		value = tableB17_2[code];
		length = tableB1x_2_length(code);
	} else if (code >= 8) {
		code = code - 8;
		value = tableB17_3[code];
		length = tableB1x_3_length(code);
	} else {
		/* invalid Huffman code */
		return 0;
	}
	flushbits(length);
	return value;
}


 int tableB1x_2_length(int code){
#ifdef MIPS_ASM
	__asm (".set noreorder;"
		"slti	$8,$4,44;"
		"beq	$8,$0,FINAL_B1x_2;"
		"li		$2,8;"
	
		"slti	$8,$4,2;"
		"beq	$8,$0,FINAL_B1x_2;"
		"li		$2,9;"
		
		"li		$2,10;"
		
		"FINAL_B1x_2:;"

		".set reorder;"
		);
#else
	
	if (code>43) return 8;
	else if (code>1) return 9;
	else return 10;

#endif
}

 int tableB1x_1_length(int code){
#ifdef MIPS_ASM
	__asm (".set noreorder;"
		"slti	$8,$4,96;"
		"beq	$8,$0,FINAL_B1x_1;"
		"li		$2,4;"
	
		"slti	$8,$4,80;"
		"beq	$8,$0,FINAL_B1x_1;"
		"li		$2,3;"
		
		"slti	$8,$4,48;"
		"beq	$8,$0,FINAL_B1x_1;"
		"li		$2,2;"

		"slti	$8,$4,40;"
		"beq	$8,$0,FINAL_B1x_1;"
		"li		$2,4;"

		"slti	$8,$4,28;"
		"beq	$8,$0,FINAL_B1x_1;"
		"li		$2,5;"
	
		"slti	$8,$4,8;"
		"beq	$8,$0,FINAL_B1x_1;"
		"li		$2,6;"		
		
		"li		$2,7;"
		
		"FINAL_B1x_1:;"

		".set reorder;"
		);
#else

	if (code>95) return 4;
	else if (code>79) return 3;
	else if (code>47) return 2;
	else if (code>39) return 4;
	else if (code>27) return 5;
	else if (code>7) return 6;
	else return 7;

#endif
}

 int tableB1x_3_length(int code){
#ifdef MIPS_ASM
	__asm (".set noreorder;"
		"slti	$8,$4,88;"
		"beq	$8,$0,FINAL_B1x_3;"
		"li		$2,7;"
	
		"slti	$8,$4,72;"
		"beq	$8,$0,FINAL_B1x_3;"
		"li		$2,12;"
		
		"slti	$8,$4,56;"
		"beq	$8,$0,FINAL_B1x_3;"
		"li		$2,11;"

		"slti	$8,$4,8;"
		"beq	$8,$0,FINAL_B1x_3;"
		"li		$2,10;"
		
		"li		$2,11;"
		
		"FINAL_B1x_3:;"

		".set reorder;"
		);
#else
	
	if (code>87) return 7;
	else if (code>71) return 12;
	else if (code>55) return 11;
	else if (code>7) return 10;
	else return 11;

#endif
}

⌨️ 快捷键说明

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