1 /* 2 * VC-1 and WMV3 decoder 3 * copyright (c) 2011 Mashiat Sarker Shakkhar 4 * copyright (c) 2006 Konstantin Shishkov 5 * (c) 2005 anonymous, Alex Beregszaszi, Michael Niedermayer 6 * 7 * This file is part of FFmpeg. 8 * 9 * FFmpeg is free software; you can redistribute it and/or 10 * modify it under the terms of the GNU Lesser General Public 11 * License as published by the Free Software Foundation; either 12 * version 2.1 of the License, or (at your option) any later version. 13 * 14 * FFmpeg is distributed in the hope that it will be useful, 15 * but WITHOUT ANY WARRANTY; without even the implied warranty of 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 17 * Lesser General Public License for more details. 18 * 19 * You should have received a copy of the GNU Lesser General Public 20 * License along with FFmpeg; if not, write to the Free Software 21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 22 */ 23 24 /** 25 * @file 26 * VC-1 tables. 27 */ 28 29 #include "avcodec.h" 30 #include "vc1.h" 31 #include "vc1data.h" 32 33 /** Table for conversion between TTBLK and TTMB */ 34 const int ff_vc1_ttblk_to_tt[3][8] = { 35 { TT_8X4, TT_4X8, TT_8X8, TT_4X4, TT_8X4_TOP, TT_8X4_BOTTOM, TT_4X8_RIGHT, TT_4X8_LEFT }, 36 { TT_8X8, TT_4X8_RIGHT, TT_4X8_LEFT, TT_4X4, TT_8X4, TT_4X8, TT_8X4_BOTTOM, TT_8X4_TOP }, 37 { TT_8X8, TT_4X8, TT_4X4, TT_8X4_BOTTOM, TT_4X8_RIGHT, TT_4X8_LEFT, TT_8X4, TT_8X4_TOP } 38 }; 39 40 const int ff_vc1_ttfrm_to_tt[4] = { TT_8X8, TT_8X4, TT_4X8, TT_4X4 }; 41 42 /** MV P mode - the 5th element is only used for mode 1 */ 43 const uint8_t ff_vc1_mv_pmode_table[2][5] = { 44 { MV_PMODE_1MV_HPEL_BILIN, MV_PMODE_1MV, MV_PMODE_1MV_HPEL, MV_PMODE_INTENSITY_COMP, MV_PMODE_MIXED_MV }, 45 { MV_PMODE_1MV, MV_PMODE_MIXED_MV, MV_PMODE_1MV_HPEL, MV_PMODE_INTENSITY_COMP, MV_PMODE_1MV_HPEL_BILIN } 46 }; 47 const uint8_t ff_vc1_mv_pmode_table2[2][4] = { 48 { MV_PMODE_1MV_HPEL_BILIN, MV_PMODE_1MV, MV_PMODE_1MV_HPEL, MV_PMODE_MIXED_MV }, 49 { MV_PMODE_1MV, MV_PMODE_MIXED_MV, MV_PMODE_1MV_HPEL, MV_PMODE_1MV_HPEL_BILIN } 50 }; 51 52 /* MBMODE table for interlaced frame P-picture */ 53 const uint8_t ff_vc1_mbmode_intfrp[2][15][4] = { 54 { /* 1: 4-MV, 0: non-4-MV */ 55 /* Type, FIELDTX, 1-MV Differential present, Residuals (CBP) present */ 56 /* Table 164 - Table 167 */ 57 { MV_PMODE_INTFR_1MV , 0, 1, 1 }, 58 { MV_PMODE_INTFR_1MV , 1, 1, 1 }, 59 { MV_PMODE_INTFR_1MV , 0, 1, 0 }, 60 { MV_PMODE_INTFR_1MV , 0, 0, 1 }, 61 { MV_PMODE_INTFR_1MV , 1, 0, 1 }, 62 { MV_PMODE_INTFR_2MV_FIELD, 0, 0, 1 }, 63 { MV_PMODE_INTFR_2MV_FIELD, 1, 0, 1 }, 64 { MV_PMODE_INTFR_2MV_FIELD, 1, 0, 0 }, 65 { MV_PMODE_INTFR_INTRA , 0, 0, 0 } 66 }, 67 { 68 /* Table 160 - Table 163 */ 69 { MV_PMODE_INTFR_1MV , 0, 1, 1 }, 70 { MV_PMODE_INTFR_1MV , 1, 1, 1 }, 71 { MV_PMODE_INTFR_1MV , 0, 1, 0 }, 72 { MV_PMODE_INTFR_1MV , 0, 0, 1 }, 73 { MV_PMODE_INTFR_1MV , 1, 0, 1 }, 74 { MV_PMODE_INTFR_2MV_FIELD, 0, 0, 1 }, 75 { MV_PMODE_INTFR_2MV_FIELD, 1, 0, 1 }, 76 { MV_PMODE_INTFR_2MV_FIELD, 1, 0, 0 }, 77 { MV_PMODE_INTFR_4MV , 0, 0, 1 }, 78 { MV_PMODE_INTFR_4MV , 1, 0, 1 }, 79 { MV_PMODE_INTFR_4MV , 0, 0, 0 }, 80 { MV_PMODE_INTFR_4MV_FIELD, 0, 0, 1 }, 81 { MV_PMODE_INTFR_4MV_FIELD, 1, 0, 1 }, 82 { MV_PMODE_INTFR_4MV_FIELD, 1, 0, 0 }, 83 { MV_PMODE_INTFR_INTRA , 0, 0, 0 } 84 } 85 }; 86 87 const int ff_vc1_fps_nr[7] = { 24, 25, 30, 50, 60, 48, 72 }, 88 ff_vc1_fps_dr[2] = { 1000, 1001 }; 89 const uint8_t ff_vc1_pquant_table[3][32] = { 90 /* Implicit quantizer */ 91 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 6, 7, 8, 9, 10, 11, 12, 92 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27, 29, 31 }, 93 /* Explicit quantizer, pquantizer uniform */ 94 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 95 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 }, 96 /* Explicit quantizer, pquantizer non-uniform */ 97 { 0, 1, 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 98 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 31 } 99 }; 100 101 /** @name VC-1 VLC tables and defines 102 * @todo TODO move this into the context 103 */ 104 //@{ 105 #define VC1_BFRACTION_VLC_BITS 7 106 VLC ff_vc1_bfraction_vlc; 107 #define VC1_IMODE_VLC_BITS 4 108 VLC ff_vc1_imode_vlc; 109 #define VC1_NORM2_VLC_BITS 3 110 VLC ff_vc1_norm2_vlc; 111 #define VC1_NORM6_VLC_BITS 9 112 VLC ff_vc1_norm6_vlc; 113 /* Could be optimized, one table only needs 8 bits */ 114 #define VC1_TTMB_VLC_BITS 9 //12 115 VLC ff_vc1_ttmb_vlc[3]; 116 #define VC1_MV_DIFF_VLC_BITS 9 //15 117 VLC ff_vc1_mv_diff_vlc[4]; 118 #define VC1_CBPCY_P_VLC_BITS 9 //14 119 VLC ff_vc1_cbpcy_p_vlc[4]; 120 #define VC1_ICBPCY_VLC_BITS 9 121 VLC ff_vc1_icbpcy_vlc[8]; 122 #define VC1_4MV_BLOCK_PATTERN_VLC_BITS 6 123 VLC ff_vc1_4mv_block_pattern_vlc[4]; 124 #define VC1_2MV_BLOCK_PATTERN_VLC_BITS 3 125 VLC ff_vc1_2mv_block_pattern_vlc[4]; 126 #define VC1_TTBLK_VLC_BITS 5 127 VLC ff_vc1_ttblk_vlc[3]; 128 #define VC1_SUBBLKPAT_VLC_BITS 6 129 VLC ff_vc1_subblkpat_vlc[3]; 130 #define VC1_INTFR_4MV_MBMODE_VLC_BITS 9 131 VLC ff_vc1_intfr_4mv_mbmode_vlc[4]; 132 #define VC1_INTFR_NON4MV_MBMODE_VLC_BITS 6 133 VLC ff_vc1_intfr_non4mv_mbmode_vlc[4]; 134 #define VC1_IF_MMV_MBMODE_VLC_BITS 5 135 VLC ff_vc1_if_mmv_mbmode_vlc[8]; 136 #define VC1_IF_1MV_MBMODE_VLC_BITS 5 137 VLC ff_vc1_if_1mv_mbmode_vlc[8]; 138 #define VC1_1REF_MVDATA_VLC_BITS 9 139 VLC ff_vc1_1ref_mvdata_vlc[4]; 140 #define VC1_2REF_MVDATA_VLC_BITS 9 141 VLC ff_vc1_2ref_mvdata_vlc[8]; 142 143 VLC ff_vc1_ac_coeff_table[8]; 144 145 #define VC1_IF_MBMODE_VLC_BITS 5 // as a placeholder for VC1_IF_MMV_MBMODE_VLC_BITS 146 // or VC1_IF_1MV_MBMODE_VLC_BITS since they are the same 147 //@} 148 149 150 #if B_FRACTION_DEN == 840 // original bfraction from vc9data.h, not conforming to standard 151 /* bfraction is fractional, we scale to the GCD 3*5*7*8 = 840 */ 152 const int16_t ff_vc1_bfraction_lut[23] = { 153 420 /*1/2*/, 280 /*1/3*/, 560 /*2/3*/, 210 /*1/4*/, 154 630 /*3/4*/, 168 /*1/5*/, 336 /*2/5*/, 155 504 /*3/5*/, 672 /*4/5*/, 140 /*1/6*/, 700 /*5/6*/, 156 120 /*1/7*/, 240 /*2/7*/, 360 /*3/7*/, 480 /*4/7*/, 157 600 /*5/7*/, 720 /*6/7*/, 105 /*1/8*/, 315 /*3/8*/, 158 525 /*5/8*/, 735 /*7/8*/, 159 -1 /*inv.*/, 0 /*BI fm*/ 160 }; 161 #else 162 /* pre-computed scales for all bfractions and base=256 */ 163 const int16_t ff_vc1_bfraction_lut[23] = { 164 128 /*1/2*/, 85 /*1/3*/, 170 /*2/3*/, 64 /*1/4*/, 165 192 /*3/4*/, 51 /*1/5*/, 102 /*2/5*/, 166 153 /*3/5*/, 204 /*4/5*/, 43 /*1/6*/, 215 /*5/6*/, 167 37 /*1/7*/, 74 /*2/7*/, 111 /*3/7*/, 148 /*4/7*/, 168 185 /*5/7*/, 222 /*6/7*/, 32 /*1/8*/, 96 /*3/8*/, 169 160 /*5/8*/, 224 /*7/8*/, 170 -1 /*inv.*/, 0 /*BI fm*/ 171 }; 172 #endif 173 174 const uint8_t ff_vc1_bfraction_bits[23] = { 175 3, 3, 3, 3, 176 3, 3, 3, 177 7, 7, 7, 7, 178 7, 7, 7, 7, 179 7, 7, 7, 7, 180 7, 7, 181 7, 7 182 }; 183 const uint8_t ff_vc1_bfraction_codes[23] = { 184 0, 1, 2, 3, 185 4, 5, 6, 186 112, 113, 114, 115, 187 116, 117, 118, 119, 188 120, 121, 122, 123, 189 124, 125, 190 126, 127 191 }; 192 193 //Same as H.264 194 const AVRational ff_vc1_pixel_aspect[16] = { 195 { 0, 1 }, 196 { 1, 1 }, 197 { 12, 11 }, 198 { 10, 11 }, 199 { 16, 11 }, 200 { 40, 33 }, 201 { 24, 11 }, 202 { 20, 11 }, 203 { 32, 11 }, 204 { 80, 33 }, 205 { 18, 11 }, 206 { 15, 11 }, 207 { 64, 33 }, 208 { 160, 99 }, 209 { 0, 1 }, 210 { 0, 1 } 211 }; 212 213 /* BitPlane IMODE - such a small table... */ 214 const uint8_t ff_vc1_imode_codes[7] = { 215 0, 2, 1, 3, 1, 2, 3 216 }; 217 const uint8_t ff_vc1_imode_bits[7] = { 218 4, 2, 3, 2, 4, 3, 3 219 }; 220 221 /* Normal-2 imode */ 222 const uint8_t ff_vc1_norm2_codes[4] = { 223 0, 4, 5, 3 224 }; 225 const uint8_t ff_vc1_norm2_bits[4] = { 226 1, 3, 3, 2 227 }; 228 229 const uint16_t ff_vc1_norm6_codes[64] = { 230 0x001, 0x002, 0x003, 0x000, 0x004, 0x001, 0x002, 0x047, 0x005, 0x003, 0x004, 0x04B, 0x005, 0x04D, 0x04E, 0x30E, 231 0x006, 0x006, 0x007, 0x053, 0x008, 0x055, 0x056, 0x30D, 0x009, 0x059, 0x05A, 0x30C, 0x05C, 0x30B, 0x30A, 0x037, 232 0x007, 0x00A, 0x00B, 0x043, 0x00C, 0x045, 0x046, 0x309, 0x00D, 0x049, 0x04A, 0x308, 0x04C, 0x307, 0x306, 0x036, 233 0x00E, 0x051, 0x052, 0x305, 0x054, 0x304, 0x303, 0x035, 0x058, 0x302, 0x301, 0x034, 0x300, 0x033, 0x032, 0x007, 234 }; 235 236 const uint8_t ff_vc1_norm6_bits[64] = { 237 1, 4, 4, 8, 4, 8, 8, 10, 4, 8, 8, 10, 8, 10, 10, 13, 238 4, 8, 8, 10, 8, 10, 10, 13, 8, 10, 10, 13, 10, 13, 13, 9, 239 4, 8, 8, 10, 8, 10, 10, 13, 8, 10, 10, 13, 10, 13, 13, 9, 240 8, 10, 10, 13, 10, 13, 13, 9, 10, 13, 13, 9, 13, 9, 9, 6, 241 }; 242 243 /* 4MV Block pattern VLC tables */ 244 const uint8_t ff_vc1_4mv_block_pattern_codes[4][16] = { 245 { 14, 58, 59, 25, 12, 26, 15, 15, 13, 24, 27, 0, 28, 1, 2, 2 }, 246 { 8, 18, 19, 4, 20, 5, 30, 11, 21, 31, 6, 12, 7, 13, 14, 0 }, 247 { 15, 6, 7, 2, 8, 3, 28, 9, 10, 29, 4, 11, 5, 12, 13, 0 }, 248 { 0, 11, 12, 4, 13, 5, 30, 16, 14, 31, 6, 17, 7, 18, 19, 10 } 249 }; 250 const uint8_t ff_vc1_4mv_block_pattern_bits[4][16] = { 251 { 5, 6, 6, 5, 5, 5, 5, 4, 5, 5, 5, 3, 5, 3, 3, 2 }, 252 { 4, 5, 5, 4, 5, 4, 5, 4, 5, 5, 4, 4, 4, 4, 4, 2 }, 253 { 4, 4, 4, 4, 4, 4, 5, 4, 4, 5, 4, 4, 4, 4, 4, 3 }, 254 { 2, 4, 4, 4, 4, 4, 5, 5, 4, 5, 4, 5, 4, 5, 5, 4 } 255 }; 256 257 /* 2MV Block pattern VLC tables */ 258 const uint8_t ff_vc1_2mv_block_pattern_codes[4][4] = { 259 { 2, 1, 0, 3 }, { 1, 0, 2, 3 }, { 2, 0, 3, 1 }, { 1, 3, 2, 0 } 260 }; 261 262 const uint8_t ff_vc1_2mv_block_pattern_bits[4][4] = { 263 { 2, 2, 2, 2 }, { 1, 2, 3, 3 }, { 3, 2, 3, 1 }, { 1, 3, 3, 2 } 264 }; 265 266 /* Interlaced frame picture 4MV MBMODE VLC tables (p. 246, p. 360) */ 267 const uint16_t ff_vc1_intfr_4mv_mbmode_codes[4][15] = { 268 { 22, 17, 0, 47, 32, 10, 1, 3, 67, 133, 132, 92, 19, 93, 18 }, 269 { 3, 45, 0, 7, 23, 6, 1, 2, 10, 39, 44, 8, 18, 77, 76 }, 270 { 15, 6, 28, 9, 41, 6, 2, 15, 14, 8, 40, 29, 0, 21, 11 }, 271 { 7, 198, 1, 2, 193, 13, 25, 0, 97, 1599, 98, 398, 798, 192, 1598 } 272 }; 273 274 const uint8_t ff_vc1_intfr_4mv_mbmode_bits[4][15] = { 275 { 5, 5, 2, 6, 6, 4, 2, 2, 7, 8, 8, 7, 5, 7, 5 }, 276 { 3, 6, 3, 3, 5, 3, 3, 3, 4, 6, 6, 4, 5, 7, 7 }, 277 { 4, 3, 5, 5, 7, 4, 2, 5, 5, 5, 7, 5, 2, 6, 5 }, 278 { 4, 9, 1, 3, 9, 5, 6, 2, 8, 12, 8, 10, 11, 9, 12 } 279 }; 280 281 /* Interlaced frame picture NON-4MV MBMODE VLC tables (p. 363) */ 282 const uint8_t ff_vc1_intfr_non4mv_mbmode_codes[4][9] = { 283 { 9, 22, 0, 17, 16, 10, 1, 3, 23 }, 284 { 7, 0, 5, 2, 1, 1, 6, 3, 4 }, 285 { 1, 0, 10, 23, 44, 8, 3, 9, 45 }, 286 { 7, 97, 1, 2, 49, 13, 25, 0, 96 } 287 }; 288 289 const uint8_t ff_vc1_intfr_non4mv_mbmode_bits[4][9] = { 290 { 4, 5, 2, 5, 5, 4, 2, 2, 5 }, 291 { 3, 4, 6, 2, 3, 2, 3, 5, 6 }, 292 { 2, 2, 4, 5, 6, 4, 2, 4, 6 }, 293 { 4, 8, 1, 3, 7, 5, 6, 2, 8 } 294 }; 295 296 /* Interlaced field picture MBMODE VLC tables (p. 356 - 11.4.1, 11.4.2) */ 297 /* mixed-MV */ 298 const uint8_t ff_vc1_if_mmv_mbmode_codes[8][8] = { 299 { 16, 17, 3, 3, 0, 5, 9, 2 }, 300 { 8, 9, 3, 6, 7, 0, 5, 2 }, 301 { 16, 17, 5, 3, 0, 3, 9, 2 }, 302 { 56, 57, 15, 4, 5, 6, 29, 0 }, 303 { 52, 53, 27, 14, 15, 2, 12, 0 }, 304 { 56, 57, 29, 5, 6, 0, 15, 4 }, 305 { 16, 17, 6, 7, 0, 1, 9, 5 }, 306 { 56, 57, 0, 5, 6, 29, 4, 15 } 307 }; 308 const uint8_t ff_vc1_if_mmv_mbmode_bits[8][8] = { 309 { 6, 6, 2, 3, 2, 4, 5, 2 }, 310 { 5, 5, 3, 3, 3, 2, 4, 2 }, 311 { 6, 6, 4, 3, 2, 2, 5, 2 }, 312 { 6, 6, 4, 3, 3, 3, 5, 1 }, 313 { 6, 6, 5, 4, 4, 2, 4, 1 }, 314 { 6, 6, 5, 3, 3, 1, 4, 3 }, 315 { 5, 5, 3, 3, 2, 2, 4, 3 }, 316 { 6, 6, 1, 3, 3, 5, 3, 4 } 317 }; 318 /* 1MV */ 319 const uint8_t ff_vc1_if_1mv_mbmode_codes[8][6] = { 320 { 0, 1, 1, 1, 1, 1 }, 321 { 0, 1, 1, 1, 1, 1 }, 322 { 16, 17, 3, 0, 9, 5 }, 323 { 20, 21, 3, 11, 0, 4 }, 324 { 4, 5, 2, 3, 3, 0 }, 325 { 4, 5, 3, 2, 0, 3 }, 326 { 0, 1, 1, 1, 1, 1 }, 327 { 16, 17, 9, 5, 3, 0 } 328 }; 329 const uint8_t ff_vc1_if_1mv_mbmode_bits[8][6] = { 330 { 5, 5, 1, 3, 2, 4 }, 331 { 5, 5, 1, 2, 3, 4 }, 332 { 5, 5, 2, 1, 4, 3 }, 333 { 5, 5, 2, 4, 1, 3 }, 334 { 4, 4, 2, 3, 2, 2 }, 335 { 4, 4, 3, 2, 2, 2 }, 336 { 5, 5, 3, 4, 1, 2 }, 337 { 5, 5, 4, 3, 2, 1 } 338 }; 339 340 /* Interlaced frame/field picture MVDATA VLC tables */ 341 342 /* 1-reference tables */ 343 const uint32_t ff_vc1_1ref_mvdata_codes[4][72] = { /* uint32_t may be too big */ 344 { 345 0x00005, 0x0000C, 0x0001E, 0x00012, 0x0000C, 0x00034, 0x00075, 0x00070, 346 0x00000, 0x00008, 0x0001B, 0x00008, 0x0001D, 0x0007C, 0x000D6, 0x001DE, 347 0x001AF, 0x00005, 0x0001B, 0x00026, 0x0001E, 0x00012, 0x00076, 0x0004D, 348 0x001F6, 0x001F4, 0x00039, 0x0007F, 0x00027, 0x0006A, 0x00071, 0x00035, 349 0x00071, 0x00068, 0x001DC, 0x00027, 0x00073, 0x000FF, 0x000E8, 0x000E9, 350 0x0007E, 0x001F9, 0x001F5, 0x001FD, 0x0003E, 0x001CA, 0x003F9, 0x0004C, 351 0x00069, 0x001FA, 0x001DF, 0x001F7, 0x00070, 0x001DD, 0x00E4D, 0x00727, 352 0x00392, 0x001C8, 0x001CB, 0x003F8, 0x001AE, 0x001F8, 0x001FB, 0x0E4CE, 353 0x0E4CF, 0x07260, 0x07261, 0x07262, 0x07263, 0x07264, 0x07265, 0x07266 354 }, 355 { 356 0x00007, 0x00001, 0x00007, 0x00016, 0x00001, 0x00045, 0x00018, 0x002B6, 357 0x00006, 0x00004, 0x00017, 0x00010, 0x00029, 0x0002C, 0x0015A, 0x00066, 358 0x0019E, 0x00009, 0x00028, 0x00017, 0x00000, 0x0002A, 0x00004, 0x0005B, 359 0x000B5, 0x000CE, 0x00006, 0x00044, 0x0000F, 0x00046, 0x0000E, 0x000AC, 360 0x00032, 0x00037, 0x011EB, 0x0000A, 0x0001A, 0x0011F, 0x00016, 0x00014, 361 0x0002B, 0x00168, 0x00055, 0x023D5, 0x00057, 0x0002F, 0x00036, 0x0002E, 362 0x00169, 0x00054, 0x0047B, 0x0019F, 0x02B7D, 0x0008E, 0x00ADE, 0x00479, 363 0x0056E, 0x008F4, 0x015BF, 0x00478, 0x023D4, 0x0ADF1, 0x056F9, 0xADF0E, 364 0xADF0F, 0x56F80, 0x56F81, 0x56F82, 0x56F83, 0x56F84, 0x56F85, 0x56F86 365 }, 366 { 367 0x00002, 0x00006, 0x00007, 0x0000D, 0x00007, 0x00030, 0x000FF, 0x001F0, 368 0x00002, 0x00000, 0x00005, 0x00019, 0x0001E, 0x00007, 0x00063, 0x000FD, 369 0x00023, 0x0000E, 0x0001B, 0x0001A, 0x00006, 0x00009, 0x00018, 0x000C5, 370 0x00033, 0x001F1, 0x00002, 0x003FB, 0x001F3, 0x00022, 0x001FC, 0x00042, 371 0x00623, 0x00083, 0x00620, 0x0007D, 0x00040, 0x00043, 0x003E4, 0x003E5, 372 0x00191, 0x00FE9, 0x00105, 0x00208, 0x000FC, 0x00624, 0x00622, 0x00190, 373 0x00626, 0x007F5, 0x00C4B, 0x01FD0, 0x0104D, 0x00065, 0x00C42, 0x000C9, 374 0x00627, 0x00C43, 0x00C4A, 0x0104E, 0x01FD1, 0x0104F, 0x00412, 0x104CE, 375 0x104CF, 0x08260, 0x08261, 0x08262, 0x08263, 0x08264, 0x08265, 0x08266 376 }, 377 { 378 0x0000D, 0x00001, 0x00004, 0x00000, 0x00017, 0x00005, 0x0007F, 0x0004D, 379 0x00003, 0x00011, 0x0003E, 0x0003B, 0x00017, 0x00067, 0x0004A, 0x000C3, 380 0x000F2, 0x0000A, 0x0002C, 0x00032, 0x0003D, 0x00015, 0x00028, 0x00093, 381 0x000CC, 0x00096, 0x00003, 0x00075, 0x00020, 0x0002D, 0x00021, 0x00029, 382 0x00090, 0x001D0, 0x001FB, 0x0001C, 0x0004C, 0x00060, 0x00009, 0x00008, 383 0x0002D, 0x0009F, 0x001FA, 0x0013D, 0x00031, 0x000FC, 0x00058, 0x00092, 384 0x000F0, 0x000F1, 0x000CD, 0x00185, 0x00165, 0x0004E, 0x00091, 0x000E9, 385 0x00184, 0x001D1, 0x001E6, 0x00097, 0x001E7, 0x000B3, 0x0013C, 0x0164E, 386 0x0164F, 0x00B20, 0x00B21, 0x00B22, 0x00B23, 0x00B24, 0x00B25, 0x00B26 387 } 388 }; 389 390 const uint8_t ff_vc1_1ref_mvdata_bits[4][72] = { 391 { 392 3, 4, 5, 5, 5, 6, 7, 7, 2, 4, 5, 5, 6, 7, 8, 9, 9, 4, 393 6, 6, 6, 6, 7, 8, 9, 9, 6, 8, 7, 7, 7, 7, 8, 8, 9, 6, 394 8, 8, 8, 8, 8, 9, 9, 9, 7, 10, 10, 8, 8, 9, 9, 9, 8, 9, 395 13, 12, 11, 10, 10, 10, 9, 9, 9, 17, 17, 16, 16, 16, 16, 16, 16, 16 396 }, 397 { 398 3, 3, 4, 5, 5, 7, 8, 10, 3, 4, 5, 5, 6, 7, 9, 10, 12, 4, 399 6, 6, 5, 6, 6, 8, 9, 11, 4, 7, 7, 7, 7, 8, 9, 9, 13, 5, 400 8, 9, 8, 8, 9, 10, 10, 14, 7, 9, 9, 9, 10, 10, 11, 12, 14, 8, 401 12, 11, 11, 12, 13, 11, 14, 16, 15, 20, 20, 19, 19, 19, 19, 19, 19, 19 402 }, 403 { 404 3, 4, 4, 4, 5, 6, 8, 9, 2, 4, 5, 5, 5, 6, 7, 8, 8, 4, 405 7, 7, 6, 6, 7, 8, 8, 9, 5, 10, 9, 8, 9, 9, 11, 10, 11, 7, 406 9, 9, 10, 10, 11, 12, 11, 12, 8, 11, 11, 11, 11, 11, 12, 13, 15, 9, 407 12, 10, 11, 12, 12, 15, 13, 15, 13, 19, 19, 18, 18, 18, 18, 18, 18, 18 408 }, 409 { 410 4, 4, 4, 4, 5, 5, 7, 7, 3, 5, 6, 6, 6, 7, 7, 8, 8, 4, 411 6, 6, 6, 6, 7, 8, 8, 8, 4, 7, 6, 6, 6, 7, 8, 9, 9, 5, 412 7, 7, 6, 6, 7, 8, 9, 9, 6, 8, 8, 8, 8, 8, 8, 9, 10, 7, 413 8, 8, 9, 9, 9, 8, 9, 9, 9, 14, 14, 13, 13, 13, 13, 13, 13, 13 414 } 415 }; 416 417 /* 2-reference tables */ 418 const uint32_t ff_vc1_2ref_mvdata_codes[8][126] = { /* table 132 - table 139 */ 419 { 420 0x0000C, 0x0001C, 0x0000B, 0x00000, 0x0000E, 0x0002A, 0x00050, 0x00368, 421 0x00002, 0x0001A, 0x00004, 0x0003A, 0x0001D, 0x0006C, 0x000EF, 0x001BC, 422 0x0015F, 0x0000F, 0x00003, 0x0001C, 0x0000D, 0x0000B, 0x0003E, 0x000A7, 423 0x00146, 0x00199, 0x00006, 0x0001F, 0x00004, 0x0003C, 0x00007, 0x001BE, 424 0x0008B, 0x0002C, 0x007B3, 0x00005, 0x000DB, 0x00056, 0x000EC, 0x00052, 425 0x001BD, 0x00078, 0x000CF, 0x00573, 0x00009, 0x00023, 0x000ED, 0x00018, 426 0x00006, 0x00044, 0x000F5, 0x00079, 0x006D2, 0x0006E, 0x0002B, 0x0015D, 427 0x00017, 0x0037F, 0x00144, 0x000CE, 0x00028, 0x000AB, 0x00010, 0x001B5, 428 0x000F7, 0x000A6, 0x0007B, 0x00028, 0x001ED, 0x001E9, 0x006FD, 0x00004, 429 0x000F5, 0x00029, 0x0028A, 0x0028B, 0x0028F, 0x00DF9, 0x00335, 0x01E85, 430 0x000EE, 0x002BD, 0x0002B, 0x003D8, 0x003D1, 0x00198, 0x001E9, 0x0051D, 431 0x000B4, 0x0003F, 0x00455, 0x0022B, 0x00229, 0x00451, 0x00578, 0x007B2, 432 0x00570, 0x00155, 0x00032, 0x003D0, 0x00054, 0x006D3, 0x00571, 0x00454, 433 0x00334, 0x01BF1, 0x000B7, 0x00029, 0x01E84, 0x0016C, 0x0019B, 0x01BF0, 434 0x00579, 0x00F43, 0x000B5, 0x008A1, 0x0002A, 0x0016D, 0x008A0, 0x007A0, 435 0x003D1, 0x00AE5, 0x00154, 0x00AE4, 0x00A39, 0x00A38 436 }, 437 { 438 0x00003, 0x00009, 0x00016, 0x00010, 0x000D7, 0x00335, 0x00574, 0x00555, 439 0x00000, 0x0001D, 0x00009, 0x00017, 0x0002C, 0x000AD, 0x00374, 0x006B3, 440 0x00577, 0x0000F, 0x00018, 0x0000A, 0x0002E, 0x00022, 0x0017C, 0x00E7B, 441 0x01B89, 0x015D8, 0x00008, 0x00034, 0x0006D, 0x00023, 0x001C2, 0x00376, 442 0x002D3, 0x01C4A, 0x0330A, 0x00014, 0x0006A, 0x00072, 0x0006C, 0x000E3, 443 0x0019B, 0x0073F, 0x01CF0, 0x00B41, 0x00032, 0x000E6, 0x000E0, 0x000CF, 444 0x000AB, 0x0019C, 0x002AB, 0x00E2B, 0x015D9, 0x0006F, 0x001C3, 0x000AF, 445 0x000BF, 0x000AC, 0x0017D, 0x006E3, 0x00E29, 0x01984, 0x00054, 0x000B5, 446 0x0017A, 0x001AD, 0x00199, 0x00178, 0x00358, 0x002D2, 0x01C4B, 0x0005B, 447 0x002A8, 0x00331, 0x00388, 0x0038B, 0x00370, 0x00713, 0x00CC3, 0x01CF1, 448 0x001B9, 0x005EF, 0x00738, 0x002F2, 0x0033B, 0x002B9, 0x006EB, 0x00570, 449 0x00E24, 0x0039D, 0x005A2, 0x005A3, 0x00E7D, 0x005EE, 0x00739, 0x00554, 450 0x00AA5, 0x00AA4, 0x00377, 0x01CF5, 0x00BCE, 0x00E79, 0x00660, 0x00674, 451 0x006EA, 0x00E7C, 0x00D65, 0x002F6, 0x015DA, 0x01B88, 0x005A1, 0x01CF4, 452 0x005E6, 0x00E28, 0x00575, 0x00D64, 0x00334, 0x0330B, 0x015DB, 0x00B40, 453 0x00BCF, 0x00DC5, 0x00E2A, 0x00675, 0x00571, 0x00553 454 }, 455 { 456 0x00004, 0x00002, 0x00010, 0x00003, 0x00017, 0x00045, 0x0003E, 0x0007E, 457 0x00003, 0x00002, 0x00028, 0x0001E, 0x00015, 0x00047, 0x00002, 0x0014D, 458 0x00060, 0x0000B, 0x00026, 0x00024, 0x00014, 0x00032, 0x0006F, 0x000C3, 459 0x00531, 0x006E5, 0x00015, 0x0003F, 0x0002D, 0x00001, 0x0013E, 0x000DD, 460 0x000F6, 0x00305, 0x00331, 0x0000E, 0x00003, 0x00034, 0x00033, 0x0001A, 461 0x0014A, 0x000C5, 0x000F4, 0x006E4, 0x00001, 0x0003C, 0x0007D, 0x0008D, 462 0x0009D, 0x00031, 0x0006E, 0x00296, 0x000CD, 0x00025, 0x00149, 0x00032, 463 0x00089, 0x00036, 0x00088, 0x0006F, 0x00003, 0x0031D, 0x0000E, 0x001AA, 464 0x0027E, 0x00061, 0x0014E, 0x0014F, 0x00067, 0x000FF, 0x00183, 0x00036, 465 0x00357, 0x000F5, 0x000C6, 0x000C2, 0x00299, 0x00119, 0x00231, 0x00350, 466 0x0002C, 0x0018F, 0x00530, 0x00297, 0x00004, 0x001B8, 0x000C0, 0x0027A, 467 0x00311, 0x0009C, 0x00621, 0x00199, 0x0031C, 0x000F7, 0x003E3, 0x00356, 468 0x00189, 0x00005, 0x0006B, 0x008C2, 0x00330, 0x004FF, 0x004F0, 0x00351, 469 0x004F2, 0x001F2, 0x00373, 0x00000, 0x00C41, 0x008C3, 0x009EC, 0x003E2, 470 0x00304, 0x004F7, 0x004F1, 0x001F0, 0x00148, 0x00C40, 0x009ED, 0x008C0, 471 0x008C1, 0x004F3, 0x004FE, 0x000FE, 0x001F3, 0x001A9 472 }, 473 { 474 0x00000, 0x00004, 0x0002F, 0x00052, 0x00010, 0x000AD, 0x0050B, 0x00190, 475 0x00003, 0x00016, 0x00007, 0x0000D, 0x000BB, 0x00173, 0x000C9, 0x0050F, 476 0x0172C, 0x00003, 0x00011, 0x00005, 0x00043, 0x00023, 0x0004B, 0x0032E, 477 0x02E5B, 0x00482, 0x00009, 0x0002A, 0x00014, 0x0002A, 0x00108, 0x005CA, 478 0x0065A, 0x02136, 0x02132, 0x0000B, 0x00013, 0x00041, 0x000B8, 0x00174, 479 0x00100, 0x014DA, 0x0404E, 0x01437, 0x0002B, 0x00085, 0x000A7, 0x000A0, 480 0x0014C, 0x0029A, 0x0032C, 0x02133, 0x0142A, 0x00051, 0x00284, 0x000AC, 481 0x00102, 0x00045, 0x00044, 0x0081B, 0x0065E, 0x00CB7, 0x00018, 0x0050C, 482 0x00212, 0x002E4, 0x00203, 0x00094, 0x00122, 0x0081A, 0x00655, 0x00033, 483 0x002BA, 0x00246, 0x00242, 0x00A6E, 0x0040C, 0x00808, 0x02134, 0x0404F, 484 0x00175, 0x00405, 0x00247, 0x0012A, 0x00A14, 0x002BB, 0x00191, 0x0084F, 485 0x01438, 0x000AF, 0x00B97, 0x00483, 0x0143B, 0x0032B, 0x00243, 0x0142B, 486 0x00958, 0x029BF, 0x00049, 0x00A6C, 0x014DB, 0x004AD, 0x014DE, 0x0084E, 487 0x01434, 0x00257, 0x02E5A, 0x00207, 0x01435, 0x01439, 0x00CB6, 0x0143A, 488 0x00194, 0x00654, 0x02135, 0x0537C, 0x0015C, 0x00240, 0x01012, 0x0537D, 489 0x00959, 0x01098, 0x01436, 0x0065F, 0x02026, 0x02137 490 }, 491 { 492 0x00005, 0x00019, 0x00016, 0x00011, 0x0003E, 0x0005E, 0x000EF, 0x000E2, 493 0x00000, 0x00039, 0x0002B, 0x00026, 0x00028, 0x00012, 0x000C2, 0x000ED, 494 0x0011D, 0x0000D, 0x00031, 0x0002A, 0x00025, 0x00020, 0x0005C, 0x001ED, 495 0x0024D, 0x00770, 0x00006, 0x0007A, 0x00060, 0x0004F, 0x00048, 0x00039, 496 0x00186, 0x00213, 0x00EC6, 0x0000F, 0x00026, 0x0005F, 0x00075, 0x00070, 497 0x00027, 0x001DB, 0x003C6, 0x0078F, 0x0003F, 0x000A6, 0x000F0, 0x0003A, 498 0x00052, 0x0004E, 0x000E3, 0x001D9, 0x0030F, 0x00010, 0x001DD, 0x000A7, 499 0x000F7, 0x00022, 0x00092, 0x003C4, 0x002EF, 0x00762, 0x00079, 0x0008F, 500 0x001DA, 0x00087, 0x000E8, 0x000BA, 0x00176, 0x000EE, 0x003B0, 0x00085, 501 0x00119, 0x0030E, 0x00108, 0x001D2, 0x0010C, 0x00773, 0x00424, 0x00434, 502 0x00071, 0x005DD, 0x001C1, 0x003A7, 0x00127, 0x0008D, 0x0021B, 0x007B2, 503 0x001DF, 0x003D8, 0x00764, 0x00EE4, 0x003B3, 0x0074D, 0x001D8, 0x005DC, 504 0x0084A, 0x00499, 0x003C5, 0x01D8E, 0x00765, 0x00435, 0x00771, 0x001C2, 505 0x00118, 0x003BC, 0x00381, 0x00387, 0x07B33, 0x01097, 0x01096, 0x01ECD, 506 0x00E99, 0x00F1C, 0x00F1D, 0x00EE5, 0x0011C, 0x07B32, 0x03D98, 0x01D8F, 507 0x00E98, 0x00F67, 0x003BD, 0x00380, 0x00498, 0x00386 508 }, 509 { 510 0x0000D, 0x00010, 0x0002E, 0x00039, 0x0000D, 0x00074, 0x000ED, 0x000B6, 511 0x00001, 0x00002, 0x00000, 0x00030, 0x00029, 0x00070, 0x000F3, 0x0008C, 512 0x00166, 0x00009, 0x00033, 0x00078, 0x00006, 0x000C4, 0x0000B, 0x00163, 513 0x000CC, 0x005BE, 0x0001F, 0x0002F, 0x00064, 0x00018, 0x000C6, 0x0000A, 514 0x00162, 0x002C0, 0x00EF3, 0x00007, 0x0000F, 0x000E3, 0x000CA, 0x000B2, 515 0x0018F, 0x003AE, 0x0075F, 0x00C51, 0x00015, 0x00047, 0x000EE, 0x000E2, 516 0x000EA, 0x00009, 0x0016A, 0x002C3, 0x0059D, 0x0003D, 0x00008, 0x001D9, 517 0x00032, 0x0000E, 0x0016E, 0x0032C, 0x0065B, 0x0196B, 0x00002, 0x0000F, 518 0x001D8, 0x0008D, 0x000B4, 0x001E4, 0x00067, 0x00317, 0x00794, 0x00022, 519 0x003BE, 0x00315, 0x00034, 0x00037, 0x002DE, 0x0006C, 0x00EFE, 0x0066C, 520 0x00028, 0x003CB, 0x003AC, 0x00035, 0x0016B, 0x003BD, 0x002C1, 0x0062C, 521 0x01DFE, 0x0000E, 0x0059E, 0x005BF, 0x000DA, 0x00629, 0x00584, 0x00EB7, 522 0x00B0A, 0x0066D, 0x0000C, 0x0077E, 0x0059C, 0x00778, 0x0075E, 0x0075A, 523 0x0062D, 0x00337, 0x00334, 0x00197, 0x01E57, 0x01DE4, 0x0196A, 0x01E56, 524 0x00C50, 0x00B3F, 0x01E54, 0x00B0B, 0x0018E, 0x001B6, 0x01E55, 0x00CB4, 525 0x00B3E, 0x00EB6, 0x01DE5, 0x01DFF, 0x00335, 0x001B7 526 }, 527 { 528 0x00001, 0x0000B, 0x00019, 0x0006F, 0x0002A, 0x00075, 0x007EB, 0x00163, 529 0x00001, 0x0000E, 0x0001A, 0x0003E, 0x0001C, 0x0002D, 0x00164, 0x007EC, 530 0x00165, 0x00004, 0x00006, 0x00036, 0x0007F, 0x000AE, 0x00158, 0x0015C, 531 0x0056D, 0xFD510, 0x00000, 0x00004, 0x0007B, 0x000F3, 0x0003B, 0x007ED, 532 0x002B3, 0x002CC, 0x0056E, 0x00018, 0x0003E, 0x00017, 0x0001E, 0x000AF, 533 0x003F7, 0x0056F, 0x002CD, 0xFD511, 0x00014, 0x000AD, 0x000AA, 0x00014, 534 0x000A8, 0x00153, 0x000E8, 0x001FE, 0x00DCF, 0x00078, 0x001B8, 0x00152, 535 0x000FE, 0x002B1, 0x0015D, 0x00160, 0xFD512, 0xFD513, 0x0007A, 0x002B0, 536 0x001E5, 0x000E9, 0x000FC, 0x006E6, 0x00DC8, 0x00584, 0xFD514, 0x000AB, 537 0x00DDE, 0x00159, 0x003F4, 0x00DC9, 0x00DCA, 0x001FA, 0xFD515, 0xFD516, 538 0x000FC, 0x001FF, 0x001E4, 0x000AF, 0x0015A, 0x00167, 0x00DCB, 0x00585, 539 0xFD517, 0x003F7, 0x03F55, 0xFD518, 0x00DDC, 0x00586, 0x03F56, 0xFD519, 540 0x03F57, 0xFD51A, 0x001BA, 0x00587, 0x00588, 0x00DDF, 0x002B2, 0xFD51B, 541 0x00DCE, 0x003F6, 0xFD51C, 0x00FD4, 0xFD51D, 0xFD51E, 0xFD51F, 0x7EA80, 542 0x7EA81, 0x0056C, 0x7EA82, 0x7EA83, 0x00376, 0x00589, 0x0058A, 0x7EA84, 543 0x7EA85, 0x00DDD, 0x7EA86, 0x7EA87, 0x0058B, 0x07EA9 544 }, 545 { 546 0x00003, 0x0000E, 0x0000F, 0x0007E, 0x00062, 0x000C6, 0x00CD9, 0x0063E, 547 0x00002, 0x00002, 0x00000, 0x00018, 0x0000C, 0x00069, 0x00039, 0x00707, 548 0x00C7E, 0x00002, 0x0000D, 0x0001B, 0x0000F, 0x0019A, 0x00647, 0x01A37, 549 0x346C4, 0x0346D, 0x00001, 0x0001E, 0x0007F, 0x0000A, 0x000E1, 0x00661, 550 0x00CE4, 0x346C5, 0x346C6, 0x0001D, 0x00030, 0x0000D, 0x000CB, 0x00199, 551 0x00320, 0x0008E, 0x0652E, 0x346C7, 0x0003E, 0x00039, 0x00035, 0x00033, 552 0x0019F, 0x001C0, 0x00CDA, 0x346C8, 0x346C9, 0x0000B, 0x000D0, 0x0019E, 553 0x00022, 0x00038, 0x0018E, 0x0031E, 0x03294, 0x0023C, 0x00032, 0x00012, 554 0x00013, 0x00071, 0x0019D, 0x00020, 0x00C87, 0x00CC0, 0x346CA, 0x00338, 555 0x00653, 0x001A2, 0x0032A, 0x00322, 0x00CE7, 0x00084, 0x0011F, 0x346CB, 556 0x00325, 0x00649, 0x0032B, 0x00077, 0x00648, 0x00642, 0x00C86, 0x00C8C, 557 0x346CC, 0x0003A, 0x019B7, 0x00043, 0x00327, 0x0008C, 0x0008D, 0x00C8D, 558 0x346CD, 0x346CE, 0x00337, 0x00CE5, 0x00085, 0x00326, 0x00347, 0x00CA4, 559 0x00C7F, 0x00D1A, 0x346CF, 0x00328, 0x1A360, 0x1A361, 0x00CD8, 0x0068C, 560 0x03295, 0x03296, 0x0652F, 0x066D8, 0x00331, 0x00706, 0x0023D, 0x00076, 561 0x00CC1, 0x00382, 0x00CE6, 0x066D9, 0x066DA, 0x066DB 562 } 563 }; 564 565 const uint8_t ff_vc1_2ref_mvdata_bits[8][126] = { 566 { 567 4, 5, 5, 5, 6, 7, 8, 10, 2, 5, 5, 6, 6, 7, 8, 9, 568 10, 4, 5, 6, 6, 7, 8, 9, 10, 11, 4, 6, 6, 7, 7, 9, 569 9, 10, 12, 5, 8, 8, 8, 8, 9, 9, 10, 12, 5, 7, 8, 7, 570 7, 8, 9, 9, 11, 7, 9, 10, 9, 10, 10, 10, 10, 12, 6, 9, 571 9, 9, 9, 9, 10, 10, 11, 7, 10, 10, 11, 11, 11, 12, 12, 14, 572 8, 11, 10, 11, 11, 11, 11, 12, 12, 8, 12, 11, 11, 12, 12, 12, 573 12, 13, 8, 12, 11, 11, 12, 12, 12, 13, 12, 9, 14, 13, 11, 13, 574 12, 13, 12, 13, 9, 13, 13, 12, 12, 13, 13, 13, 13, 13 575 }, 576 { 577 3, 4, 5, 6, 8, 10, 11, 11, 2, 5, 5, 6, 7, 8, 10, 11, 578 11, 4, 5, 5, 6, 7, 9, 12, 13, 13, 4, 6, 7, 7, 9, 10, 579 11, 13, 14, 5, 7, 7, 7, 8, 9, 11, 13, 13, 6, 8, 8, 8, 580 8, 9, 10, 12, 13, 7, 9, 8, 8, 8, 9, 11, 12, 13, 7, 9, 581 9, 9, 9, 9, 10, 11, 13, 8, 10, 10, 10, 10, 10, 11, 12, 13, 582 9, 11, 11, 10, 10, 10, 11, 11, 12, 10, 12, 12, 12, 11, 11, 11, 583 12, 12, 10, 13, 12, 12, 11, 11, 11, 12, 12, 10, 13, 13, 12, 13, 584 11, 12, 11, 12, 10, 14, 13, 13, 12, 12, 12, 11, 11, 11 585 }, 586 { 587 4, 4, 5, 5, 6, 7, 8, 9, 2, 5, 6, 6, 6, 7, 7, 9, 588 9, 4, 6, 6, 6, 7, 8, 9, 11, 12, 5, 7, 7, 7, 9, 9, 589 10, 11, 12, 5, 7, 7, 7, 7, 9, 9, 10, 12, 5, 8, 8, 8, 590 8, 8, 9, 10, 10, 6, 9, 8, 8, 8, 8, 9, 9, 11, 6, 10, 591 10, 9, 9, 9, 9, 10, 10, 7, 11, 10, 9, 9, 10, 9, 10, 11, 592 7, 10, 11, 10, 10, 10, 9, 10, 11, 8, 12, 11, 11, 10, 11, 11, 593 10, 10, 8, 12, 12, 11, 11, 11, 11, 10, 11, 8, 13, 12, 12, 11, 594 11, 11, 11, 10, 9, 13, 12, 12, 12, 11, 11, 10, 10, 10 595 }, 596 { 597 3, 4, 6, 7, 7, 9, 11, 11, 2, 5, 5, 6, 8, 9, 10, 11, 598 13, 3, 5, 5, 7, 8, 9, 12, 14, 13, 4, 6, 6, 7, 9, 11, 599 13, 14, 14, 5, 7, 7, 8, 9, 9, 13, 15, 13, 6, 8, 8, 8, 600 9, 10, 12, 14, 13, 7, 10, 9, 9, 9, 9, 12, 13, 14, 7, 11, 601 10, 10, 10, 10, 11, 12, 13, 8, 11, 12, 12, 12, 11, 12, 14, 15, 602 9, 11, 12, 11, 12, 11, 11, 12, 13, 9, 12, 13, 13, 12, 12, 13, 603 14, 14, 9, 12, 13, 13, 13, 12, 13, 12, 14, 10, 13, 13, 14, 13, 604 11, 13, 14, 15, 10, 12, 13, 15, 14, 13, 13, 13, 14, 14 605 }, 606 { 607 4, 5, 5, 5, 6, 7, 8, 8, 2, 6, 6, 6, 6, 6, 8, 9, 608 10, 4, 6, 6, 6, 6, 7, 9, 10, 11, 4, 7, 7, 7, 7, 7, 609 9, 10, 12, 5, 7, 7, 7, 7, 7, 9, 10, 11, 6, 8, 8, 7, 610 7, 7, 8, 9, 10, 6, 9, 8, 8, 7, 8, 10, 10, 11, 7, 9, 611 9, 8, 8, 8, 9, 9, 10, 8, 10, 10, 9, 9, 9, 11, 11, 11, 612 8, 11, 10, 10, 9, 9, 10, 11, 10, 10, 12, 12, 11, 11, 10, 11, 613 12, 11, 10, 13, 12, 11, 11, 10, 10, 11, 11, 11, 15, 13, 13, 13, 614 12, 12, 12, 12, 10, 15, 14, 13, 12, 12, 11, 11, 11, 11 615 }, 616 { 617 4, 5, 6, 6, 6, 7, 8, 8, 2, 4, 5, 6, 6, 7, 8, 8, 618 9, 4, 6, 7, 7, 8, 8, 9, 10, 11, 5, 6, 7, 7, 8, 8, 619 9, 10, 12, 5, 7, 8, 8, 8, 9, 10, 11, 12, 5, 7, 8, 8, 620 8, 8, 9, 10, 11, 6, 8, 9, 8, 8, 9, 10, 11, 13, 5, 8, 621 9, 8, 8, 9, 9, 10, 11, 6, 10, 10, 9, 9, 10, 10, 12, 13, 622 6, 10, 10, 9, 9, 10, 10, 11, 13, 7, 11, 11, 11, 11, 11, 12, 623 12, 13, 7, 11, 11, 11, 11, 11, 11, 12, 12, 9, 13, 13, 13, 13, 624 12, 12, 13, 12, 9, 12, 13, 12, 12, 12, 13, 13, 12, 12 625 }, 626 { 627 3, 5, 6, 8, 9, 10, 12, 12, 1, 5, 6, 7, 8, 9, 12, 12, 628 12, 4, 6, 7, 8, 9, 12, 12, 14, 21, 4, 6, 8, 9, 9, 12, 629 13, 13, 14, 6, 9, 8, 8, 9, 13, 14, 13, 21, 6, 9, 9, 8, 630 9, 10, 11, 12, 13, 8, 10, 10, 11, 11, 12, 12, 21, 21, 8, 11, 631 10, 11, 11, 12, 13, 14, 21, 9, 13, 10, 11, 13, 13, 12, 21, 21, 632 9, 12, 10, 11, 12, 12, 13, 14, 21, 11, 15, 21, 13, 14, 15, 21, 633 15, 21, 10, 14, 14, 13, 13, 21, 13, 13, 21, 13, 21, 21, 21, 20, 634 20, 14, 20, 20, 11, 14, 14, 20, 20, 13, 20, 20, 14, 16 635 }, 636 { 637 2, 5, 6, 8, 9, 10, 13, 13, 2, 4, 5, 6, 8, 9, 10, 13, 638 14, 3, 5, 7, 8, 10, 12, 15, 20, 16, 4, 6, 8, 8, 10, 12, 639 13, 20, 20, 7, 8, 8, 9, 10, 11, 12, 16, 20, 7, 8, 8, 8, 640 10, 11, 13, 20, 20, 8, 10, 10, 10, 10, 11, 12, 15, 14, 8, 9, 641 9, 9, 10, 10, 13, 13, 20, 11, 12, 11, 11, 11, 13, 12, 13, 20, 642 11, 12, 11, 11, 12, 12, 13, 13, 20, 10, 14, 11, 11, 12, 12, 13, 643 20, 20, 11, 13, 12, 11, 12, 13, 14, 14, 20, 11, 19, 19, 13, 13, 644 15, 15, 16, 16, 11, 13, 14, 11, 13, 12, 13, 16, 16, 16 645 } 646 }; 647 648 const uint8_t ff_wmv3_dc_scale_table[32] = { 649 0, 2, 4, 8, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 650 14, 14, 15, 15, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21 651 }; 652 653 /* P-Picture CBPCY VLC tables */ 654 // Looks like original tables are not conforming to standard at all. Are they used for old WMV? 655 const uint16_t ff_vc1_cbpcy_p_codes[4][64] = { 656 { 657 0, 6, 15, 13, 13, 11, 3, 13, 5, 8, 49, 10, 12, 114, 102, 119, 658 1, 54, 96, 8, 10, 111, 5, 15, 12, 10, 2, 12, 13, 115, 53, 63, 659 1, 7, 1, 7, 14, 12, 4, 14, 1, 9, 97, 11, 7, 58, 52, 62, 660 4, 103, 1, 9, 11, 56, 101, 118, 4, 110, 100, 30, 2, 5, 4, 3 661 }, 662 { 663 0, 9, 1, 18, 5, 14, 237, 26, 3, 121, 3, 22, 13, 16, 6, 30, 664 2, 10, 1, 20, 12, 241, 5, 28, 16, 12, 3, 24, 28, 124, 239, 247, 665 1, 240, 1, 19, 18, 15, 4, 27, 1, 122, 2, 23, 1, 17, 7, 31, 666 1, 11, 2, 21, 19, 246, 238, 29, 17, 13, 236, 25, 58, 63, 8, 125 667 }, 668 { 669 0, 201, 25, 231, 5, 221, 1, 3, 2, 414, 2, 241, 16, 225, 195, 492, 670 2, 412, 1, 240, 7, 224, 98, 245, 1, 220, 96, 5, 9, 230, 101, 247, 671 1, 102, 1, 415, 24, 3, 2, 244, 3, 54, 3, 484, 17, 114, 200, 493, 672 3, 413, 1, 4, 13, 113, 99, 485, 4, 111, 194, 243, 5, 29, 26, 31 673 }, 674 { 675 0, 28, 12, 44, 3, 36, 20, 52, 2, 32, 16, 48, 8, 40, 24, 28, 676 1, 30, 14, 46, 6, 38, 22, 54, 3, 34, 18, 50, 10, 42, 26, 30, 677 1, 29, 13, 45, 5, 37, 21, 53, 2, 33, 17, 49, 9, 41, 25, 29, 678 1, 31, 15, 47, 7, 39, 23, 55, 4, 35, 19, 51, 11, 43, 27, 31 679 } 680 }; 681 682 const uint8_t ff_vc1_cbpcy_p_bits[4][64] = { 683 { 684 13, 13, 7, 13, 7, 13, 13, 12, 6, 13, 7, 12, 6, 8, 8, 8, 685 5, 7, 8, 12, 6, 8, 13, 12, 7, 13, 13, 12, 6, 8, 7, 7, 686 6, 13, 8, 12, 7, 13, 13, 12, 7, 13, 8, 12, 5, 7, 7, 7, 687 6, 8, 13, 12, 6, 7, 8, 8, 5, 8, 8, 6, 3, 3, 3, 2 688 }, 689 { 690 14, 13, 8, 13, 3, 13, 8, 13, 3, 7, 8, 13, 4, 13, 13, 13, 691 3, 13, 13, 13, 4, 8, 13, 13, 5, 13, 13, 13, 5, 7, 8, 8, 692 3, 8, 14, 13, 5, 13, 13, 13, 4, 7, 13, 13, 6, 13, 13, 13, 693 5, 13, 8, 13, 5, 8, 8, 13, 5, 13, 8, 13, 6, 6, 13, 7 694 }, 695 { 696 13, 8, 6, 8, 4, 8, 13, 12, 4, 9, 8, 8, 5, 8, 8, 9, 697 5, 9, 10, 8, 4, 8, 7, 8, 6, 8, 7, 13, 4, 8, 7, 8, 698 5, 7, 8, 9, 6, 13, 13, 8, 4, 6, 8, 9, 5, 7, 8, 9, 699 5, 9, 9, 13, 5, 7, 7, 9, 4, 7, 8, 8, 3, 5, 5, 5 700 }, 701 { 702 9, 9, 9, 9, 2, 9, 9, 9, 2, 9, 9, 9, 9, 9, 9, 8, 703 3, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 704 2, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 705 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8 706 } 707 }; 708 709 /* Interlaced CBPCY VLC tables (Table 124 - Table 131) */ 710 const uint16_t ff_vc1_icbpcy_p_codes[8][63] = { 711 { 712 0x2F1A, 0x2F1B, 0x178C, 0x0090, 0x02A8, 0x02A9, 0x0BC7, 0x0091, 713 0x02AA, 0x02AB, 0x05E0, 0x004A, 0x0096, 0x0097, 0x00BD, 0x0092, 714 0x02AC, 0x02AD, 0x05E1, 0x0098, 0x0132, 0x0133, 0x0179, 0x0134, 715 0x026A, 0x026B, 0x02FC, 0x004E, 0x0040, 0x0041, 0x002B, 0x0093, 716 0x02AE, 0x02AF, 0x05E2, 0x0136, 0x026E, 0x026F, 0x02FD, 0x009E, 717 0x013E, 0x013F, 0x017F, 0x0050, 0x0042, 0x0043, 0x002C, 0x0051, 718 0x00A4, 0x00A5, 0x00BE, 0x0053, 0x0044, 0x0045, 0x002D, 0x0054, 719 0x0046, 0x0047, 0x002E, 0x0003, 0x0000, 0x0001, 0x0001 720 }, 721 { 722 0x0041, 0x0042, 0x0100, 0x0043, 0x0088, 0x0089, 0x0101, 0x0045, 723 0x008C, 0x008D, 0x0102, 0x0010, 0x0022, 0x0023, 0x0024, 0x0047, 724 0x0010, 0x0011, 0x0103, 0x0025, 0x0058, 0x0059, 0x005A, 0x005B, 725 0x005A, 0x005B, 0x005C, 0x000C, 0x0030, 0x0031, 0x0019, 0x0009, 726 0x0014, 0x0015, 0x002C, 0x005C, 0x005D, 0x005E, 0x005F, 0x0026, 727 0x005D, 0x005E, 0x005F, 0x000D, 0x0034, 0x0035, 0x001B, 0x0014, 728 0x0027, 0x002A, 0x002B, 0x000E, 0x0038, 0x0039, 0x001D, 0x000F, 729 0x003C, 0x003D, 0x001F, 0x0005, 0x0009, 0x0000, 0x0003 730 }, 731 { 732 0x0032, 0x0033, 0x001A, 0x0026, 0x00E4, 0x00E5, 0x01E6, 0x0027, 733 0x00E6, 0x00E7, 0x01E7, 0x000E, 0x0063, 0x006C, 0x0077, 0x0028, 734 0x00E8, 0x00E9, 0x01E8, 0x007B, 0x00DA, 0x00DB, 0x00EC, 0x00F5, 735 0x01B8, 0x01B9, 0x01DA, 0x0021, 0x004B, 0x0054, 0x002B, 0x0029, 736 0x00EA, 0x00EB, 0x01E9, 0x004A, 0x01BA, 0x01BB, 0x01DB, 0x0020, 737 0x00DE, 0x00DF, 0x00F2, 0x0022, 0x0055, 0x0058, 0x002D, 0x000F, 738 0x0070, 0x0071, 0x0078, 0x0023, 0x0059, 0x005C, 0x002F, 0x0024, 739 0x005D, 0x0062, 0x0030, 0x0002, 0x001F, 0x0006, 0x0000 740 }, 741 { 742 0x0028, 0x0029, 0x009D, 0x0000, 0x01EA, 0x01EB, 0x01EC, 0x0001, 743 0x01ED, 0x01EE, 0x01EF, 0x0005, 0x00F0, 0x00F1, 0x003B, 0x0002, 744 0x01F0, 0x01F1, 0x01F2, 0x003F, 0x015C, 0x015D, 0x0099, 0x0010, 745 0x03D0, 0x03D1, 0x0130, 0x000F, 0x009E, 0x009F, 0x00FB, 0x0003, 746 0x01F3, 0x01F4, 0x01F5, 0x0011, 0x03D2, 0x03D3, 0x0131, 0x0009, 747 0x015E, 0x015F, 0x009C, 0x0010, 0x00A8, 0x00A9, 0x0038, 0x0006, 748 0x00F2, 0x00F3, 0x004D, 0x0011, 0x00AA, 0x00AB, 0x0039, 0x0012, 749 0x00AC, 0x00AD, 0x003A, 0x0006, 0x0016, 0x0017, 0x000E 750 }, 751 { 752 0x003C, 0x003D, 0x001F, 0x000A, 0x0061, 0x0062, 0x0002, 0x000B, 753 0x0063, 0x0064, 0x0003, 0x0007, 0x0003, 0x0004, 0x000B, 0x000C, 754 0x0065, 0x0066, 0x0004, 0x0012, 0x000A, 0x000B, 0x0014, 0x001B, 755 0x0018, 0x0019, 0x0034, 0x002C, 0x0067, 0x0068, 0x0035, 0x000D, 756 0x0069, 0x006C, 0x0005, 0x0060, 0x001A, 0x001B, 0x0035, 0x0013, 757 0x000E, 0x000F, 0x0015, 0x002D, 0x006D, 0x006E, 0x0038, 0x0008, 758 0x0008, 0x0009, 0x000C, 0x002E, 0x006F, 0x0072, 0x003A, 0x002F, 759 0x0073, 0x0000, 0x003B, 0x0007, 0x0014, 0x0015, 0x0004 760 }, 761 { 762 0x0038, 0x0039, 0x009D, 0x000A, 0x0091, 0x0092, 0x0093, 0x000B, 763 0x0094, 0x0095, 0x0096, 0x0003, 0x00EE, 0x00EF, 0x0036, 0x000C, 764 0x0097, 0x0098, 0x0099, 0x0008, 0x01E4, 0x01E5, 0x006A, 0x0018, 765 0x03CC, 0x03CD, 0x00D6, 0x000E, 0x009E, 0x009F, 0x00F5, 0x000D, 766 0x009A, 0x009B, 0x009C, 0x0019, 0x03CE, 0x03CF, 0x00D7, 0x0009, 767 0x01E8, 0x01E9, 0x0090, 0x000F, 0x00E8, 0x00E9, 0x00F6, 0x0005, 768 0x00F0, 0x00F1, 0x0037, 0x0010, 0x00EA, 0x00EB, 0x00F7, 0x0011, 769 0x00EC, 0x00ED, 0x0034, 0x0000, 0x003E, 0x003F, 0x0002 770 }, 771 { 772 0x003C, 0x003D, 0x01CF, 0x0000, 0x00BF, 0x00E0, 0x01FC, 0x0001, 773 0x00E1, 0x00E2, 0x01FD, 0x0009, 0x01F1, 0x01F2, 0x01F3, 0x0002, 774 0x00E3, 0x00E4, 0x01FE, 0x0011, 0x03EE, 0x03EF, 0x03F0, 0x0021, 775 0x07E2, 0x07E3, 0x07E4, 0x0018, 0x03F7, 0x03FE, 0x03FF, 0x0003, 776 0x00E5, 0x00E6, 0x0080, 0x002E, 0x07E5, 0x07E6, 0x07E7, 0x0016, 777 0x03F4, 0x03F5, 0x03F6, 0x0019, 0x0102, 0x0103, 0x0104, 0x000A, 778 0x01F4, 0x01F5, 0x01F6, 0x001A, 0x0105, 0x0106, 0x0107, 0x001B, 779 0x0178, 0x0179, 0x01CE, 0x001D, 0x00BD, 0x00BE, 0x01F0 780 }, 781 { 782 0x0003, 0x0004, 0x01B6, 0x0004, 0x002E, 0x002F, 0x000E, 0x0005, 783 0x0030, 0x0031, 0x000F, 0x0003, 0x000A, 0x000B, 0x0014, 0x0006, 784 0x0032, 0x0033, 0x0010, 0x0005, 0x0030, 0x0031, 0x0032, 0x0009, 785 0x0066, 0x0067, 0x0068, 0x001D, 0x01B7, 0x01B8, 0x01B9, 0x0007, 786 0x0034, 0x0035, 0x0011, 0x0016, 0x0069, 0x006A, 0x006B, 0x000A, 787 0x0036, 0x0037, 0x00D8, 0x001E, 0x01BA, 0x01BB, 0x01BC, 0x0004, 788 0x0015, 0x0016, 0x0017, 0x001F, 0x01BD, 0x01BE, 0x01BF, 0x0000, 789 0x0010, 0x0011, 0x0012, 0x001C, 0x00D9, 0x00DA, 0x0013 790 } 791 }; 792 793 const uint8_t ff_vc1_icbpcy_p_bits[8][63] = { 794 { 795 15, 15, 14, 9, 11, 11, 13, 9, 11, 11, 12, 8, 9, 9, 9, 9, 796 11, 11, 12, 9, 10, 10, 10, 10, 11, 11, 11, 8, 8, 8, 7, 9, 797 11, 11, 12, 10, 11, 11, 11, 9, 10, 10, 10, 8, 8, 8, 7, 8, 798 9, 9, 9, 8, 8, 8, 7, 8, 8, 8, 7, 3, 3, 3, 1 799 }, 800 { 801 7, 7, 9, 7, 8, 8, 9, 7, 8, 8, 9, 6, 7, 7, 7, 7, 802 7, 7, 9, 7, 8, 8, 8, 8, 9, 9, 9, 6, 7, 7, 6, 6, 803 7, 7, 8, 8, 9, 9, 9, 7, 8, 8, 8, 6, 7, 7, 6, 6, 804 7, 7, 7, 6, 7, 7, 6, 6, 7, 7, 6, 3, 4, 3, 2 805 }, 806 { 807 6, 6, 5, 6, 8, 8, 9, 6, 8, 8, 9, 5, 7, 7, 7, 6, 808 8, 8, 9, 7, 8, 8, 8, 8, 9, 9, 9, 6, 7, 7, 6, 6, 809 8, 8, 9, 7, 9, 9, 9, 6, 8, 8, 8, 6, 7, 7, 6, 5, 810 7, 7, 7, 6, 7, 7, 6, 6, 7, 7, 6, 3, 5, 4, 2 811 }, 812 { 813 6, 6, 8, 4, 9, 9, 9, 4, 9, 9, 9, 4, 8, 8, 7, 4, 814 9, 9, 9, 6, 9, 9, 8, 6, 10, 10, 9, 5, 8, 8, 8, 4, 815 9, 9, 9, 6, 10, 10, 9, 5, 9, 9, 8, 5, 8, 8, 7, 4, 816 8, 8, 7, 5, 8, 8, 7, 5, 8, 8, 7, 3, 5, 5, 4 817 }, 818 { 819 6, 6, 5, 5, 7, 7, 7, 5, 7, 7, 7, 5, 6, 6, 6, 5, 820 7, 7, 7, 6, 7, 7, 7, 7, 8, 8, 8, 6, 7, 7, 6, 5, 821 7, 7, 7, 7, 8, 8, 8, 6, 7, 7, 7, 6, 7, 7, 6, 5, 822 6, 6, 6, 6, 7, 7, 6, 6, 7, 6, 6, 4, 5, 5, 3 823 }, 824 { 825 6, 6, 8, 4, 8, 8, 8, 4, 8, 8, 8, 4, 8, 8, 7, 4, 826 8, 8, 8, 5, 9, 9, 8, 6, 10, 10, 9, 5, 8, 8, 8, 4, 827 8, 8, 8, 6, 10, 10, 9, 5, 9, 9, 8, 5, 8, 8, 8, 4, 828 8, 8, 7, 5, 8, 8, 8, 5, 8, 8, 7, 3, 6, 6, 4 829 }, 830 { 831 6, 6, 9, 3, 8, 8, 9, 3, 8, 8, 9, 4, 9, 9, 9, 3, 832 8, 8, 9, 5, 10, 10, 10, 6, 11, 11, 11, 5, 10, 10, 10, 3, 833 8, 8, 8, 6, 11, 11, 11, 5, 10, 10, 10, 5, 9, 9, 9, 4, 834 9, 9, 9, 5, 9, 9, 9, 5, 9, 9, 9, 5, 8, 8, 9 835 }, 836 { 837 6, 6, 10, 3, 7, 7, 7, 3, 7, 7, 7, 4, 8, 8, 8, 3, 838 7, 7, 7, 5, 9, 9, 9, 6, 10, 10, 10, 6, 10, 10, 10, 3, 839 7, 7, 7, 6, 10, 10, 10, 5, 9, 9, 9, 6, 10, 10, 10, 4, 840 8, 8, 8, 6, 10, 10, 10, 5, 9, 9, 9, 6, 9, 9, 9 841 } 842 }; 843 844 /* MacroBlock Transform Type: 7.1.3.11, p89 845 * 8x8:B 846 * 8x4:B:btm 8x4:B:top 8x4:B:both, 847 * 4x8:B:right 4x8:B:left 4x8:B:both 848 * 4x4:B 8x8:MB 849 * 8x4:MB:btm 8x4:MB:top 8x4,MB,both 850 * 4x8,MB,right 4x8,MB,left 851 * 4x4,MB */ 852 const uint16_t ff_vc1_ttmb_codes[3][16] = { 853 { 854 0x0003, 855 0x002E, 0x005F, 0x0000, 856 0x0016, 0x0015, 0x0001, 857 0x0004, 0x0014, 858 0x02F1, 0x0179, 0x017B, 859 0x0BC0, 0x0BC1, 0x05E1, 860 0x017A 861 }, 862 { 863 0x0006, 864 0x0006, 0x0003, 0x0007, 865 0x000F, 0x000E, 0x0000, 866 0x0002, 0x0002, 867 0x0014, 0x0011, 0x000B, 868 0x0009, 0x0021, 0x0015, 869 0x0020 870 }, 871 { 872 0x0006, 873 0x0000, 0x000E, 0x0005, 874 0x0002, 0x0003, 0x0003, 875 0x000F, 0x0002, 876 0x0081, 0x0021, 0x0009, 877 0x0101, 0x0041, 0x0011, 878 0x0100 879 } 880 }; 881 882 const uint8_t ff_vc1_ttmb_bits[3][16] = { 883 { 884 2, 885 6, 7, 2, 886 5, 5, 2, 887 3, 5, 888 10, 9, 9, 889 12, 12, 11, 890 9 891 }, 892 { 893 3, 894 4, 4, 4, 895 4, 4, 3, 896 3, 2, 897 7, 7, 6, 898 6, 8, 7, 899 8 900 }, 901 { 902 3, 903 3, 4, 5, 904 3, 3, 4, 905 4, 2, 906 10, 8, 6, 907 11, 9, 7, 908 11 909 } 910 }; 911 912 /* TTBLK (Transform Type per Block) tables */ 913 const uint8_t ff_vc1_ttblk_codes[3][8] = { 914 { 0, 1, 3, 5, 16, 17, 18, 19 }, 915 { 3, 0, 1, 2, 3, 5, 8, 9 }, 916 { 1, 0, 1, 4, 6, 7, 10, 11 } 917 }; 918 const uint8_t ff_vc1_ttblk_bits[3][8] = { 919 { 2, 2, 2, 3, 5, 5, 5, 5 }, 920 { 2, 3, 3, 3, 3, 3, 4, 4 }, 921 { 2, 3, 3, 3, 3, 3, 4, 4 } 922 }; 923 924 /* SUBBLKPAT tables, p93-94, reordered */ 925 const uint8_t ff_vc1_subblkpat_codes[3][15] = { 926 { 14, 12, 7, 11, 9, 26, 2, 10, 27, 8, 0, 6, 1, 15, 1 }, 927 { 14, 0, 8, 15, 10, 4, 23, 13, 5, 9, 25, 3, 24, 22, 1 }, 928 { 5, 6, 2, 2, 8, 0, 28, 3, 1, 3, 29, 1, 19, 18, 15 } 929 }; 930 const uint8_t ff_vc1_subblkpat_bits[3][15] = { 931 { 5, 5, 5, 5, 5, 6, 4, 5, 6, 5, 4, 5, 4, 5, 1}, 932 { 4, 3, 4, 4, 4, 5, 5, 4, 5, 4, 5, 4, 5, 5, 2}, 933 { 3, 3, 4, 3, 4, 5, 5, 3, 5, 4, 5, 4, 5, 5, 4} 934 }; 935 936 /* MV differential tables, p265 */ 937 const uint16_t ff_vc1_mv_diff_codes[4][73] = { 938 { 939 0, 2, 3, 8, 576, 3, 2, 6, 940 5, 577, 578, 7, 8, 9, 40, 19, 941 37, 82, 21, 22, 23, 579, 580, 166, 942 96, 167, 49, 194, 195, 581, 582, 583, 943 292, 293, 294, 13, 2, 7, 24, 50, 944 102, 295, 13, 7, 8, 18, 50, 103, 945 38, 20, 21, 22, 39, 204, 103, 23, 946 24, 25, 104, 410, 105, 106, 107, 108, 947 109, 220, 411, 442, 222, 443, 446, 447, 948 7 /* 73 elements */ 949 }, 950 { 951 0, 4, 5, 3, 4, 3, 4, 5, 952 20, 6, 21, 44, 45, 46, 3008, 95, 953 112, 113, 57, 3009, 3010, 116, 117, 3011, 954 118, 3012, 3013, 3014, 3015, 3016, 3017, 3018, 955 3019, 3020, 3021, 3022, 1, 4, 15, 160, 956 161, 41, 6, 11, 42, 162, 43, 119, 957 56, 57, 58, 163, 236, 237, 3023, 119, 958 120, 242, 122, 486, 1512, 487, 246, 494, 959 1513, 495, 1514, 1515, 1516, 1517, 1518, 1519, 960 31 /* 73 elements */ 961 }, 962 { 963 0, 512, 513, 514, 515, 2, 3, 258, 964 259, 260, 261, 262, 263, 264, 265, 266, 965 267, 268, 269, 270, 271, 272, 273, 274, 966 275, 276, 277, 278, 279, 280, 281, 282, 967 283, 284, 285, 286, 1, 5, 287, 288, 968 289, 290, 6, 7, 291, 292, 293, 294, 969 295, 296, 297, 298, 299, 300, 301, 302, 970 303, 304, 305, 306, 307, 308, 309, 310, 971 311, 312, 313, 314, 315, 316, 317, 318, 972 319 /* 73 elements */ 973 }, 974 { 975 0, 1, 1, 2, 3, 4, 1, 5, 976 4, 3, 5, 8, 6, 9, 10, 11, 977 12, 7, 104, 14, 105, 4, 10, 15, 978 11, 6, 14, 8, 106, 107, 108, 15, 979 109, 9, 55, 10, 1, 2, 1, 2, 980 3, 12, 6, 2, 6, 7, 28, 7, 981 15, 8, 5, 18, 29, 152, 77, 24, 982 25, 26, 39, 108, 13, 109, 55, 56, 983 57, 116, 11, 153, 234, 235, 118, 119, 984 15 /* 73 elements */ 985 } 986 }; 987 const uint8_t ff_vc1_mv_diff_bits[4][73] = { 988 { 989 6, 7, 7, 8, 14, 6, 5, 6, 7, 14, 14, 6, 6, 6, 8, 9, 990 10, 9, 7, 7, 7, 14, 14, 10, 9, 10, 8, 10, 10, 14, 14, 14, 991 13, 13, 13, 6, 3, 5, 6, 8, 9, 13, 5, 4, 4, 5, 7, 9, 992 6, 5, 5, 5, 6, 9, 8, 5, 5, 5, 7, 10, 7, 7, 7, 7, 993 7, 8, 10, 9, 8, 9, 9, 9, 3 /* 73 elements */ 994 }, 995 { 996 5, 7, 7, 6, 6, 5, 5, 6, 7, 5, 7, 8, 8, 8, 14, 9, 997 9, 9, 8, 14, 14, 9, 9, 14, 9, 14, 14, 14, 14, 14, 14, 14, 998 14, 14, 14, 14, 2, 3, 6, 8, 8, 6, 3, 4, 6, 8, 6, 9, 999 6, 6, 6, 8, 8, 8, 14, 7, 7, 8, 7, 9, 13, 9, 8, 9, 1000 13, 9, 13, 13, 13, 13, 13, 13, 5 /* 73 elements */ 1001 1002 }, 1003 { 1004 3, 12, 12, 12, 12, 3, 4, 11, 11, 11, 11, 11, 11, 11, 11, 11, 1005 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 1006 11, 11, 11, 11, 1, 5, 11, 11, 11, 11, 4, 4, 11, 11, 11, 11, 1007 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 1008 11, 11, 11, 11, 11, 11, 11, 11, 11 /* 73 elements */ 1009 }, 1010 { 1011 15, 11, 15, 15, 15, 15, 12, 15, 12, 11, 12, 12, 15, 12, 12, 12, 1012 12, 15, 15, 12, 15, 10, 11, 12, 11, 10, 11, 10, 15, 15, 15, 11, 1013 15, 10, 14, 10, 4, 4, 5, 7, 8, 9, 5, 3, 4, 5, 6, 8, 1014 5, 4, 3, 5, 6, 8, 7, 5, 5, 5, 6, 7, 9, 7, 6, 6, 1015 6, 7, 10, 8, 8, 8, 7, 7, 4 /* 73 elements */ 1016 } 1017 }; 1018 1019 /* DC differentials low+hi-mo, p217 are the same as in msmpeg4data .h */ 1020 1021 /* Table 232 */ 1022 const uint8_t ff_vc1_simple_progressive_4x4_zz [16] = { 1023 0, 8, 16, 1, 1024 9, 24, 17, 2, 1025 10, 18, 25, 3, 1026 11, 26, 19, 27 1027 }; 1028 1029 const uint8_t ff_vc1_adv_progressive_8x4_zz [32] = { /* Table 233 */ 1030 0, 8, 1, 16, 2, 9, 10, 3, 1031 24, 17, 4, 11, 18, 12, 5, 19, 1032 25, 13, 20, 26, 27, 6, 21, 28, 1033 14, 22, 29, 7, 30, 15, 23, 31 1034 }; 1035 1036 const uint8_t ff_vc1_adv_progressive_4x8_zz [32] = { /* Table 234 */ 1037 0, 1, 8, 2, 1038 9, 16, 17, 24, 1039 10, 32, 25, 18, 1040 40, 3, 33, 26, 1041 48, 11, 56, 41, 1042 34, 49, 57, 42, 1043 19, 50, 27, 58, 1044 35, 43, 51, 59 1045 }; 1046 1047 const uint8_t ff_vc1_adv_interlaced_8x8_zz [64] = { /* Table 235 */ 1048 0, 8, 1, 16, 24, 9, 2, 32, 1049 40, 48, 56, 17, 10, 3, 25, 18, 1050 11, 4, 33, 41, 49, 57, 26, 34, 1051 42, 50, 58, 19, 12, 5, 27, 20, 1052 13, 6, 35, 28, 21, 14, 7, 15, 1053 22, 29, 36, 43, 51, 59, 60, 52, 1054 44, 37, 30, 23, 31, 38, 45, 53, 1055 61, 62, 54, 46, 39, 47, 55, 63 1056 }; 1057 1058 const uint8_t ff_vc1_adv_interlaced_8x4_zz [32] = { /* Table 236 */ 1059 0, 8, 16, 24, 1, 9, 2, 17, 1060 25, 10, 3, 18, 26, 4, 11, 19, 1061 12, 5, 13, 20, 27, 6, 21, 28, 1062 14, 22, 29, 7, 30, 15, 23, 31 1063 }; 1064 1065 const uint8_t ff_vc1_adv_interlaced_4x8_zz [32] = { /* Table 237 */ 1066 0, 1, 2, 8, 1067 16, 9, 24, 17, 1068 10, 3, 32, 40, 1069 48, 56, 25, 18, 1070 33, 26, 41, 34, 1071 49, 57, 11, 42, 1072 19, 50, 27, 58, 1073 35, 43, 51, 59 1074 }; 1075 1076 const uint8_t ff_vc1_adv_interlaced_4x4_zz [16] = { /* Table 238 */ 1077 0, 8, 16, 24, 1078 1, 9, 17, 2, 1079 25, 10, 18, 3, 1080 26, 11, 19, 27 1081 }; 1082 1083 1084 /* DQScale as specified in 8.1.3.9 - almost identical to 0x40000/i */ 1085 const int32_t ff_vc1_dqscale[63] = { 1086 0x40000, 0x20000, 0x15555, 0x10000, 0xCCCD, 0xAAAB, 0x9249, 0x8000, 1087 0x71C7, 0x6666, 0x5D17, 0x5555, 0x4EC5, 0x4925, 0x4444, 0x4000, 1088 0x3C3C, 0x38E4, 0x35E5, 0x3333, 0x30C3, 0x2E8C, 0x2C86, 0x2AAB, 1089 0x28F6, 0x2762, 0x25ED, 0x2492, 0x234F, 0x2222, 0x2108, 0x2000, 1090 0x1F08, 0x1E1E, 0x1D42, 0x1C72, 0x1BAD, 0x1AF3, 0x1A42, 0x199A, 1091 0x18FA, 0x1862, 0x17D0, 0x1746, 0x16C1, 0x1643, 0x15CA, 0x1555, 1092 0x14E6, 0x147B, 0x1414, 0x13B1, 0x1352, 0x12F7, 0x129E, 0x1249, 1093 0x11F7, 0x11A8, 0x115B, 0x1111, 0x10C9, 0x1084, 0x1041 1094 }; 1095 1096 /* P Interlaced field picture MV predictor scaling values (Table 114) */ 1097 const uint16_t ff_vc1_field_mvpred_scales[2][7][4] = { 1098 // Refdist: 1099 // 0 1 2 3 or greater 1100 { // current field is first 1101 { 128, 192, 213, 224 }, // SCALEOPP 1102 { 512, 341, 307, 293 }, // SCALESAME1 1103 { 219, 236, 242, 245 }, // SCALESAME2 1104 { 32, 48, 53, 56 }, // SCALEZONE1_X 1105 { 8, 12, 13, 14 }, // SCALEZONE1_Y 1106 { 37, 20, 14, 11 }, // ZONE1OFFSET_X 1107 { 10, 5, 4, 3 } // ZONE1OFFSET_Y 1108 }, 1109 { // current field is second 1110 { 128, 64, 43, 32 }, // SCALEOPP 1111 { 512, 1024, 1536, 2048 }, // SCALESAME1 1112 { 219, 204, 200, 198 }, // SCALESAME2 1113 { 32, 16, 11, 8 }, // SCALEZONE1_X 1114 { 8, 4, 3, 2 }, // SCALEZONE1_Y 1115 { 37, 52, 56, 58 }, // ZONE1OFFSET_X 1116 { 10, 13, 14, 15 } // ZONE1OFFSET_Y 1117 } 1118 }; 1119 1120 /* B Interlaced field picture backward MV predictor scaling values for first field (Table 115) */ 1121 const uint16_t ff_vc1_b_field_mvpred_scales[7][4] = { 1122 // BRFD: 1123 // 0 1 2 3 or greater 1124 { 171, 205, 219, 228 }, // SCALESAME 1125 { 384, 320, 299, 288 }, // SCALEOPP1 1126 { 230, 239, 244, 246 }, // SCALEOPP2 1127 { 43, 51, 55, 57 }, // SCALEZONE1_X 1128 { 11, 13, 14, 14 }, // SCALEZONE1_Y 1129 { 26, 17, 12, 10 }, // ZONE1OFFSET_X 1130 { 7, 4, 3, 3 } // ZONE1OFFSET_Y 1131 }; 1132 1133 const int ff_vc1_ac_sizes[AC_MODES] = { 1134 186, 169, 133, 149, 103, 103, 163, 175 1135 }; 1136