📄 vld.c
字号:
int strmax, /* Max characters in "vlc" excluding terminating null */
int maxbits, /* Max # bits in codeword */
int * bits, /* Returns # bits; 0 < bits < maxbits+1 */
int * codeword, /* Returns codeword */
int minBits // Min # bits in codeword
)
{
int j, c;
char msg[120]; /* Flawfinder: ignore */
*bits = 0, j = 0, *codeword = 0;
c = vlc[j];
while (c != 0) {
if (c == '0' || c == '1') {
*codeword <<= 1;
++(*bits);
if (c == '1') {
++(*codeword);
}
} else if (isspace(c) == 0) { /* Found illegal character */
SafeSprintf(msg, 120, "parse_bits - Illegal string: %s", vlc);
H261ErrMsg( msg );
return( H261_ERROR );
}
c = vlc[++j];
}
if (j > strmax) {
SafeSprintf(msg, 120, "Too long string: %s", vlc);
H261ErrMsg( msg );
return( H261_ERROR );
}
if (*bits > maxbits || *bits < minBits) {
SafeSprintf(msg, 120, "Illegal string: %s", vlc);
H261ErrMsg( msg );
return( H261_ERROR );
}
return (OK);
}
/////////// Routines for debugging //////////////
// strpad - Pad str to length len; return number of appended chars
/*static int strpad( char str[], int pad, int len)
{
int i, numpad;
numpad = 0;
for (i = strlen(str); i < len; i++) {
str[i] = pad;
++numpad;
}
if (numpad > 0) {
str[len] = NULL;
}
return (numpad);
}*/
extern void printsym( SYMBOL sym )
{
char ctype[80]; /* Flawfinder: ignore */
sprinttype( sym.type, ctype, 80);
printf("%s =%4d", ctype, sym.value);
return;
}
extern void sprintsym( SYMBOL sym, char s[], int sBufLen)
{
char ctype[80]; /* Flawfinder: ignore */
sprinttype( sym.type, ctype, 80);
SafeSprintf(s, sBufLen, "%s =%4d", ctype, sym.value);
return;
}
extern void sprinttype( int symtype, char s[], int sBufLen)
{
switch (symtype) {
case SYM_EXIT:
SafeSprintf(s, sBufLen, "EXIT");
break;
case SYM_ESCAPE:
SafeSprintf(s, sBufLen, "ESCAPE Table");
break;
case SYM_EOB:
SafeSprintf(s, sBufLen, "End Of Block");
break;
case SYM_INTRA_DC:
SafeSprintf(s, sBufLen, "Intra DC");
break;
case SYM_MBA:
SafeSprintf(s, sBufLen, "MBA");
break;
case SYM_STARTCODE:
SafeSprintf(s, sBufLen, "StartCode");
break;
case SYM_MBA_STUFFING:
SafeSprintf(s, sBufLen, "MBA Stuffing");
break;
case SYM_MTYPE:
SafeSprintf(s, sBufLen, "MB Type");
break;
case SYM_MVD:
SafeSprintf(s, sBufLen, "MVDiff");
break;
case SYM_CBP:
SafeSprintf(s, sBufLen, "CBP");
break;
case SYM_QUANT_TR:
SafeSprintf(s, sBufLen, "Quant/TR");
break;
case SYM_GEI_PEI:
SafeSprintf(s, sBufLen, "ExtraInsert");
break;
case SYM_SPARE:
SafeSprintf(s, sBufLen, "Spare");
break;
case SYM_GN:
SafeSprintf(s, sBufLen, "GOB Number");
break;
case SYM_PTYPE:
SafeSprintf(s, sBufLen, "Picture Type");
break;
case SYM_ESC_RUN:
SafeSprintf(s, sBufLen, "ESC Run");
break;
case SYM_ESC_LEVEL:
SafeSprintf(s, sBufLen, "ESC Level");
break;
case SYM_MCBPC:
SafeSprintf(s, sBufLen, "MCBPC");
break;
case SYM_MCBPC_STUFFING:
SafeSprintf(s, sBufLen, "MCBPC Stuffing");
break;
case SYM_MODB:
SafeSprintf(s, sBufLen, "MODB");
break;
case SYM_CBPY:
SafeSprintf(s, sBufLen, "CBPY");
break;
case SYM_DQUANT:
SafeSprintf(s, sBufLen, "DQUANT");
break;
default:
SafeSprintf(s, sBufLen, "Run = %d Level", symtype);
break;
}
return;
}
extern void printstate( int state )
{
switch (state) {
case ST_MC_NOCBP_MVDX:
printf("MC No coeffs MVDx");
break;
case ST_MC_NOCBP_MVDY:
printf("MC No coeffs MVDy");
break;
case ST_MBA_STARTCODE:
printf("MBA or Startcode");
break;
case ST_NEXT_BLK_6:
printf("One block to go, AC coeff");
break;
case ST_FIRST_BLK_6:
printf("One block to go, first coeff");
break;
case ST_NEXT_BLK_5:
printf("Two blocks to go, AC coeff");
break;
case ST_FIRST_BLK_5:
printf("Two blocks to go, first coeff");
break;
case ST_NEXT_BLK_4:
printf("Three blocks to go, AC coeff");
break;
case ST_FIRST_BLK_4:
printf("Three blocks to go, first coeff");
break;
case ST_NEXT_BLK_3:
printf("Four blocks to go, AC coeff");
break;
case ST_FIRST_BLK_3:
printf("Four blocks to go, first coeff");
break;
case ST_NEXT_BLK_2:
printf("Five blocks to go, AC coeff");
break;
case ST_FIRST_BLK_2:
printf("Five blocks to go, first coeff");
break;
case ST_NEXT_BLK_1:
printf("Six blocks to go, AC coeff");
break;
case ST_FIRST_BLK_1:
printf("Six blocks to go, first coeff");
break;
case ST_INTRA_DC_BLK_6:
printf("Last INTRA block, DC coeff");
break;
case ST_INTRA_AC_BLK_5:
printf("Two INTRA blocks to go, AC coeff");
break;
case ST_INTRA_DC_BLK_5:
printf("Two INTRA blocks to go, DC coeff");
break;
case ST_INTRA_AC_BLK_4:
printf("Three INTRA blocks to go, AC coeff");
break;
case ST_INTRA_DC_BLK_4:
printf("Three INTRA blocks to go, DC coeff");
break;
case ST_INTRA_AC_BLK_3:
printf("Four INTRA blocks to go, AC coeff");
break;
case ST_INTRA_DC_BLK_3:
printf("Four INTRA blocks to go, DC coeff");
break;
case ST_INTRA_AC_BLK_2:
printf("Five INTRA blocks to go, AC coeff");
break;
case ST_INTRA_DC_BLK_2:
printf("Five INTRA blocks to go, DC coeff");
break;
case ST_INTRA_AC_BLK_1:
printf("Six INTRA blocks to go, AC coeff");
break;
case ST_INTRA_DC_BLK_1:
printf("Six INTRA blocks to go, DC coeff");
break;
case ST_MC_CBP_MVDX:
printf("MVDx");
break;
case ST_MC_CBP_MVDY:
printf("MVDy");
break;
case ST_CBP:
printf("CBP");
break;
case ST_INTRA_MQUANT:
printf("INTRA MQUANT");
break;
case ST_MC_CBP_MQUANT:
printf("MC MQUANT");
break;
case ST_ESC_BLK_6:
printf("ESCAPE, one block to go");
break;
case ST_INTER_MQUANT:
printf("INTER MQUANT");
break;
case ST_ESC_BLK_5:
printf("ESCAPE, two blocks to go");
break;
case ST_MTYPE:
printf("MTYPE");
break;
case ST_ESC_BLK_4:
printf("ESCAPE, three blocks to go");
break;
case ST_GEI_PEI:
printf("PEI/GEI");
break;
case ST_ESC_BLK_3:
printf("ESCAPE, four blocks to go");
break;
case ST_PTYPE:
printf("PictureType");
break;
case ST_ESC_BLK_2:
printf("ESCAPE, five blocks to go");
break;
case ST_GQUANT:
printf("GQUANT");
break;
case ST_ESC_BLK_1:
printf("ESCAPE, six blocks to go");
break;
case ST_TR:
printf("TempRef");
break;
case ST_AFTER_STARTCODE:
printf("After Startcode");
break;
case ST_ESC_INTRA_5:
printf("ESCAPE, two INTRA blocks to go");
break;
case ST_ESC_INTRA_4:
printf("ESCAPE, three INTRA blocks to go");
break;
case ST_ESC_INTRA_3:
printf("ESCAPE, four INTRA blocks to go");
break;
case ST_ESC_INTRA_2:
printf("ESCAPE, five INTRA blocks to go");
break;
case ST_ESC_INTRA_1:
printf("ESCAPE, six INTRA blocks to go");
break;
// H.263 states
case ST263_FINISHED:
printf("Finished H.263 block decoding");
break;
case ST263_ESC_FINISHED:
printf("Decode ESC-LEVEL, then done");
break;
case ST263_BLK_6:
printf("Decoding last block (block 6)");
break;
case ST263_ESC_BLK6:
printf("Decode ESC-LEVEL, then continue with block 6");
break;
case ST263_BLK_5:
printf("Decoding block 5");
break;
case ST263_ESC_BLK5:
printf("Decode ESC-LEVEL, then continue with block 5");
break;
case ST263_BLK_4:
printf("Decoding block 4");
break;
case ST263_ESC_BLK4:
printf("Decode ESC-LEVEL, then continue with block 4");
break;
case ST263_BLK_3:
printf("Decoding block 3");
break;
case ST263_ESC_BLK3:
printf("Decode ESC-LEVEL, then continue with block 3");
break;
case ST263_BLK_2:
printf("Decoding block 2");
break;
case ST263_ESC_BLK2:
printf("Decode ESC-LEVEL, then continue with block 2");
break;
case ST263_BLK_1:
printf("Decoding block 1");
break;
case ST263_ESC_BLK1:
printf("Decode ESC-LEVEL, then continue with block 1");
break;
case ST263_INTRA_DC_ONLY:
printf("Decode INTRA-DC only, then exit");
break;
case ST263_INTRA_DC_AC:
printf("Decode INTRA-DC and AC coeffs, then exit");
break;
default:
printf("Unknown state = %d", state);
break;
}
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -