📄 mp4_vld.c
字号:
"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 + -