00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00028 #ifndef AVCODEC_MPEG4DATA_H
00029 #define AVCODEC_MPEG4DATA_H
00030 
00031 #include <stdint.h>
00032 #include "mpegvideo.h"
00033 
00034 
00035 const uint8_t ff_mpeg4_DCtab_lum[13][2] =
00036 {
00037     {3,3}, {3,2}, {2,2}, {2,3}, {1,3}, {1,4}, {1,5}, {1,6}, {1,7},
00038     {1,8}, {1,9}, {1,10}, {1,11},
00039 };
00040 
00041 const uint8_t ff_mpeg4_DCtab_chrom[13][2] =
00042 {
00043     {3,2}, {2,2}, {1,2}, {1,3}, {1,4}, {1,5}, {1,6}, {1,7}, {1,8},
00044     {1,9}, {1,10}, {1,11}, {1,12},
00045 };
00046 
00047 const uint16_t ff_mpeg4_intra_vlc[103][2] = {
00048 { 0x2, 2 },
00049 { 0x6, 3 },{ 0xf, 4 },{ 0xd, 5 },{ 0xc, 5 },
00050 { 0x15, 6 },{ 0x13, 6 },{ 0x12, 6 },{ 0x17, 7 },
00051 { 0x1f, 8 },{ 0x1e, 8 },{ 0x1d, 8 },{ 0x25, 9 },
00052 { 0x24, 9 },{ 0x23, 9 },{ 0x21, 9 },{ 0x21, 10 },
00053 { 0x20, 10 },{ 0xf, 10 },{ 0xe, 10 },{ 0x7, 11 },
00054 { 0x6, 11 },{ 0x20, 11 },{ 0x21, 11 },{ 0x50, 12 },
00055 { 0x51, 12 },{ 0x52, 12 },{ 0xe, 4 },{ 0x14, 6 },
00056 { 0x16, 7 },{ 0x1c, 8 },{ 0x20, 9 },{ 0x1f, 9 },
00057 { 0xd, 10 },{ 0x22, 11 },{ 0x53, 12 },{ 0x55, 12 },
00058 { 0xb, 5 },{ 0x15, 7 },{ 0x1e, 9 },{ 0xc, 10 },
00059 { 0x56, 12 },{ 0x11, 6 },{ 0x1b, 8 },{ 0x1d, 9 },
00060 { 0xb, 10 },{ 0x10, 6 },{ 0x22, 9 },{ 0xa, 10 },
00061 { 0xd, 6 },{ 0x1c, 9 },{ 0x8, 10 },{ 0x12, 7 },
00062 { 0x1b, 9 },{ 0x54, 12 },{ 0x14, 7 },{ 0x1a, 9 },
00063 { 0x57, 12 },{ 0x19, 8 },{ 0x9, 10 },{ 0x18, 8 },
00064 { 0x23, 11 },{ 0x17, 8 },{ 0x19, 9 },{ 0x18, 9 },
00065 { 0x7, 10 },{ 0x58, 12 },{ 0x7, 4 },{ 0xc, 6 },
00066 { 0x16, 8 },{ 0x17, 9 },{ 0x6, 10 },{ 0x5, 11 },
00067 { 0x4, 11 },{ 0x59, 12 },{ 0xf, 6 },{ 0x16, 9 },
00068 { 0x5, 10 },{ 0xe, 6 },{ 0x4, 10 },{ 0x11, 7 },
00069 { 0x24, 11 },{ 0x10, 7 },{ 0x25, 11 },{ 0x13, 7 },
00070 { 0x5a, 12 },{ 0x15, 8 },{ 0x5b, 12 },{ 0x14, 8 },
00071 { 0x13, 8 },{ 0x1a, 8 },{ 0x15, 9 },{ 0x14, 9 },
00072 { 0x13, 9 },{ 0x12, 9 },{ 0x11, 9 },{ 0x26, 11 },
00073 { 0x27, 11 },{ 0x5c, 12 },{ 0x5d, 12 },{ 0x5e, 12 },
00074 { 0x5f, 12 },{ 0x3, 7 },
00075 };
00076 
00077 const int8_t ff_mpeg4_intra_level[102] = {
00078   1,  2,  3,  4,  5,  6,  7,  8,
00079   9, 10, 11, 12, 13, 14, 15, 16,
00080  17, 18, 19, 20, 21, 22, 23, 24,
00081  25, 26, 27,  1,  2,  3,  4,  5,
00082   6,  7,  8,  9, 10,  1,  2,  3,
00083   4,  5,  1,  2,  3,  4,  1,  2,
00084   3,  1,  2,  3,  1,  2,  3,  1,
00085   2,  3,  1,  2,  1,  2,  1,  1,
00086   1,  1,  1,  1,  2,  3,  4,  5,
00087   6,  7,  8,  1,  2,  3,  1,  2,
00088   1,  2,  1,  2,  1,  2,  1,  2,
00089   1,  1,  1,  1,  1,  1,  1,  1,
00090   1,  1,  1,  1,  1,  1,
00091 };
00092 
00093 const int8_t ff_mpeg4_intra_run[102] = {
00094   0,  0,  0,  0,  0,  0,  0,  0,
00095   0,  0,  0,  0,  0,  0,  0,  0,
00096   0,  0,  0,  0,  0,  0,  0,  0,
00097   0,  0,  0,  1,  1,  1,  1,  1,
00098   1,  1,  1,  1,  1,  2,  2,  2,
00099   2,  2,  3,  3,  3,  3,  4,  4,
00100   4,  5,  5,  5,  6,  6,  6,  7,
00101   7,  7,  8,  8,  9,  9, 10, 11,
00102  12, 13, 14,  0,  0,  0,  0,  0,
00103   0,  0,  0,  1,  1,  1,  2,  2,
00104   3,  3,  4,  4,  5,  5,  6,  6,
00105   7,  8,  9, 10, 11, 12, 13, 14,
00106  15, 16, 17, 18, 19, 20,
00107 };
00108 
00109 RLTable ff_mpeg4_rl_intra = {
00110     102,
00111     67,
00112     ff_mpeg4_intra_vlc,
00113     ff_mpeg4_intra_run,
00114     ff_mpeg4_intra_level,
00115 };
00116 
00117 
00118 static const uint16_t inter_rvlc[170][2]={
00119 {0x0006,  3},{0x0001,  4},{0x0004,  5},{0x001C,  7},
00120 {0x003C,  8},{0x003D,  8},{0x007C,  9},{0x00FC, 10},
00121 {0x00FD, 10},{0x01FC, 11},{0x01FD, 11},{0x03FC, 12},
00122 {0x07FC, 13},{0x07FD, 13},{0x0BFC, 13},{0x0BFD, 13},
00123 {0x0FFC, 14},{0x0FFD, 14},{0x1FFC, 15},{0x0007,  3},
00124 {0x000C,  6},{0x005C,  8},{0x007D,  9},{0x017C, 10},
00125 {0x02FC, 11},{0x03FD, 12},{0x0DFC, 13},{0x17FC, 14},
00126 {0x17FD, 14},{0x000A,  4},{0x001D,  7},{0x00BC,  9},
00127 {0x02FD, 11},{0x05FC, 12},{0x1BFC, 14},{0x1BFD, 14},
00128 {0x0005,  5},{0x005D,  8},{0x017D, 10},{0x05FD, 12},
00129 {0x0DFD, 13},{0x1DFC, 14},{0x1FFD, 15},{0x0008,  5},
00130 {0x006C,  8},{0x037C, 11},{0x0EFC, 13},{0x2FFC, 15},
00131 {0x0009,  5},{0x00BD,  9},{0x037D, 11},{0x0EFD, 13},
00132 {0x000D,  6},{0x01BC, 10},{0x06FC, 12},{0x1DFD, 14},
00133 {0x0014,  6},{0x01BD, 10},{0x06FD, 12},{0x2FFD, 15},
00134 {0x0015,  6},{0x01DC, 10},{0x0F7C, 13},{0x002C,  7},
00135 {0x01DD, 10},{0x1EFC, 14},{0x002D,  7},{0x03BC, 11},
00136 {0x0034,  7},{0x077C, 12},{0x006D,  8},{0x0F7D, 13},
00137 {0x0074,  8},{0x1EFD, 14},{0x0075,  8},{0x1F7C, 14},
00138 {0x00DC,  9},{0x1F7D, 14},{0x00DD,  9},{0x1FBC, 14},
00139 {0x00EC,  9},{0x37FC, 15},{0x01EC, 10},{0x01ED, 10},
00140 {0x01F4, 10},{0x03BD, 11},{0x03DC, 11},{0x03DD, 11},
00141 {0x03EC, 11},{0x03ED, 11},{0x03F4, 11},{0x077D, 12},
00142 {0x07BC, 12},{0x07BD, 12},{0x0FBC, 13},{0x0FBD, 13},
00143 {0x0FDC, 13},{0x0FDD, 13},{0x1FBD, 14},{0x1FDC, 14},
00144 {0x1FDD, 14},{0x37FD, 15},{0x3BFC, 15},
00145 {0x000B,  4},{0x0078,  8},{0x03F5, 11},{0x0FEC, 13},
00146 {0x1FEC, 14},{0x0012,  5},{0x00ED,  9},{0x07DC, 12},
00147 {0x1FED, 14},{0x3BFD, 15},{0x0013,  5},{0x03F8, 11},
00148 {0x3DFC, 15},{0x0018,  6},{0x07DD, 12},{0x0019,  6},
00149 {0x07EC, 12},{0x0022,  6},{0x0FED, 13},{0x0023,  6},
00150 {0x0FF4, 13},{0x0035,  7},{0x0FF5, 13},{0x0038,  7},
00151 {0x0FF8, 13},{0x0039,  7},{0x0FF9, 13},{0x0042,  7},
00152 {0x1FF4, 14},{0x0043,  7},{0x1FF5, 14},{0x0079,  8},
00153 {0x1FF8, 14},{0x0082,  8},{0x3DFD, 15},{0x0083,  8},
00154 {0x00F4,  9},{0x00F5,  9},{0x00F8,  9},{0x00F9,  9},
00155 {0x0102,  9},{0x0103,  9},{0x01F5, 10},{0x01F8, 10},
00156 {0x01F9, 10},{0x0202, 10},{0x0203, 10},{0x03F9, 11},
00157 {0x0402, 11},{0x0403, 11},{0x07ED, 12},{0x07F4, 12},
00158 {0x07F5, 12},{0x07F8, 12},{0x07F9, 12},{0x0802, 12},
00159 {0x0803, 12},{0x1002, 13},{0x1003, 13},{0x1FF9, 14},
00160 {0x2002, 14},{0x2003, 14},{0x3EFC, 15},{0x3EFD, 15},
00161 {0x3F7C, 15},{0x3F7D, 15},{0x0000, 4}
00162 };
00163 
00164 static const int8_t inter_rvlc_run[169]={
00165  0,  0,  0,  0,  0,  0,  0,  0,
00166  0,  0,  0,  0,  0,  0,  0,  0,
00167  0,  0,  0,  1,  1,  1,  1,  1,
00168  1,  1,  1,  1,  1,  2,  2,  2,
00169  2,  2,  2,  2,  3,  3,  3,  3,
00170  3,  3,  3,  4,  4,  4,  4,  4,
00171  5,  5,  5,  5,  6,  6,  6,  6,
00172  7,  7,  7,  7,  8,  8,  8,  9,
00173  9,  9, 10, 10, 11, 11, 12, 12,
00174 13, 13, 14, 14, 15, 15, 16, 16,
00175 17, 17, 18, 19, 20, 21, 22, 23,
00176 24, 25, 26, 27, 28, 29, 30, 31,
00177 32, 33, 34, 35, 36, 37, 38,
00178  0,  0,  0,  0,  0,  1,  1,  1,
00179  1,  1,  2,  2,  2,  3,  3,  4,
00180  4,  5,  5,  6,  6,  7,  7,  8,
00181  8,  9,  9, 10, 10, 11, 11, 12,
00182 12, 13, 13, 14, 15, 16, 17, 18,
00183 19, 20, 21, 22, 23, 24, 25, 26,
00184 27, 28, 29, 30, 31, 32, 33, 34,
00185 35, 36, 37, 38, 39, 40, 41, 42,
00186 43, 44,
00187 };
00188 
00189 static const int8_t inter_rvlc_level[169]={
00190  1,  2,  3,  4,  5,  6,  7,  8,
00191  9, 10, 11, 12, 13, 14, 15, 16,
00192 17, 18, 19,  1,  2,  3,  4,  5,
00193  6,  7,  8,  9, 10,  1,  2,  3,
00194  4,  5,  6,  7,  1,  2,  3,  4,
00195  5,  6,  7,  1,  2,  3,  4,  5,
00196  1,  2,  3,  4,  1,  2,  3,  4,
00197  1,  2,  3,  4,  1,  2,  3,  1,
00198  2,  3,  1,  2,  1,  2,  1,  2,
00199  1,  2,  1,  2,  1,  2,  1,  2,
00200  1,  2,  1,  1,  1,  1,  1,  1,
00201  1,  1,  1,  1,  1,  1,  1,  1,
00202  1,  1,  1,  1,  1,  1,  1,
00203  1,  2,  3,  4,  5,  1,  2,  3,
00204  4,  5,  1,  2,  3,  1,  2,  1,
00205  2,  1,  2,  1,  2,  1,  2,  1,
00206  2,  1,  2,  1,  2,  1,  2,  1,
00207  2,  1,  2,  1,  1,  1,  1,  1,
00208  1,  1,  1,  1,  1,  1,  1,  1,
00209  1,  1,  1,  1,  1,  1,  1,  1,
00210  1,  1,  1,  1,  1,  1,  1,  1,
00211  1,  1,
00212 };
00213 
00214 RLTable ff_rvlc_rl_inter = {
00215     169,
00216     103,
00217     inter_rvlc,
00218     inter_rvlc_run,
00219     inter_rvlc_level,
00220 };
00221 
00222 static const uint16_t intra_rvlc[170][2]={
00223 {0x0006,  3},{0x0007,  3},{0x000A,  4},{0x0009,  5},
00224 {0x0014,  6},{0x0015,  6},{0x0034,  7},{0x0074,  8},
00225 {0x0075,  8},{0x00DD,  9},{0x00EC,  9},{0x01EC, 10},
00226 {0x01ED, 10},{0x01F4, 10},{0x03EC, 11},{0x03ED, 11},
00227 {0x03F4, 11},{0x077D, 12},{0x07BC, 12},{0x0FBD, 13},
00228 {0x0FDC, 13},{0x07BD, 12},{0x0FDD, 13},{0x1FBD, 14},
00229 {0x1FDC, 14},{0x1FDD, 14},{0x1FFC, 15},{0x0001,  4},
00230 {0x0008,  5},{0x002D,  7},{0x006C,  8},{0x006D,  8},
00231 {0x00DC,  9},{0x01DD, 10},{0x03DC, 11},{0x03DD, 11},
00232 {0x077C, 12},{0x0FBC, 13},{0x1F7D, 14},{0x1FBC, 14},
00233 {0x0004,  5},{0x002C,  7},{0x00BC,  9},{0x01DC, 10},
00234 {0x03BC, 11},{0x03BD, 11},{0x0EFD, 13},{0x0F7C, 13},
00235 {0x0F7D, 13},{0x1EFD, 14},{0x1F7C, 14},{0x0005,  5},
00236 {0x005C,  8},{0x00BD,  9},{0x037D, 11},{0x06FC, 12},
00237 {0x0EFC, 13},{0x1DFD, 14},{0x1EFC, 14},{0x1FFD, 15},
00238 {0x000C,  6},{0x005D,  8},{0x01BD, 10},{0x03FD, 12},
00239 {0x06FD, 12},{0x1BFD, 14},{0x000D,  6},{0x007D,  9},
00240 {0x02FC, 11},{0x05FC, 12},{0x1BFC, 14},{0x1DFC, 14},
00241 {0x001C,  7},{0x017C, 10},{0x02FD, 11},{0x05FD, 12},
00242 {0x2FFC, 15},{0x001D,  7},{0x017D, 10},{0x037C, 11},
00243 {0x0DFD, 13},{0x2FFD, 15},{0x003C,  8},{0x01BC, 10},
00244 {0x0BFD, 13},{0x17FD, 14},{0x003D,  8},{0x01FD, 11},
00245 {0x0DFC, 13},{0x37FC, 15},{0x007C,  9},{0x03FC, 12},
00246 {0x00FC, 10},{0x0BFC, 13},{0x00FD, 10},{0x37FD, 15},
00247 {0x01FC, 11},{0x07FC, 13},{0x07FD, 13},{0x0FFC, 14},
00248 {0x0FFD, 14},{0x17FC, 14},{0x3BFC, 15},
00249 {0x000B,  4},{0x0078,  8},{0x03F5, 11},{0x0FEC, 13},
00250 {0x1FEC, 14},{0x0012,  5},{0x00ED,  9},{0x07DC, 12},
00251 {0x1FED, 14},{0x3BFD, 15},{0x0013,  5},{0x03F8, 11},
00252 {0x3DFC, 15},{0x0018,  6},{0x07DD, 12},{0x0019,  6},
00253 {0x07EC, 12},{0x0022,  6},{0x0FED, 13},{0x0023,  6},
00254 {0x0FF4, 13},{0x0035,  7},{0x0FF5, 13},{0x0038,  7},
00255 {0x0FF8, 13},{0x0039,  7},{0x0FF9, 13},{0x0042,  7},
00256 {0x1FF4, 14},{0x0043,  7},{0x1FF5, 14},{0x0079,  8},
00257 {0x1FF8, 14},{0x0082,  8},{0x3DFD, 15},{0x0083,  8},
00258 {0x00F4,  9},{0x00F5,  9},{0x00F8,  9},{0x00F9,  9},
00259 {0x0102,  9},{0x0103,  9},{0x01F5, 10},{0x01F8, 10},
00260 {0x01F9, 10},{0x0202, 10},{0x0203, 10},{0x03F9, 11},
00261 {0x0402, 11},{0x0403, 11},{0x07ED, 12},{0x07F4, 12},
00262 {0x07F5, 12},{0x07F8, 12},{0x07F9, 12},{0x0802, 12},
00263 {0x0803, 12},{0x1002, 13},{0x1003, 13},{0x1FF9, 14},
00264 {0x2002, 14},{0x2003, 14},{0x3EFC, 15},{0x3EFD, 15},
00265 {0x3F7C, 15},{0x3F7D, 15},{0x0000,  4}
00266 };
00267 
00268 static const int8_t intra_rvlc_run[169]={
00269  0,  0,  0,  0,  0,  0,  0,  0,
00270  0,  0,  0,  0,  0,  0,  0,  0,
00271  0,  0,  0,  0,  0,  0,  0,  0,
00272  0,  0,  0,  1,  1,  1,  1,  1,
00273  1,  1,  1,  1,  1,  1,  1,  1,
00274  2,  2,  2,  2,  2,  2,  2,  2,
00275  2,  2,  2,  3,  3,  3,  3,  3,
00276  3,  3,  3,  3,  4,  4,  4,  4,
00277  4,  4,  5,  5,  5,  5,  5,  5,
00278  6,  6,  6,  6,  6,  7,  7,  7,
00279  7,  7,  8,  8,  8,  8,  9,  9,
00280  9,  9, 10, 10, 11, 11, 12, 12,
00281 13, 14, 15, 16, 17, 18, 19,
00282  0,  0,  0,  0,  0,  1,  1,  1,
00283  1,  1,  2,  2,  2,  3,  3,  4,
00284  4,  5,  5,  6,  6,  7,  7,  8,
00285  8,  9,  9, 10, 10, 11, 11, 12,
00286 12, 13, 13, 14, 15, 16, 17, 18,
00287 19, 20, 21, 22, 23, 24, 25, 26,
00288 27, 28, 29, 30, 31, 32, 33, 34,
00289 35, 36, 37, 38, 39, 40, 41, 42,
00290 43, 44,
00291 };
00292 
00293 static const int8_t intra_rvlc_level[169]={
00294  1,  2,  3,  4,  5,  6,  7,  8,
00295  9, 10, 11, 12, 13, 14, 15, 16,
00296 17, 18, 19, 20, 21, 22, 23, 24,
00297 25, 26, 27,  1,  2,  3,  4,  5,
00298  6,  7,  8,  9, 10, 11, 12, 13,
00299  1,  2,  3,  4,  5,  6,  7,  8,
00300  9, 10, 11,  1,  2,  3,  4,  5,
00301  6,  7,  8,  9,  1,  2,  3,  4,
00302  5,  6,  1,  2,  3,  4,  5,  6,
00303  1,  2,  3,  4,  5,  1,  2,  3,
00304  4,  5,  1,  2,  3,  4,  1,  2,
00305  3,  4,  1,  2,  1,  2,  1,  2,
00306  1,  1,  1,  1,  1,  1,  1,
00307  1,  2,  3,  4,  5,  1,  2,  3,
00308  4,  5,  1,  2,  3,  1,  2,  1,
00309  2,  1,  2,  1,  2,  1,  2,  1,
00310  2,  1,  2,  1,  2,  1,  2,  1,
00311  2,  1,  2,  1,  1,  1,  1,  1,
00312  1,  1,  1,  1,  1,  1,  1,  1,
00313  1,  1,  1,  1,  1,  1,  1,  1,
00314  1,  1,  1,  1,  1,  1,  1,  1,
00315  1,  1,
00316 };
00317 
00318 RLTable ff_rvlc_rl_intra = {
00319     169,
00320     103,
00321     intra_rvlc,
00322     intra_rvlc_run,
00323     intra_rvlc_level,
00324 };
00325 
00326 const uint16_t ff_sprite_trajectory_tab[15][2] = {
00327  {0x00, 2}, {0x02, 3},  {0x03, 3},  {0x04, 3}, {0x05, 3}, {0x06, 3},
00328  {0x0E, 4}, {0x1E, 5},  {0x3E, 6},  {0x7E, 7}, {0xFE, 8},
00329  {0x1FE, 9},{0x3FE, 10},{0x7FE, 11},{0xFFE, 12},
00330 };
00331 
00332 const uint8_t ff_mb_type_b_tab[4][2] = {
00333  {1, 1}, {1, 2}, {1, 3}, {1, 4},
00334 };
00335 
00336 
00337 const int16_t ff_mpeg4_default_intra_matrix[64] = {
00338   8, 17, 18, 19, 21, 23, 25, 27,
00339  17, 18, 19, 21, 23, 25, 27, 28,
00340  20, 21, 22, 23, 24, 26, 28, 30,
00341  21, 22, 23, 24, 26, 28, 30, 32,
00342  22, 23, 24, 26, 28, 30, 32, 35,
00343  23, 24, 26, 28, 30, 32, 35, 38,
00344  25, 26, 28, 30, 32, 35, 38, 41,
00345  27, 28, 30, 32, 35, 38, 41, 45,
00346 };
00347 
00348 const int16_t ff_mpeg4_default_non_intra_matrix[64] = {
00349  16, 17, 18, 19, 20, 21, 22, 23,
00350  17, 18, 19, 20, 21, 22, 23, 24,
00351  18, 19, 20, 21, 22, 23, 24, 25,
00352  19, 20, 21, 22, 23, 24, 26, 27,
00353  20, 21, 22, 23, 25, 26, 27, 28,
00354  21, 22, 23, 24, 26, 27, 28, 30,
00355  22, 23, 24, 26, 27, 28, 30, 31,
00356  23, 24, 25, 27, 28, 30, 31, 33,
00357 };
00358 
00359 const uint8_t ff_mpeg4_y_dc_scale_table[32]={
00360 
00361     0, 8, 8, 8, 8,10,12,14,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,34,36,38,40,42,44,46
00362 };
00363 const uint8_t ff_mpeg4_c_dc_scale_table[32]={
00364 
00365     0, 8, 8, 8, 8, 9, 9,10,10,11,11,12,12,13,13,14,14,15,15,16,16,17,17,18,18,19,20,21,22,23,24,25
00366 };
00367 
00368 const uint16_t ff_mpeg4_resync_prefix[8]={
00369     0x7F00, 0x7E00, 0x7C00, 0x7800, 0x7000, 0x6000, 0x4000, 0x0000
00370 };
00371 
00372 const uint8_t ff_mpeg4_dc_threshold[8]={
00373     99, 13, 15, 17, 19, 21, 23, 0
00374 };
00375 
00376 #endif