Libav
|
00001 /* 00002 * VC-1 and WMV3 decoder 00003 * copyright (c) 2006 Konstantin Shishkov 00004 * (c) 2005 anonymous, Alex Beregszaszi, Michael Niedermayer 00005 * 00006 * This file is part of FFmpeg. 00007 * 00008 * FFmpeg is free software; you can redistribute it and/or 00009 * modify it under the terms of the GNU Lesser General Public 00010 * License as published by the Free Software Foundation; either 00011 * version 2.1 of the License, or (at your option) any later version. 00012 * 00013 * FFmpeg is distributed in the hope that it will be useful, 00014 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00015 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00016 * Lesser General Public License for more details. 00017 * 00018 * You should have received a copy of the GNU Lesser General Public 00019 * License along with FFmpeg; if not, write to the Free Software 00020 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 00021 */ 00022 00028 #include "avcodec.h" 00029 #include "vc1.h" 00030 #include "vc1data.h" 00031 00033 const int ff_vc1_ttblk_to_tt[3][8] = { 00034 { TT_8X4, TT_4X8, TT_8X8, TT_4X4, TT_8X4_TOP, TT_8X4_BOTTOM, TT_4X8_RIGHT, TT_4X8_LEFT }, 00035 { TT_8X8, TT_4X8_RIGHT, TT_4X8_LEFT, TT_4X4, TT_8X4, TT_4X8, TT_8X4_BOTTOM, TT_8X4_TOP }, 00036 { TT_8X8, TT_4X8, TT_4X4, TT_8X4_BOTTOM, TT_4X8_RIGHT, TT_4X8_LEFT, TT_8X4, TT_8X4_TOP } 00037 }; 00038 00039 const int ff_vc1_ttfrm_to_tt[4] = { TT_8X8, TT_8X4, TT_4X8, TT_4X4 }; 00040 00042 const uint8_t ff_vc1_mv_pmode_table[2][5] = { 00043 { MV_PMODE_1MV_HPEL_BILIN, MV_PMODE_1MV, MV_PMODE_1MV_HPEL, MV_PMODE_INTENSITY_COMP, MV_PMODE_MIXED_MV }, 00044 { MV_PMODE_1MV, MV_PMODE_MIXED_MV, MV_PMODE_1MV_HPEL, MV_PMODE_INTENSITY_COMP, MV_PMODE_1MV_HPEL_BILIN } 00045 }; 00046 const uint8_t ff_vc1_mv_pmode_table2[2][4] = { 00047 { MV_PMODE_1MV_HPEL_BILIN, MV_PMODE_1MV, MV_PMODE_1MV_HPEL, MV_PMODE_MIXED_MV }, 00048 { MV_PMODE_1MV, MV_PMODE_MIXED_MV, MV_PMODE_1MV_HPEL, MV_PMODE_1MV_HPEL_BILIN } 00049 }; 00050 00051 const int ff_vc1_fps_nr[5] = { 24, 25, 30, 50, 60 }, 00052 ff_vc1_fps_dr[2] = { 1000, 1001 }; 00053 const uint8_t ff_vc1_pquant_table[3][32] = { 00054 { /* Implicit quantizer */ 00055 0, 1, 2, 3, 4, 5, 6, 7, 8, 6, 7, 8, 9, 10, 11, 12, 00056 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27, 29, 31 00057 }, 00058 { /* Explicit quantizer, pquantizer uniform */ 00059 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 00060 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 00061 }, 00062 { /* Explicit quantizer, pquantizer non-uniform */ 00063 0, 1, 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 00064 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 31 00065 } 00066 }; 00067 00072 #define VC1_BFRACTION_VLC_BITS 7 00073 VLC ff_vc1_bfraction_vlc; 00074 #define VC1_IMODE_VLC_BITS 4 00075 VLC ff_vc1_imode_vlc; 00076 #define VC1_NORM2_VLC_BITS 3 00077 VLC ff_vc1_norm2_vlc; 00078 #define VC1_NORM6_VLC_BITS 9 00079 VLC ff_vc1_norm6_vlc; 00080 /* Could be optimized, one table only needs 8 bits */ 00081 #define VC1_TTMB_VLC_BITS 9 //12 00082 VLC ff_vc1_ttmb_vlc[3]; 00083 #define VC1_MV_DIFF_VLC_BITS 9 //15 00084 VLC ff_vc1_mv_diff_vlc[4]; 00085 #define VC1_CBPCY_P_VLC_BITS 9 //14 00086 VLC ff_vc1_cbpcy_p_vlc[4]; 00087 #define VC1_4MV_BLOCK_PATTERN_VLC_BITS 6 00088 VLC ff_vc1_4mv_block_pattern_vlc[4]; 00089 #define VC1_TTBLK_VLC_BITS 5 00090 VLC ff_vc1_ttblk_vlc[3]; 00091 #define VC1_SUBBLKPAT_VLC_BITS 6 00092 VLC ff_vc1_subblkpat_vlc[3]; 00093 00094 VLC ff_vc1_ac_coeff_table[8]; 00096 00097 00098 #if B_FRACTION_DEN==840 //original bfraction from vc9data.h, not conforming to standard 00099 /* bfraction is fractional, we scale to the GCD 3*5*7*8 = 840 */ 00100 const int16_t ff_vc1_bfraction_lut[23] = { 00101 420 /*1/2*/, 280 /*1/3*/, 560 /*2/3*/, 210 /*1/4*/, 00102 630 /*3/4*/, 168 /*1/5*/, 336 /*2/5*/, 00103 504 /*3/5*/, 672 /*4/5*/, 140 /*1/6*/, 700 /*5/6*/, 00104 120 /*1/7*/, 240 /*2/7*/, 360 /*3/7*/, 480 /*4/7*/, 00105 600 /*5/7*/, 720 /*6/7*/, 105 /*1/8*/, 315 /*3/8*/, 00106 525 /*5/8*/, 735 /*7/8*/, 00107 -1 /*inv.*/, 0 /*BI fm*/ 00108 }; 00109 #else 00110 /* pre-computed scales for all bfractions and base=256 */ 00111 const int16_t ff_vc1_bfraction_lut[23] = { 00112 128 /*1/2*/, 85 /*1/3*/, 170 /*2/3*/, 64 /*1/4*/, 00113 192 /*3/4*/, 51 /*1/5*/, 102 /*2/5*/, 00114 153 /*3/5*/, 204 /*4/5*/, 43 /*1/6*/, 215 /*5/6*/, 00115 37 /*1/7*/, 74 /*2/7*/, 111 /*3/7*/, 148 /*4/7*/, 00116 185 /*5/7*/, 222 /*6/7*/, 32 /*1/8*/, 96 /*3/8*/, 00117 160 /*5/8*/, 224 /*7/8*/, 00118 -1 /*inv.*/, 0 /*BI fm*/ 00119 }; 00120 #endif 00121 00122 const uint8_t ff_vc1_bfraction_bits[23] = { 00123 3, 3, 3, 3, 00124 3, 3, 3, 00125 7, 7, 7, 7, 00126 7, 7, 7, 7, 00127 7, 7, 7, 7, 00128 7, 7, 00129 7, 7 00130 }; 00131 const uint8_t ff_vc1_bfraction_codes[23] = { 00132 0, 1, 2, 3, 00133 4, 5, 6, 00134 112, 113, 114, 115, 00135 116, 117, 118, 119, 00136 120, 121, 122, 123, 00137 124, 125, 00138 126, 127 00139 }; 00140 00141 //Same as H.264 00142 const AVRational ff_vc1_pixel_aspect[16]={ 00143 {0, 1}, 00144 {1, 1}, 00145 {12, 11}, 00146 {10, 11}, 00147 {16, 11}, 00148 {40, 33}, 00149 {24, 11}, 00150 {20, 11}, 00151 {32, 11}, 00152 {80, 33}, 00153 {18, 11}, 00154 {15, 11}, 00155 {64, 33}, 00156 {160, 99}, 00157 {0, 1}, 00158 {0, 1} 00159 }; 00160 00161 /* BitPlane IMODE - such a small table... */ 00162 const uint8_t ff_vc1_imode_codes[7] = { 00163 0, 2, 1, 3, 1, 2, 3 00164 }; 00165 const uint8_t ff_vc1_imode_bits[7] = { 00166 4, 2, 3, 2, 4, 3, 3 00167 }; 00168 00169 /* Normal-2 imode */ 00170 const uint8_t ff_vc1_norm2_codes[4] = { 00171 0, 4, 5, 3 00172 }; 00173 const uint8_t ff_vc1_norm2_bits[4] = { 00174 1, 3, 3, 2 00175 }; 00176 00177 const uint16_t ff_vc1_norm6_codes[64] = { 00178 0x001, 0x002, 0x003, 0x000, 0x004, 0x001, 0x002, 0x047, 0x005, 0x003, 0x004, 0x04B, 0x005, 0x04D, 0x04E, 0x30E, 00179 0x006, 0x006, 0x007, 0x053, 0x008, 0x055, 0x056, 0x30D, 0x009, 0x059, 0x05A, 0x30C, 0x05C, 0x30B, 0x30A, 0x037, 00180 0x007, 0x00A, 0x00B, 0x043, 0x00C, 0x045, 0x046, 0x309, 0x00D, 0x049, 0x04A, 0x308, 0x04C, 0x307, 0x306, 0x036, 00181 0x00E, 0x051, 0x052, 0x305, 0x054, 0x304, 0x303, 0x035, 0x058, 0x302, 0x301, 0x034, 0x300, 0x033, 0x032, 0x007, 00182 }; 00183 00184 const uint8_t ff_vc1_norm6_bits[64] = { 00185 1, 4, 4, 8, 4, 8, 8, 10, 4, 8, 8, 10, 8, 10, 10, 13, 00186 4, 8, 8, 10, 8, 10, 10, 13, 8, 10, 10, 13, 10, 13, 13, 9, 00187 4, 8, 8, 10, 8, 10, 10, 13, 8, 10, 10, 13, 10, 13, 13, 9, 00188 8, 10, 10, 13, 10, 13, 13, 9, 10, 13, 13, 9, 13, 9, 9, 6, 00189 }; 00190 #if 0 00191 /* Normal-6 imode */ 00192 const uint8_t ff_vc1_norm6_spec[64][5] = { 00193 { 0, 1, 1 }, 00194 { 1, 2, 4 }, 00195 { 2, 3, 4 }, 00196 { 3, 0, 8 }, 00197 { 4, 4, 4 }, 00198 { 5, 1, 8 }, 00199 { 6, 2, 8 }, 00200 { 7, 2, 5, 7, 5 }, 00201 { 8, 5, 4 }, 00202 { 9, 3, 8 }, 00203 {10, 4, 8 }, 00204 {11, 2, 5, 11, 5 }, 00205 {12, 5, 8 }, 00206 {13, 2, 5, 13, 5 }, 00207 {14, 2, 5, 14, 5 }, 00208 {15, 3, 5, 14, 8 }, 00209 {16, 6, 4 }, 00210 {17, 6, 8 }, 00211 {18, 7, 8 }, 00212 {19, 2, 5, 19, 5 }, 00213 {20, 8, 8 }, 00214 {21, 2, 5, 21, 5 }, 00215 {22, 2, 5, 22, 5 }, 00216 {23, 3, 5, 13, 8 }, 00217 {24, 9, 8 }, 00218 {25, 2, 5, 25, 5 }, 00219 {26, 2, 5, 26, 5 }, 00220 {27, 3, 5, 12, 8 }, 00221 {28, 2, 5, 28, 5 }, 00222 {29, 3, 5, 11, 8 }, 00223 {30, 3, 5, 10, 8 }, 00224 {31, 3, 5, 7, 4 }, 00225 {32, 7, 4 }, 00226 {33, 10, 8 }, 00227 {34, 11, 8 }, 00228 {35, 2, 5, 3, 5 }, 00229 {36, 12, 8 }, 00230 {37, 2, 5, 5, 5 }, 00231 {38, 2, 5, 6, 5 }, 00232 {39, 3, 5, 9, 8 }, 00233 {40, 13, 8 }, 00234 {41, 2, 5, 9, 5 }, 00235 {42, 2, 5, 10, 5 }, 00236 {43, 3, 5, 8, 8 }, 00237 {44, 2, 5, 12, 5 }, 00238 {45, 3, 5, 7, 8 }, 00239 {46, 3, 5, 6, 8 }, 00240 {47, 3, 5, 6, 4 }, 00241 {48, 14, 8 }, 00242 {49, 2, 5, 17, 5 }, 00243 {50, 2, 5, 18, 5 }, 00244 {51, 3, 5, 5, 8 }, 00245 {52, 2, 5, 20, 5 }, 00246 {53, 3, 5, 4, 8 }, 00247 {54, 3, 5, 3, 8 }, 00248 {55, 3, 5, 5, 4 }, 00249 {56, 2, 5, 24, 5 }, 00250 {57, 3, 5, 2, 8 }, 00251 {58, 3, 5, 1, 8 }, 00252 {59, 3, 5, 4, 4 }, 00253 {60, 3, 5, 0, 8 }, 00254 {61, 3, 5, 3, 4 }, 00255 {62, 3, 5, 2, 4 }, 00256 {63, 3, 5, 1, 1 }, 00257 }; 00258 #endif 00259 00260 /* 4MV Block pattern VLC tables */ 00261 const uint8_t ff_vc1_4mv_block_pattern_codes[4][16] = { 00262 { 14, 58, 59, 25, 12, 26, 15, 15, 13, 24, 27, 0, 28, 1, 2, 2}, 00263 { 8, 18, 19, 4, 20, 5, 30, 11, 21, 31, 6, 12, 7, 13, 14, 0}, 00264 { 15, 6, 7, 2, 8, 3, 28, 9, 10, 29, 4, 11, 5, 12, 13, 0}, 00265 { 0, 11, 12, 4, 13, 5, 30, 16, 14, 31, 6, 17, 7, 18, 19, 10} 00266 }; 00267 const uint8_t ff_vc1_4mv_block_pattern_bits[4][16] = { 00268 { 5, 6, 6, 5, 5, 5, 5, 4, 5, 5, 5, 3, 5, 3, 3, 2}, 00269 { 4, 5, 5, 4, 5, 4, 5, 4, 5, 5, 4, 4, 4, 4, 4, 2}, 00270 { 4, 4, 4, 4, 4, 4, 5, 4, 4, 5, 4, 4, 4, 4, 4, 3}, 00271 { 2, 4, 4, 4, 4, 4, 5, 5, 4, 5, 4, 5, 4, 5, 5, 4} 00272 }; 00273 00274 const uint8_t wmv3_dc_scale_table[32]={ 00275 0, 2, 4, 8, 8, 8, 9, 9,10,10,11,11,12,12,13,13,14,14,15,15,16,16,17,17,18,18,19,19,20,20,21,21 00276 }; 00277 00278 /* P-Picture CBPCY VLC tables */ 00279 #if 1 // Looks like original tables are not conforming to standard at all. Are they used for old WMV? 00280 const uint16_t ff_vc1_cbpcy_p_codes[4][64] = { 00281 { 00282 0, 6, 15, 13, 13, 11, 3, 13, 5, 8, 49, 10, 12, 114, 102, 119, 00283 1, 54, 96, 8, 10, 111, 5, 15, 12, 10, 2, 12, 13, 115, 53, 63, 00284 1, 7, 1, 7, 14, 12, 4, 14, 1, 9, 97, 11, 7, 58, 52, 62, 00285 4, 103, 1, 9, 11, 56, 101, 118, 4, 110, 100, 30, 2, 5, 4, 3 00286 }, 00287 { 00288 0, 9, 1, 18, 5, 14, 237, 26, 3, 121, 3, 22, 13, 16, 6, 30, 00289 2, 10, 1, 20, 12, 241, 5, 28, 16, 12, 3, 24, 28, 124, 239, 247, 00290 1, 240, 1, 19, 18, 15, 4, 27, 1, 122, 2, 23, 1, 17, 7, 31, 00291 1, 11, 2, 21, 19, 246, 238, 29, 17, 13, 236, 25, 58, 63, 8, 125 00292 }, 00293 { 00294 0, 201, 25, 231, 5, 221, 1, 3, 2, 414, 2, 241, 16, 225, 195, 492, 00295 2, 412, 1, 240, 7, 224, 98, 245, 1, 220, 96, 5, 9, 230, 101, 247, 00296 1, 102, 1, 415, 24, 3, 2, 244, 3, 54, 3, 484, 17, 114, 200, 493, 00297 3, 413, 1, 4, 13, 113, 99, 485, 4, 111, 194, 243, 5, 29, 26, 31 00298 }, 00299 { 00300 0, 28, 12, 44, 3, 36, 20, 52, 2, 32, 16, 48, 8, 40, 24, 28, 00301 1, 30, 14, 46, 6, 38, 22, 54, 3, 34, 18, 50, 10, 42, 26, 30, 00302 1, 29, 13, 45, 5, 37, 21, 53, 2, 33, 17, 49, 9, 41, 25, 29, 00303 1, 31, 15, 47, 7, 39, 23, 55, 4, 35, 19, 51, 11, 43, 27, 31 00304 } 00305 }; 00306 00307 const uint8_t ff_vc1_cbpcy_p_bits[4][64] = { 00308 { 00309 13, 13, 7, 13, 7, 13, 13, 12, 6, 13, 7, 12, 6, 8, 8, 8, 00310 5, 7, 8, 12, 6, 8, 13, 12, 7, 13, 13, 12, 6, 8, 7, 7, 00311 6, 13, 8, 12, 7, 13, 13, 12, 7, 13, 8, 12, 5, 7, 7, 7, 00312 6, 8, 13, 12, 6, 7, 8, 8, 5, 8, 8, 6, 3, 3, 3, 2 00313 }, 00314 { 00315 14, 13, 8, 13, 3, 13, 8, 13, 3, 7, 8, 13, 4, 13, 13, 13, 00316 3, 13, 13, 13, 4, 8, 13, 13, 5, 13, 13, 13, 5, 7, 8, 8, 00317 3, 8, 14, 13, 5, 13, 13, 13, 4, 7, 13, 13, 6, 13, 13, 13, 00318 5, 13, 8, 13, 5, 8, 8, 13, 5, 13, 8, 13, 6, 6, 13, 7 00319 }, 00320 { 00321 13, 8, 6, 8, 4, 8, 13, 12, 4, 9, 8, 8, 5, 8, 8, 9, 00322 5, 9, 10, 8, 4, 8, 7, 8, 6, 8, 7, 13, 4, 8, 7, 8, 00323 5, 7, 8, 9, 6, 13, 13, 8, 4, 6, 8, 9, 5, 7, 8, 9, 00324 5, 9, 9, 13, 5, 7, 7, 9, 4, 7, 8, 8, 3, 5, 5, 5 00325 }, 00326 { 00327 9, 9, 9, 9, 2, 9, 9, 9, 2, 9, 9, 9, 9, 9, 9, 8, 00328 3, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 00329 2, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 00330 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8 00331 } 00332 }; 00333 #else 00334 const uint16_t ff_vc1_cbpcy_p_codes[4][64] = { 00335 { 00336 0, 1, 1, 4, 5, 1, 12, 4, 13, 14, 10, 11, 12, 7, 13, 2, 00337 15, 1, 96, 1, 49, 97, 2, 100, 3, 4, 5, 101, 102, 52, 53, 4, 00338 6, 7, 54, 103, 8, 9, 10, 110, 11, 12, 111, 56, 114, 58, 115, 5, 00339 13, 7, 8, 9, 10, 11, 12, 30, 13, 14, 15, 118, 119, 62, 63, 3 00340 }, 00341 { 00342 0, 1, 2, 1, 3, 1, 16, 17, 5, 18, 12, 19, 13, 1, 28, 58, 00343 1, 1, 1, 2, 3, 2, 3, 236, 237, 4, 5, 238, 6, 7, 239, 8, 00344 9, 240, 10, 11, 121, 122, 12, 13, 14, 15, 241, 246, 16, 17, 124, 63, 00345 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 247, 125 00346 }, 00347 { 00348 0, 1, 2, 3, 2, 3, 1, 4, 5, 24, 7, 13, 16, 17, 9, 5, 00349 25, 1, 1, 1, 2, 3, 96, 194, 1, 2, 98, 99, 195, 200, 101, 26, 00350 201, 102, 412, 413, 414, 54, 220, 111, 221, 3, 224, 113, 225, 114, 230, 29, 00351 231, 415, 240, 4, 241, 484, 5, 243, 3, 244, 245, 485, 492, 493, 247, 31 00352 }, 00353 { 00354 0, 1, 1, 1, 2, 2, 3, 4, 3, 5, 6, 7, 8, 9, 10, 11, 00355 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 00356 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 00357 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 28, 29, 30, 31 00358 } 00359 }; 00360 const uint8_t ff_vc1_cbpcy_p_bits[4][64] = { 00361 { 00362 13, 6, 5, 6, 6, 7, 7, 5, 7, 7, 6, 6, 6, 5, 6, 3, 00363 7, 8, 8, 13, 7, 8, 13, 8, 13, 13, 13, 8, 8, 7, 7, 3, 00364 13, 13, 7, 8, 13, 13, 13, 8, 13, 13, 8, 7, 8, 7, 8, 3, 00365 13, 12, 12, 12, 12, 12, 12, 6, 12, 12, 12, 8, 8, 7, 7, 2 00366 }, 00367 { 00368 14, 3, 3, 5, 3, 4, 5, 5, 3, 5, 4, 5, 4, 6, 5, 6, 00369 8, 14, 13, 8, 8, 13, 13, 8, 8, 13, 13, 8, 13, 13, 8, 13, 00370 13, 8, 13, 13, 7, 7, 13, 13, 13, 13, 8, 8, 13, 13, 7, 6, 00371 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 8, 7 00372 }, 00373 { 00374 13, 5, 5, 5, 4, 4, 6, 4, 4, 6, 4, 5, 5, 5, 4, 3, 00375 6, 8, 10, 9, 8, 8, 7, 8, 13, 13, 7, 7, 8, 8, 7, 5, 00376 8, 7, 9, 9, 9, 6, 8, 7, 8, 13, 8, 7, 8, 7, 8, 5, 00377 8, 9, 8, 13, 8, 9, 13, 8, 12, 8, 8, 9, 9, 9, 8, 5 00378 }, 00379 { 00380 9, 2, 3, 9, 2, 9, 9, 9, 2, 9, 9, 9, 9, 9, 9, 9, 00381 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 00382 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 00383 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 8, 8, 8 00384 } 00385 }; 00386 #endif 00387 00388 /* MacroBlock Transform Type: 7.1.3.11, p89 00389 * 8x8:B 00390 * 8x4:B:btm 8x4:B:top 8x4:B:both, 00391 * 4x8:B:right 4x8:B:left 4x8:B:both 00392 * 4x4:B 8x8:MB 00393 * 8x4:MB:btm 8x4:MB:top 8x4,MB,both 00394 * 4x8,MB,right 4x8,MB,left 00395 * 4x4,MB */ 00396 const uint16_t ff_vc1_ttmb_codes[3][16] = { 00397 { 00398 0x0003, 00399 0x002E, 0x005F, 0x0000, 00400 0x0016, 0x0015, 0x0001, 00401 0x0004, 0x0014, 00402 0x02F1, 0x0179, 0x017B, 00403 0x0BC0, 0x0BC1, 0x05E1, 00404 0x017A 00405 }, 00406 { 00407 0x0006, 00408 0x0006, 0x0003, 0x0007, 00409 0x000F, 0x000E, 0x0000, 00410 0x0002, 0x0002, 00411 0x0014, 0x0011, 0x000B, 00412 0x0009, 0x0021, 0x0015, 00413 0x0020 00414 }, 00415 { 00416 0x0006, 00417 0x0000, 0x000E, 0x0005, 00418 0x0002, 0x0003, 0x0003, 00419 0x000F, 0x0002, 00420 0x0081, 0x0021, 0x0009, 00421 0x0101, 0x0041, 0x0011, 00422 0x0100 00423 } 00424 }; 00425 00426 const uint8_t ff_vc1_ttmb_bits[3][16] = { 00427 { 00428 2, 00429 6, 7, 2, 00430 5, 5, 2, 00431 3, 5, 00432 10, 9, 9, 00433 12, 12, 11, 00434 9 00435 }, 00436 { 00437 3, 00438 4, 4, 4, 00439 4, 4, 3, 00440 3, 2, 00441 7, 7, 6, 00442 6, 8, 7, 00443 8 00444 }, 00445 { 00446 3, 00447 3, 4, 5, 00448 3, 3, 4, 00449 4, 2, 00450 10, 8, 6, 00451 11, 9, 7, 00452 11 00453 } 00454 }; 00455 00456 /* TTBLK (Transform Type per Block) tables */ 00457 const uint8_t ff_vc1_ttblk_codes[3][8] = { 00458 { 0, 1, 3, 5, 16, 17, 18, 19}, 00459 { 3, 0, 1, 2, 3, 5, 8, 9}, 00460 { 1, 0, 1, 4, 6, 7, 10, 11} 00461 }; 00462 const uint8_t ff_vc1_ttblk_bits[3][8] = { 00463 { 2, 2, 2, 3, 5, 5, 5, 5}, 00464 { 2, 3, 3, 3, 3, 3, 4, 4}, 00465 { 2, 3, 3, 3, 3, 3, 4, 4} 00466 }; 00467 00468 /* SUBBLKPAT tables, p93-94, reordered */ 00469 const uint8_t ff_vc1_subblkpat_codes[3][15] = { 00470 { 14, 12, 7, 11, 9, 26, 2, 10, 27, 8, 0, 6, 1, 15, 1}, 00471 { 14, 0, 8, 15, 10, 4, 23, 13, 5, 9, 25, 3, 24, 22, 1}, 00472 { 5, 6, 2, 2, 8, 0, 28, 3, 1, 3, 29, 1, 19, 18, 15} 00473 }; 00474 const uint8_t ff_vc1_subblkpat_bits[3][15] = { 00475 { 5, 5, 5, 5, 5, 6, 4, 5, 6, 5, 4, 5, 4, 5, 1}, 00476 { 4, 3, 4, 4, 4, 5, 5, 4, 5, 4, 5, 4, 5, 5, 2}, 00477 { 3, 3, 4, 3, 4, 5, 5, 3, 5, 4, 5, 4, 5, 5, 4} 00478 }; 00479 00480 /* MV differential tables, p265 */ 00481 const uint16_t ff_vc1_mv_diff_codes[4][73] = { 00482 { 00483 0, 2, 3, 8, 576, 3, 2, 6, 00484 5, 577, 578, 7, 8, 9, 40, 19, 00485 37, 82, 21, 22, 23, 579, 580, 166, 00486 96, 167, 49, 194, 195, 581, 582, 583, 00487 292, 293, 294, 13, 2, 7, 24, 50, 00488 102, 295, 13, 7, 8, 18, 50, 103, 00489 38, 20, 21, 22, 39, 204, 103, 23, 00490 24, 25, 104, 410, 105, 106, 107, 108, 00491 109, 220, 411, 442, 222, 443, 446, 447, 00492 7 /* 73 elements */ 00493 }, 00494 { 00495 0, 4, 5, 3, 4, 3, 4, 5, 00496 20, 6, 21, 44, 45, 46, 3008, 95, 00497 112, 113, 57, 3009, 3010, 116, 117, 3011, 00498 118, 3012, 3013, 3014, 3015, 3016, 3017, 3018, 00499 3019, 3020, 3021, 3022, 1, 4, 15, 160, 00500 161, 41, 6, 11, 42, 162, 43, 119, 00501 56, 57, 58, 163, 236, 237, 3023, 119, 00502 120, 242, 122, 486, 1512, 487, 246, 494, 00503 1513, 495, 1514, 1515, 1516, 1517, 1518, 1519, 00504 31 /* 73 elements */ 00505 }, 00506 { 00507 0, 512, 513, 514, 515, 2, 3, 258, 00508 259, 260, 261, 262, 263, 264, 265, 266, 00509 267, 268, 269, 270, 271, 272, 273, 274, 00510 275, 276, 277, 278, 279, 280, 281, 282, 00511 283, 284, 285, 286, 1, 5, 287, 288, 00512 289, 290, 6, 7, 291, 292, 293, 294, 00513 295, 296, 297, 298, 299, 300, 301, 302, 00514 303, 304, 305, 306, 307, 308, 309, 310, 00515 311, 312, 313, 314, 315, 316, 317, 318, 00516 319 /* 73 elements */ 00517 }, 00518 { 00519 0, 1, 1, 2, 3, 4, 1, 5, 00520 4, 3, 5, 8, 6, 9, 10, 11, 00521 12, 7, 104, 14, 105, 4, 10, 15, 00522 11, 6, 14, 8, 106, 107, 108, 15, 00523 109, 9, 55, 10, 1, 2, 1, 2, 00524 3, 12, 6, 2, 6, 7, 28, 7, 00525 15, 8, 5, 18, 29, 152, 77, 24, 00526 25, 26, 39, 108, 13, 109, 55, 56, 00527 57, 116, 11, 153, 234, 235, 118, 119, 00528 15 /* 73 elements */ 00529 } 00530 }; 00531 const uint8_t ff_vc1_mv_diff_bits[4][73] = { 00532 { 00533 6, 7, 7, 8, 14, 6, 5, 6, 7, 14, 14, 6, 6, 6, 8, 9, 00534 10, 9, 7, 7, 7, 14, 14, 10, 9, 10, 8, 10, 10, 14, 14, 14, 00535 13, 13, 13, 6, 3, 5, 6, 8, 9, 13, 5, 4, 4, 5, 7, 9, 00536 6, 5, 5, 5, 6, 9, 8, 5, 5, 5, 7, 10, 7, 7, 7, 7, 00537 7, 8, 10, 9, 8, 9, 9, 9, 3 /* 73 elements */ 00538 }, 00539 { 00540 5, 7, 7, 6, 6, 5, 5, 6, 7, 5, 7, 8, 8, 8, 14, 9, 00541 9, 9, 8, 14, 14, 9, 9, 14, 9, 14, 14, 14, 14, 14, 14, 14, 00542 14, 14, 14, 14, 2, 3, 6, 8, 8, 6, 3, 4, 6, 8, 6, 9, 00543 6, 6, 6, 8, 8, 8, 14, 7, 7, 8, 7, 9, 13, 9, 8, 9, 00544 13, 9, 13, 13, 13, 13, 13, 13, 5 /* 73 elements */ 00545 00546 }, 00547 { 00548 3, 12, 12, 12, 12, 3, 4, 11, 11, 11, 11, 11, 11, 11, 11, 11, 00549 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 00550 11, 11, 11, 11, 1, 5, 11, 11, 11, 11, 4, 4, 11, 11, 11, 11, 00551 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 00552 11, 11, 11, 11, 11, 11, 11, 11, 11 /* 73 elements */ 00553 }, 00554 { 00555 15, 11, 15, 15, 15, 15, 12, 15, 12, 11, 12, 12, 15, 12, 12, 12, 00556 12, 15, 15, 12, 15, 10, 11, 12, 11, 10, 11, 10, 15, 15, 15, 11, 00557 15, 10, 14, 10, 4, 4, 5, 7, 8, 9, 5, 3, 4, 5, 6, 8, 00558 5, 4, 3, 5, 6, 8, 7, 5, 5, 5, 6, 7, 9, 7, 6, 6, 00559 6, 7, 10, 8, 8, 8, 7, 7, 4 /* 73 elements */ 00560 } 00561 }; 00562 00563 /* DC differentials low+hi-mo, p217 are the same as in msmpeg4data .h */ 00564 00565 /* Table 232 */ 00566 const int8_t ff_vc1_simple_progressive_4x4_zz [16] = 00567 { 00568 0, 8, 16, 1, 00569 9, 24, 17, 2, 00570 10, 18, 25, 3, 00571 11, 26, 19, 27 00572 }; 00573 00574 const int8_t ff_vc1_adv_progressive_8x4_zz [32] = /* Table 233 */ 00575 { 00576 0, 8, 1, 16, 2, 9, 10, 3, 00577 24, 17, 4, 11, 18, 12, 5, 19, 00578 25, 13, 20, 26, 27, 6, 21, 28, 00579 14, 22, 29, 7, 30, 15, 23, 31 00580 }; 00581 00582 const int8_t ff_vc1_adv_progressive_4x8_zz [32] = /* Table 234 */ 00583 { 00584 0, 1, 8, 2, 00585 9, 16, 17, 24, 00586 10, 32, 25, 18, 00587 40, 3, 33, 26, 00588 48, 11, 56, 41, 00589 34, 49, 57, 42, 00590 19, 50, 27, 58, 00591 35, 43, 51, 59 00592 }; 00593 00594 const int8_t ff_vc1_adv_interlaced_8x8_zz [64] = /* Table 235 */ 00595 { 00596 0, 8, 1, 16, 24, 9, 2, 32, 00597 40, 48, 56, 17, 10, 3, 25, 18, 00598 11, 4, 33, 41, 49, 57, 26, 34, 00599 42, 50, 58, 19, 12, 5, 27, 20, 00600 13, 6, 35, 28, 21, 14, 7, 15, 00601 22, 29, 36, 43, 51, 59, 60, 52, 00602 44, 37, 30, 23, 31, 38, 45, 53, 00603 61, 62, 54, 46, 39, 47, 55, 63 00604 }; 00605 00606 const int8_t ff_vc1_adv_interlaced_8x4_zz [32] = /* Table 236 */ 00607 { 00608 0, 8, 16, 24, 1, 9, 2, 17, 00609 25, 10, 3, 18, 26, 4, 11, 19, 00610 12, 5, 13, 20, 27, 6, 21, 28, 00611 14, 22, 29, 7, 30, 15, 23, 31 00612 }; 00613 00614 const int8_t ff_vc1_adv_interlaced_4x8_zz [32] = /* Table 237 */ 00615 { 00616 0, 1, 2, 8, 00617 16, 9, 24, 17, 00618 10, 3, 32, 40, 00619 48, 56, 25, 18, 00620 33, 26, 41, 34, 00621 49, 57, 11, 42, 00622 19, 50, 27, 58, 00623 35, 43, 51, 59 00624 }; 00625 00626 const int8_t ff_vc1_adv_interlaced_4x4_zz [16] = /* Table 238 */ 00627 { 00628 0, 8, 16, 24, 00629 1, 9, 17, 2, 00630 25, 10, 18, 3, 00631 26, 11, 19, 27 00632 }; 00633 00634 00635 /* DQScale as specified in 8.1.3.9 - almost identical to 0x40000/i */ 00636 const int32_t ff_vc1_dqscale[63] = { 00637 0x40000, 0x20000, 0x15555, 0x10000, 0xCCCD, 0xAAAB, 0x9249, 0x8000, 00638 0x71C7, 0x6666, 0x5D17, 0x5555, 0x4EC5, 0x4925, 0x4444, 0x4000, 00639 0x3C3C, 0x38E4, 0x35E5, 0x3333, 0x30C3, 0x2E8C, 0x2C86, 0x2AAB, 00640 0x28F6, 0x2762, 0x25ED, 0x2492, 0x234F, 0x2222, 0x2108, 0x2000, 00641 0x1F08, 0x1E1E, 0x1D42, 0x1C72, 0x1BAD, 0x1AF3, 0x1A42, 0x199A, 00642 0x18FA, 0x1862, 0x17D0, 0x1746, 0x16C1, 0x1643, 0x15CA, 0x1555, 00643 0x14E6, 0x147B, 0x1414, 0x13B1, 0x1352, 0x12F7, 0x129E, 0x1249, 00644 0x11F7, 0x11A8, 0x115B, 0x1111, 0x10C9, 0x1084, 0x1000 00645 };