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