vlc.h
来自「实现在linux下的mpeg4编解码」· C头文件 代码 · 共 1,026 行 · 第 1/2 页
H
1,026 行
#ifndef _VLC_H_#define _VLC_H_/* type definitions for variable length code table entries */typedef struct{ U_Int code; /* right justified */ Int len;} VLCtable;/* DC prediction sizes */ static VLCtable DCtab_lum[13] ={ {3,3}, {3,2}, {2,2}, {2,3}, {1,3}, {1,4}, {1,5}, {1,6}, {1,7}, {1,8}, {1,9}, {1,10}, {1,11}}; static VLCtable DCtab_chrom[13] ={ {3,2}, {2,2}, {1,2}, {1,3}, {1,4}, {1,5}, {1,6}, {1,7}, {1,8}, {1,9}, {1,10}, {1,11}, {1,12}}; /* Motion vectors */ static VLCtable mvtab[33] ={ {1,1}, {1,2}, {1,3}, {1,4}, {3,6}, {5,7}, {4,7}, {3,7}, {11,9}, {10,9}, {9,9}, {17,10}, {16,10}, {15,10}, {14,10}, {13,10}, {12,10}, {11,10}, {10,10}, {9,10}, {8,10}, {7,10}, {6,10}, {5,10}, {4,10}, {7,11}, {6,11}, {5,11}, {4,11}, {3,11}, {2,11}, {3,12}, {2,12}};/* MCBPC Indexing by cbpc in first two bits, mode in last two. CBPC as in table 4/H.263, MB type (mode): 3 = 01, 4 = 10. Example: cbpc = 01 and mode = 4 gives index = 0110 = 6. */static VLCtable mcbpc_intra_tab[15] ={ {0x01,9}, {0x01,1}, {0x01,4}, {0x00,0}, {0x00,0}, {0x01,3}, {0x01,6}, {0x00,0}, {0x00,0}, {0x02,3}, {0x02,6}, {0x00,0}, {0x00,0}, {0x03,3}, {0x03,6}};/* MCBPC inter. Addressing: 5 bit ccmmm (cc = CBPC, mmm = mode (1-4 binary)) */static VLCtable mcbpc_inter_tab[29] ={ {1,1}, {3,3}, {2,3}, {3,5}, {4,6}, {1,9}, {0,0}, {0,0}, {3,4}, {7,7}, {5,7}, {4,8}, {4,9}, {0,0}, {0,0}, {0,0}, {2,4}, {6,7}, {4,7}, {3,8}, {3,9}, {0,0}, {0,0}, {0,0}, {5,6}, {5,9}, {5,8}, {3,7}, {2,9}};static VLCtable mcbpc_sprite_tab[31] ={ {1,1}, {0,12}, {2,3}, {3,5}, {4,6}, {3,3}, {12,4}, {1,9}, {3,4}, {1,12}, {5,7}, {4,8}, {4,9}, {7,7}, {12,5}, {0,0}, {2,4}, {2,12}, {4,7}, {3,8}, {3,9}, {6,7}, {12,6}, {0,0}, {5,6}, {3,12}, {5,8}, {3,7}, {2,9}, {5,9}, {12,7}};/* MODB table, MW 18-MAY-1998 */ static VLCtable modb_tab[3] ={ {1,1}, {1,2}, {0,2}}; #if 0/* MCBPC for separate mode */static VLCtable mcbpc_sep_tab[9] ={ {1,1}, {1,3}, {2,3}, {3,3}, {1,4}, {1,6}, {2,6}, {3,6}, {1,9}};#endif/* CBPY. Straightforward indexing */static VLCtable cbpy_tab[16] ={ {3,4}, {5,5}, {4,5}, {9,4}, {3,5}, {7,4}, {2,6}, {11,4}, {2,5}, {3,6}, {5,4}, {10,4}, {4,4}, {8,4}, {6,4}, {3,2}};static VLCtable cbpy_tab3[8] = { {3,3},{1,6},{1,5},{2,3},{2,5},{3,5},{1,3},{1,1} };static VLCtable cbpy_tab2[4] = { {1,4},{1,3},{1,2},{1,1} }; /* DCT coefficients. Four tables, two for last = 0, two for last = 1. the sign bit must be added afterwards. *//* first part of coeffs for last = 0. Indexed by [run][level-1] */static VLCtable coeff_tab0[2][12] ={ /* run = 0 */ { {0x02, 2}, {0x0f, 4}, {0x15, 6}, {0x17, 7}, {0x1f, 8}, {0x25, 9}, {0x24, 9}, {0x21,10}, {0x20,10}, {0x07,11}, {0x06,11}, {0x20,11} }, /* run = 1 */ { {0x06, 3}, {0x14, 6}, {0x1e, 8}, {0x0f,10}, {0x21,11}, {0x50,12}, {0x00, 0}, {0x00, 0}, {0x00, 0}, {0x00, 0}, {0x00, 0}, {0x00, 0} }};/* rest of coeffs for last = 0. indexing by [run-2][level-1] */static VLCtable coeff_tab1[25][4] ={ /* run = 2 */ { {0x0e, 4}, {0x1d, 8}, {0x0e,10}, {0x51,12} }, /* run = 3 */ { {0x0d, 5}, {0x23, 9}, {0x0d,10}, {0x00, 0} }, /* run = 4-26 */ { {0x0c, 5}, {0x22, 9}, {0x52,12}, {0x00, 0} }, { {0x0b, 5}, {0x0c,10}, {0x53,12}, {0x00, 0} }, { {0x13, 6}, {0x0b,10}, {0x54,12}, {0x00, 0} }, { {0x12, 6}, {0x0a,10}, {0x00, 0}, {0x00, 0} }, { {0x11, 6}, {0x09,10}, {0x00, 0}, {0x00, 0} }, { {0x10, 6}, {0x08,10}, {0x00, 0}, {0x00, 0} }, { {0x16, 7}, {0x55,12}, {0x00, 0}, {0x00, 0} }, { {0x15, 7}, {0x00, 0}, {0x00, 0}, {0x00, 0} }, { {0x14, 7}, {0x00, 0}, {0x00, 0}, {0x00, 0} }, { {0x1c, 8}, {0x00, 0}, {0x00, 0}, {0x00, 0} }, { {0x1b, 8}, {0x00, 0}, {0x00, 0}, {0x00, 0} }, { {0x21, 9}, {0x00, 0}, {0x00, 0}, {0x00, 0} }, { {0x20, 9}, {0x00, 0}, {0x00, 0}, {0x00, 0} }, { {0x1f, 9}, {0x00, 0}, {0x00, 0}, {0x00, 0} }, { {0x1e, 9}, {0x00, 0}, {0x00, 0}, {0x00, 0} }, { {0x1d, 9}, {0x00, 0}, {0x00, 0}, {0x00, 0} }, { {0x1c, 9}, {0x00, 0}, {0x00, 0}, {0x00, 0} }, { {0x1b, 9}, {0x00, 0}, {0x00, 0}, {0x00, 0} }, { {0x1a, 9}, {0x00, 0}, {0x00, 0}, {0x00, 0} }, { {0x22,11}, {0x00, 0}, {0x00, 0}, {0x00, 0} }, { {0x23,11}, {0x00, 0}, {0x00, 0}, {0x00, 0} }, { {0x56,12}, {0x00, 0}, {0x00, 0}, {0x00, 0} }, { {0x57,12}, {0x00, 0}, {0x00, 0}, {0x00, 0} }};/* first coeffs of last = 1. indexing by [run][level-1] */static VLCtable coeff_tab2[2][3] ={ /* run = 0 */ { {0x07, 4}, {0x19, 9}, {0x05,11} }, /* run = 1 */ { {0x0f, 6}, {0x04,11}, {0x00, 0} }};/* rest of coeffs for last = 1. indexing by [run-2] */static VLCtable coeff_tab3[40] ={ {0x0e, 6}, {0x0d, 6}, {0x0c, 6}, {0x13, 7}, {0x12, 7}, {0x11, 7}, {0x10, 7}, {0x1a, 8}, {0x19, 8}, {0x18, 8}, {0x17, 8}, {0x16, 8}, {0x15, 8}, {0x14, 8}, {0x13, 8}, {0x18, 9}, {0x17, 9}, {0x16, 9}, {0x15, 9}, {0x14, 9}, {0x13, 9}, {0x12, 9}, {0x11, 9}, {0x07,10}, {0x06,10}, {0x05,10}, {0x04,10}, {0x24,11}, {0x25,11}, {0x26,11}, {0x27,11}, {0x58,12}, {0x59,12}, {0x5a,12}, {0x5b,12}, {0x5c,12}, {0x5d,12}, {0x5e,12}, {0x5f,12}, {0x00, 0} };/* New tables for Intra luminance coefficients. Same codewords, different meaning *//* Coeffs for last = 0, run = 0. Indexed by [level-1] */static VLCtable coeff_tab4[27] ={ /* run = 0 */ {0x02, 2}, {0x06, 3}, {0x0f, 4}, {0x0d, 5}, {0x0c, 5}, {0x15, 6}, {0x13, 6}, {0x12, 6}, {0x17, 7}, {0x1f, 8}, {0x1e, 8}, {0x1d, 8}, {0x25, 9}, {0x24, 9}, {0x23, 9}, {0x21, 9}, {0x21,10}, {0x20,10}, {0x0f,10}, {0x0e,10}, {0x07,11}, {0x06,11}, {0x20,11}, {0x21,11}, {0x50,12}, {0x51,12}, {0x52,12}};/* Coeffs for last = 0, run = 1. Indexed by [level-1] */static VLCtable coeff_tab5[10] ={ {0x0e, 4}, {0x14, 6}, {0x16, 7}, {0x1c, 8}, {0x20, 9}, {0x1f, 9}, {0x0d,10}, {0x22,11}, {0x53,12}, {0x55,12}};/* Coeffs for last = 0, run = 2 -> 9. Indexed by [run-2][level-1] */static VLCtable coeff_tab6[8][5] ={ /* run = 2 */ { {0x0b, 5}, {0x15, 7}, {0x1e, 9}, {0x0c,10}, {0x56,12} }, /* run = 3 */ { {0x11, 6}, {0x1b, 8}, {0x1d, 9}, {0x0b,10}, {0x00, 0} }, /* run = 4 */ { {0x10, 6}, {0x22, 9}, {0x0a,10}, {0x00, 0}, {0x00, 0} }, /* run = 5 */ { {0x0d, 6}, {0x1c, 9}, {0x08,10}, {0x00, 0}, {0x00, 0} }, /* run = 6 */ { {0x12, 7}, {0x1b, 9}, {0x54,12}, {0x00, 0}, {0x00, 0} }, /* run = 7 */ { {0x14, 7}, {0x1a, 9}, {0x57,12}, {0x00, 0}, {0x00, 0} }, /* run = 8 */ { {0x19, 8}, {0x09,10}, {0x00, 0}, {0x00, 0}, {0x00, 0} }, /* run = 9 */ { {0x18, 8}, {0x23,11}, {0x00, 0}, {0x00, 0}, {0x00, 0} }};/* Coeffs for last = 0, run = 10 -> 14. Indexed by [run-10] */static VLCtable coeff_tab7[5] ={ {0x17, 8}, {0x19, 9}, {0x18, 9}, {0x07,10}, {0x58,12}};/* Coeffs for last = 1, run = 0. Indexed by [level-1] */static VLCtable coeff_tab8[8] ={ {0x07, 4}, {0x0c, 6}, {0x16, 8}, {0x17, 9}, {0x06,10}, {0x05,11}, {0x04,11}, {0x59,12}};/* Coeffs for last = 1, run = 1 -> 6. Indexed by [run-1][level-1] */static VLCtable coeff_tab9[6][3] ={ /* run = 1 */ { {0x0f, 6}, {0x16, 9}, {0x05,10} }, /* run = 2 */ { {0x0e, 6}, {0x04,10}, {0x00, 0} }, /* run = 3 */ { {0x11, 7}, {0x24,11}, {0x00, 0} }, /* run = 4 */ { {0x10, 7}, {0x25,11}, {0x00, 0} }, /* run = 5 */ { {0x13, 7}, {0x5a,12}, {0x00, 0} }, /* run = 6 */ { {0x15, 8}, {0x5b,12}, {0x00, 0} }};/* Coeffs for last = 1, run = 7 -> 20. Indexed by [run-7] */static VLCtable coeff_tab10[14] ={ {0x14, 8}, {0x13, 8}, {0x1a, 8}, {0x15, 9}, {0x14, 9}, {0x13, 9}, {0x12, 9}, {0x11, 9}, {0x26,11}, {0x27,11}, {0x5c,12}, {0x5d,12}, {0x5e,12}, {0x5f,12}};/* RVLC tables *//* DCT coefficients. Four tables, two for last = 0, two for last = 1. the sign bit must be added afterwards. *//* DCT coeffs (intra) for last = 0. *//* Indexed by [level-1] */static VLCtable coeff_RVLCtab1[27] ={ /* run = 0 */ { 0x6, 3}, { 0x7, 3}, { 0xa, 4}, { 0x9, 5}, { 0x14, 6}, { 0x15, 6}, { 0x34, 7}, { 0x74, 8}, { 0x75, 8}, { 0xdd, 9}, { 0xec, 9}, { 0x1ec, 10}, { 0x1ed, 10}, { 0x1f4, 10}, { 0x3ec, 11}, { 0x3ed, 11}, { 0x3f4, 11}, { 0x77d, 12}, { 0x7bc, 12}, { 0xfbd, 13}, { 0xfdc, 13}, { 0x7bd, 12}, { 0xfdd, 13}, { 0x1fbd, 14}, { 0x1fdc, 14}, { 0x1fdd, 14}, { 0x1ffc, 15} };/* Indexed by [level-1] */static VLCtable coeff_RVLCtab2[13] ={ /* run = 1 */ { 0x1, 4}, { 0x8, 5}, { 0x2d, 7}, { 0x6c, 8}, { 0x6d, 8}, { 0xdc, 9}, { 0x1dd, 10}, { 0x3dc, 11}, { 0x3dd, 11}, { 0x77c, 12}, { 0xfbc, 13}, { 0x1f7d, 14}, { 0x1fbc, 14} };/* Indexed by [level-1] */static VLCtable coeff_RVLCtab3[11] ={ /* run = 2 */ { 0x4, 5}, { 0x2c, 7}, { 0xbc, 9}, { 0x1dc, 10}, { 0x3bc, 11}, { 0x3bd, 11}, { 0xefd, 13}, { 0xf7c, 13}, { 0xf7d, 13}, { 0x1efd, 14}, { 0x1f7c, 14} };/* Indexed by [level-1] */static VLCtable coeff_RVLCtab4[9] ={ /* run = 3 */ { 0x5, 5}, { 0x5c, 8}, { 0xbd, 9}, { 0x37d, 11}, { 0x6fc, 12}, { 0xefc, 13}, { 0x1dfd, 14}, { 0x1efc, 14}, { 0x1ffd, 15} };/* Indexed by [run-4][level-1] */static VLCtable coeff_RVLCtab5[2][6] ={ /* run = 4 */ { { 0xc, 6}, { 0x5d, 8}, { 0x1bd, 10}, { 0x3fd, 12}, { 0x6fd, 12}, { 0x1bfd, 14} }, /* run = 5 */ { { 0xd, 6}, { 0x7d, 9}, { 0x2fc, 11}, { 0x5fc, 12}, { 0x1bfc, 14}, { 0x1dfc, 14} }};/* Indexed by [run-6][level-1] */static VLCtable coeff_RVLCtab6[2][5] ={ /* run = 6 */ { { 0x1c, 7}, { 0x17c, 10}, { 0x2fd, 11}, { 0x5fd, 12}, { 0x2ffc, 15} }, /* run = 7 */ { { 0x1d, 7}, { 0x17d, 10}, { 0x37c, 11},
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?