00001
00005 #define MB_TYPE_H261_FIL 0x800000
00006
00007
00008 const uint8_t h261_mba_code[35] = {
00009 1, 3, 2, 3,
00010 2, 3, 2, 7,
00011 6, 11, 10, 9,
00012 8, 7, 6, 23,
00013 22, 21, 20, 19,
00014 18, 35, 34, 33,
00015 32, 31, 30, 29,
00016 28, 27, 26, 25,
00017 24,
00018 15,
00019 1
00020 };
00021
00022 const uint8_t h261_mba_bits[35] = {
00023 1, 3, 3, 4,
00024 4, 5, 5, 7,
00025 7, 8, 8, 8,
00026 8, 8, 8, 10,
00027 10, 10, 10, 10,
00028 10, 11, 11, 11,
00029 11, 11, 11, 11,
00030 11, 11, 11, 11,
00031 11,
00032 11,
00033 16
00034 };
00035
00036
00037 const uint8_t h261_mtype_code[10] = {
00038 1, 1, 1, 1,
00039 1, 1, 1, 1,
00040 1, 1
00041 };
00042
00043 const uint8_t h261_mtype_bits[10] = {
00044 4, 7, 1, 5,
00045 9, 8, 10, 3,
00046 2, 6
00047 };
00048
00049 static const int h261_mtype_map[10]= {
00050 MB_TYPE_INTRA4x4,
00051 MB_TYPE_INTRA4x4 | MB_TYPE_QUANT,
00052 MB_TYPE_CBP,
00053 MB_TYPE_QUANT | MB_TYPE_CBP,
00054 MB_TYPE_16x16,
00055 MB_TYPE_CBP | MB_TYPE_16x16,
00056 MB_TYPE_QUANT | MB_TYPE_CBP | MB_TYPE_16x16,
00057 MB_TYPE_16x16 | MB_TYPE_H261_FIL,
00058 MB_TYPE_CBP | MB_TYPE_16x16 | MB_TYPE_H261_FIL,
00059 MB_TYPE_QUANT | MB_TYPE_CBP | MB_TYPE_16x16 | MB_TYPE_H261_FIL
00060 };
00061
00062
00063 const uint8_t h261_mv_tab[17][2] = {
00064 {1,1}, {1,2}, {1,3}, {1,4}, {3,6}, {5,7}, {4,7}, {3,7},
00065 {11,9}, {10,9}, {9,9}, {17,10}, {16,10}, {15,10}, {14,10}, {13,10}, {12,10}
00066 };
00067
00068 static const int mvmap[17] =
00069 {
00070 0, -1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12, -13, -14, -15, -16
00071 };
00072
00073
00074 const uint8_t h261_cbp_tab[63][2] =
00075 {
00076 {11,5}, {9,5}, {13,6}, {13,4}, {23,7}, {19,7}, {31,8}, {12,4},
00077 {22,7}, {18,7}, {30,8}, {19,5}, {27,8}, {23,8}, {19,8}, {11,4},
00078 {21,7}, {17,7}, {29,8}, {17,5}, {25,8}, {21,8}, {17,8}, {15,6},
00079 {15,8}, {13,8}, {3,9}, {15,5}, {11,8}, {7,8}, {7,9}, {10,4},
00080 {20,7}, {16,7}, {28,8}, {14,6}, {14,8}, {12,8}, {2,9}, {16,5},
00081 {24,8}, {20,8}, {16,8}, {14,5}, {10,8}, {6,8}, {6,9}, {18,5},
00082 {26,8}, {22,8}, {18,8}, {13,5}, {9,8}, {5,8}, {5,9}, {12,5},
00083 {8,8}, {4,8}, {4,9}, {7,3}, {10,5}, {8,5}, {12,6}
00084 };
00085
00086
00087 const uint16_t h261_tcoeff_vlc[65][2] = {
00088 { 0x2, 2 }, { 0x3, 2 },{ 0x4, 4 },{ 0x5, 5 },
00089 { 0x6, 7 },{ 0x26, 8 },{ 0x21, 8 },{ 0xa, 10 },
00090 { 0x1d, 12 },{ 0x18, 12 },{ 0x13, 12 },{ 0x10 , 12 },
00091 { 0x1a, 13},{ 0x19, 13 }, { 0x18, 13 }, { 0x17, 13 },
00092 { 0x3, 3 }, { 0x6, 6 }, { 0x25 , 8 }, { 0xc, 10 },
00093 { 0x1b, 12 }, { 0x16, 13 }, { 0x15, 13 }, { 0x5, 4},
00094 { 0x4, 7}, { 0xb, 10 }, { 0x14, 12 }, { 0x14, 13 },
00095 { 0x7, 5 }, { 0x24, 8 }, { 0x1c, 12 }, { 0x13, 13 },
00096 { 0x6, 5 }, { 0xf, 10 }, { 0x12, 12}, { 0x7, 6},
00097 { 0x9 , 10 }, { 0x12, 13 }, { 0x5, 6 }, { 0x1e, 12 },
00098 { 0x4, 6 }, { 0x15, 12 }, { 0x7, 7 }, { 0x11, 12},
00099 { 0x5, 7 }, { 0x11, 13 }, { 0x27, 8 }, { 0x10, 13 },
00100 { 0x23, 8 }, { 0x22, 8 }, { 0x20, 8 }, { 0xe , 10 },
00101 { 0xd, 10 }, { 0x8, 10 },{ 0x1f, 12 }, { 0x1a, 12 },
00102 { 0x19, 12 }, { 0x17, 12 }, { 0x16, 12}, { 0x1f, 13},
00103 { 0x1e, 13 }, { 0x1d, 13 }, { 0x1c, 13}, { 0x1b, 13},
00104 { 0x1, 6 }
00105 };
00106
00107 const int8_t h261_tcoeff_level[64] = {
00108 0, 1, 2, 3, 4, 5, 6, 7,
00109 8, 9, 10, 11, 12, 13, 14, 15,
00110 1, 2, 3, 4, 5, 6, 7, 1,
00111 2, 3, 4, 5, 1, 2, 3, 4,
00112 1, 2, 3, 1, 2, 3, 1, 2,
00113 1, 2, 1, 2, 1, 2, 1, 2,
00114 1, 1, 1, 1, 1, 1, 1, 1,
00115 1, 1, 1, 1, 1, 1, 1, 1
00116 };
00117
00118 const int8_t h261_tcoeff_run[64] = {
00119 0,
00120 0, 0, 0, 0, 0, 0, 0, 0,
00121 0, 0, 0, 0, 0, 0, 0, 1,
00122 1, 1, 1, 1, 1, 1, 2, 2,
00123 2, 2, 2, 3, 3, 3, 3, 4,
00124 4, 4, 5, 5, 5, 6, 6, 7,
00125 7, 8, 8, 9, 9, 10, 10, 11,
00126 12, 13, 14, 15, 16, 17, 18, 19,
00127 20, 21, 22, 23, 24, 25, 26
00128 };
00129
00130 static RLTable h261_rl_tcoeff = {
00131 64,
00132 64,
00133 h261_tcoeff_vlc,
00134 h261_tcoeff_run,
00135 h261_tcoeff_level,
00136 };