📄 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 + -