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 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 rvlc_rl_intra = {
00319 169,
00320 103,
00321 intra_rvlc,
00322 intra_rvlc_run,
00323 intra_rvlc_level,
00324 };
00325
00326 const uint16_t 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 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 mpeg4_dc_threshold[8]={
00373 99, 13, 15, 17, 19, 21, 23, 0
00374 };
00375
00376 #endif