1 /* ------------------------------------------------------------------ 2 * Copyright (C) 1998-2009 PacketVideo 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 13 * express or implied. 14 * See the License for the specific language governing permissions 15 * and limitations under the License. 16 * ------------------------------------------------------------------- 17 */ 18 /****************************************************************************** 19 * 20 * This software module was originally developed by 21 * 22 * Robert Danielsen (Telenor / ACTS-MoMuSys). 23 * 24 * and edited by 25 * 26 * Minhua Zhou (HHI / ACTS-MoMuSys). 27 * Luis Ducla-Soares (IST / ACTS-MoMuSys). 28 * 29 * in the course of development of the MPEG-4 Video (ISO/IEC 14496-2) standard. 30 * This software module is an implementation of a part of one or more MPEG-4 31 * Video (ISO/IEC 14496-2) tools as specified by the MPEG-4 Video (ISO/IEC 32 * 14496-2) standard. 33 * 34 * ISO/IEC gives users of the MPEG-4 Video (ISO/IEC 14496-2) standard free 35 * license to this software module or modifications thereof for use in hardware 36 * or software products claiming conformance to the MPEG-4 Video (ISO/IEC 37 * 14496-2) standard. 38 * 39 * Those intending to use this software module in hardware or software products 40 * are advised that its use may infringe existing patents. The original 41 * developer of this software module and his/her company, the subsequent 42 * editors and their companies, and ISO/IEC have no liability for use of this 43 * software module or modifications thereof in an implementation. Copyright is 44 * not released for non MPEG-4 Video (ISO/IEC 14496-2) standard conforming 45 * products. 46 * 47 * ACTS-MoMuSys partners retain full right to use the code for his/her own 48 * purpose, assign or donate the code to a third party and to inhibit third 49 * parties from using the code for non MPEG-4 Video (ISO/IEC 14496-2) standard 50 * conforming products. This copyright notice must be included in all copies or 51 * derivative works. 52 * 53 * Copyright (c) 1997 54 * 55 *****************************************************************************/ 56 57 58 /***********************************************************HeaderBegin******* 59 * 60 * File: vlc.h 61 * 62 * Author: Robert Danielsen 63 * Created: 07.06.96 64 * 65 * Description: vlc tables for encoder 66 * 67 * Notes: Idea taken from MPEG-2 software simulation group 68 * 69 * Modified: 70 * 28.10.96 Robert Danielsen: Added tables for Intra luminance 71 * coefficients 72 * 01.05.97 Luis Ducla-Soares: added VM7.0 Reversible VLC tables (RVLC). 73 * 13.05.97 Minhua Zhou: added cbpy_tab3,cbpy_tab2 74 * 75 ***********************************************************HeaderEnd*********/ 76 77 /************************ INCLUDE FILES ********************************/ 78 79 #ifndef _VLC_ENC_TAB_H_ 80 #define _VLC_ENC_TAB_H_ 81 82 83 #include "mp4def.h" 84 /* type definitions for variable length code table entries */ 85 86 87 88 static const Int intra_max_level[2][64] = 89 { 90 {27, 10, 5, 4, 3, 3, 3, 3, 91 2, 2, 1, 1, 1, 1, 1, 0, 92 0, 0, 0, 0, 0, 0, 0, 0, 93 0, 0, 0, 0, 0, 0, 0, 0, 94 0, 0, 0, 0, 0, 0, 0, 0, 95 0, 0, 0, 0, 0, 0, 0, 0, 96 0, 0, 0, 0, 0, 0, 0, 0, 97 0, 0, 0, 0, 0, 0, 0, 0, 98 }, 99 100 {8, 3, 2, 2, 2, 2, 2, 1, 101 1, 1, 1, 1, 1, 1, 1, 1, 102 1, 1, 1, 1, 1, 0, 0, 0, 103 0, 0, 0, 0, 0, 0, 0, 0, 104 0, 0, 0, 0, 0, 0, 0, 0, 105 0, 0, 0, 0, 0, 0, 0, 0, 106 0, 0, 0, 0, 0, 0, 0, 0, 107 0, 0, 0, 0, 0, 0, 0, 0 108 } 109 }; 110 111 112 static const Int inter_max_level[2][64] = 113 { 114 {12, 6, 4, 3, 3, 3, 3, 2, 115 2, 2, 2, 1, 1, 1, 1, 1, 116 1, 1, 1, 1, 1, 1, 1, 1, 117 1, 1, 1, 0, 0, 0, 0, 0, 118 0, 0, 0, 0, 0, 0, 0, 0, 119 0, 0, 0, 0, 0, 0, 0, 0, 120 0, 0, 0, 0, 0, 0, 0, 0, 121 0, 0, 0, 0, 0, 0, 0, 0}, 122 123 {3, 2, 1, 1, 1, 1, 1, 1, 124 1, 1, 1, 1, 1, 1, 1, 1, 125 1, 1, 1, 1, 1, 1, 1, 1, 126 1, 1, 1, 1, 1, 1, 1, 1, 127 1, 1, 1, 1, 1, 1, 1, 1, 128 1, 0, 0, 0, 0, 0, 0, 0, 129 0, 0, 0, 0, 0, 0, 0, 0, 130 0, 0, 0, 0, 0, 0, 0, 0} 131 }; 132 133 134 static const Int intra_max_run0[28] = { 999, 14, 9, 7, 3, 2, 1, 135 1, 1, 1, 1, 0, 0, 0, 136 0, 0, 0, 0, 0, 0, 0, 137 0, 0, 0, 0, 0, 0, 0 138 }; 139 140 141 static const Int intra_max_run1[9] = { 999, 20, 6, 142 1, 0, 0, 143 0, 0, 0 144 }; 145 146 static const Int inter_max_run0[13] = { 999, 147 26, 10, 6, 2, 1, 1, 148 0, 0, 0, 0, 0, 0 149 }; 150 151 152 static const Int inter_max_run1[4] = { 999, 40, 1, 0 }; 153 154 155 156 /* DC prediction sizes */ 157 158 static const VLCtable DCtab_lum[13] = 159 { 160 {3, 3}, {3, 2}, {2, 2}, {2, 3}, {1, 3}, {1, 4}, {1, 5}, {1, 6}, {1, 7}, 161 {1, 8}, {1, 9}, {1, 10}, {1, 11} 162 }; 163 164 static const VLCtable DCtab_chrom[13] = 165 { 166 {3, 2}, {2, 2}, {1, 2}, {1, 3}, {1, 4}, {1, 5}, {1, 6}, {1, 7}, {1, 8}, 167 {1, 9}, {1, 10}, {1, 11}, {1, 12} 168 }; 169 170 /* Motion vectors */ 171 172 static const VLCtable mvtab[33] = 173 { 174 {1, 1}, {1, 2}, {1, 3}, {1, 4}, {3, 6}, {5, 7}, {4, 7}, {3, 7}, 175 {11, 9}, {10, 9}, {9, 9}, {17, 10}, {16, 10}, {15, 10}, {14, 10}, {13, 10}, 176 {12, 10}, {11, 10}, {10, 10}, {9, 10}, {8, 10}, {7, 10}, {6, 10}, {5, 10}, 177 {4, 10}, {7, 11}, {6, 11}, {5, 11}, {4, 11}, {3, 11}, {2, 11}, {3, 12}, 178 {2, 12} 179 }; 180 181 182 /* MCBPC Indexing by cbpc in first two bits, mode in last two. 183 CBPC as in table 4/H.263, MB type (mode): 3 = 01, 4 = 10. 184 Example: cbpc = 01 and mode = 4 gives index = 0110 = 6. */ 185 186 static const VLCtable mcbpc_intra_tab[15] = 187 { 188 {0x01, 9}, {0x01, 1}, {0x01, 4}, {0x00, 0}, 189 {0x00, 0}, {0x01, 3}, {0x01, 6}, {0x00, 0}, 190 {0x00, 0}, {0x02, 3}, {0x02, 6}, {0x00, 0}, 191 {0x00, 0}, {0x03, 3}, {0x03, 6} 192 }; 193 194 195 /* MCBPC inter. 196 Addressing: 5 bit ccmmm (cc = CBPC, mmm = mode (1-4 binary)) */ 197 198 static const VLCtable mcbpc_inter_tab[29] = 199 { 200 {1, 1}, {3, 3}, {2, 3}, {3, 5}, {4, 6}, {1, 9}, {0, 0}, {0, 0}, 201 {3, 4}, {7, 7}, {5, 7}, {4, 8}, {4, 9}, {0, 0}, {0, 0}, {0, 0}, 202 {2, 4}, {6, 7}, {4, 7}, {3, 8}, {3, 9}, {0, 0}, {0, 0}, {0, 0}, 203 {5, 6}, {5, 9}, {5, 8}, {3, 7}, {2, 9} 204 }; 205 206 207 208 /* CBPY. Straightforward indexing */ 209 210 static const VLCtable cbpy_tab[16] = 211 { 212 {3, 4}, {5, 5}, {4, 5}, {9, 4}, {3, 5}, {7, 4}, {2, 6}, {11, 4}, 213 {2, 5}, {3, 6}, {5, 4}, {10, 4}, {4, 4}, {8, 4}, {6, 4}, {3, 2} 214 }; 215 216 static const VLCtable cbpy_tab3[8] = 217 { 218 {3, 3}, {1, 6}, {1, 5}, {2, 3}, {2, 5}, {3, 5}, {1, 3}, {1, 1} 219 }; 220 static const VLCtable cbpy_tab2[4] = 221 { 222 {1, 4}, {1, 3}, {1, 2}, {1, 1} 223 }; 224 225 /* DCT coefficients. Four tables, two for last = 0, two for last = 1. 226 the sign bit must be added afterwards. */ 227 228 /* first part of coeffs for last = 0. Indexed by [run][level-1] */ 229 230 static const VLCtable coeff_tab0[2][12] = 231 { 232 /* run = 0 */ 233 { 234 {0x02, 2}, {0x0f, 4}, {0x15, 6}, {0x17, 7}, 235 {0x1f, 8}, {0x25, 9}, {0x24, 9}, {0x21, 10}, 236 {0x20, 10}, {0x07, 11}, {0x06, 11}, {0x20, 11} 237 }, 238 /* run = 1 */ 239 { 240 {0x06, 3}, {0x14, 6}, {0x1e, 8}, {0x0f, 10}, 241 {0x21, 11}, {0x50, 12}, {0x00, 0}, {0x00, 0}, 242 {0x00, 0}, {0x00, 0}, {0x00, 0}, {0x00, 0} 243 } 244 }; 245 246 /* rest of coeffs for last = 0. indexing by [run-2][level-1] */ 247 248 static const VLCtable coeff_tab1[25][4] = 249 { 250 /* run = 2 */ 251 { 252 {0x0e, 4}, {0x1d, 8}, {0x0e, 10}, {0x51, 12} 253 }, 254 /* run = 3 */ 255 { 256 {0x0d, 5}, {0x23, 9}, {0x0d, 10}, {0x00, 0} 257 }, 258 /* run = 4-26 */ 259 { 260 {0x0c, 5}, {0x22, 9}, {0x52, 12}, {0x00, 0} 261 }, 262 { 263 {0x0b, 5}, {0x0c, 10}, {0x53, 12}, {0x00, 0} 264 }, 265 { 266 {0x13, 6}, {0x0b, 10}, {0x54, 12}, {0x00, 0} 267 }, 268 { 269 {0x12, 6}, {0x0a, 10}, {0x00, 0}, {0x00, 0} 270 }, 271 { 272 {0x11, 6}, {0x09, 10}, {0x00, 0}, {0x00, 0} 273 }, 274 { 275 {0x10, 6}, {0x08, 10}, {0x00, 0}, {0x00, 0} 276 }, 277 { 278 {0x16, 7}, {0x55, 12}, {0x00, 0}, {0x00, 0} 279 }, 280 { 281 {0x15, 7}, {0x00, 0}, {0x00, 0}, {0x00, 0} 282 }, 283 { 284 {0x14, 7}, {0x00, 0}, {0x00, 0}, {0x00, 0} 285 }, 286 { 287 {0x1c, 8}, {0x00, 0}, {0x00, 0}, {0x00, 0} 288 }, 289 { 290 {0x1b, 8}, {0x00, 0}, {0x00, 0}, {0x00, 0} 291 }, 292 { 293 {0x21, 9}, {0x00, 0}, {0x00, 0}, {0x00, 0} 294 }, 295 { 296 {0x20, 9}, {0x00, 0}, {0x00, 0}, {0x00, 0} 297 }, 298 { 299 {0x1f, 9}, {0x00, 0}, {0x00, 0}, {0x00, 0} 300 }, 301 { 302 {0x1e, 9}, {0x00, 0}, {0x00, 0}, {0x00, 0} 303 }, 304 { 305 {0x1d, 9}, {0x00, 0}, {0x00, 0}, {0x00, 0} 306 }, 307 { 308 {0x1c, 9}, {0x00, 0}, {0x00, 0}, {0x00, 0} 309 }, 310 { 311 {0x1b, 9}, {0x00, 0}, {0x00, 0}, {0x00, 0} 312 }, 313 { 314 {0x1a, 9}, {0x00, 0}, {0x00, 0}, {0x00, 0} 315 }, 316 { 317 {0x22, 11}, {0x00, 0}, {0x00, 0}, {0x00, 0} 318 }, 319 { 320 {0x23, 11}, {0x00, 0}, {0x00, 0}, {0x00, 0} 321 }, 322 { 323 {0x56, 12}, {0x00, 0}, {0x00, 0}, {0x00, 0} 324 }, 325 { 326 {0x57, 12}, {0x00, 0}, {0x00, 0}, {0x00, 0} 327 } 328 }; 329 330 /* first coeffs of last = 1. indexing by [run][level-1] */ 331 332 static const VLCtable coeff_tab2[2][3] = 333 { 334 /* run = 0 */ 335 { 336 {0x07, 4}, {0x19, 9}, {0x05, 11} 337 }, 338 /* run = 1 */ 339 { 340 {0x0f, 6}, {0x04, 11}, {0x00, 0} 341 } 342 }; 343 344 /* rest of coeffs for last = 1. indexing by [run-2] */ 345 346 static const VLCtable coeff_tab3[40] = 347 { 348 {0x0e, 6}, {0x0d, 6}, {0x0c, 6}, 349 {0x13, 7}, {0x12, 7}, {0x11, 7}, {0x10, 7}, 350 {0x1a, 8}, {0x19, 8}, {0x18, 8}, {0x17, 8}, 351 {0x16, 8}, {0x15, 8}, {0x14, 8}, {0x13, 8}, 352 {0x18, 9}, {0x17, 9}, {0x16, 9}, {0x15, 9}, 353 {0x14, 9}, {0x13, 9}, {0x12, 9}, {0x11, 9}, 354 {0x07, 10}, {0x06, 10}, {0x05, 10}, {0x04, 10}, 355 {0x24, 11}, {0x25, 11}, {0x26, 11}, {0x27, 11}, 356 {0x58, 12}, {0x59, 12}, {0x5a, 12}, {0x5b, 12}, 357 {0x5c, 12}, {0x5d, 12}, {0x5e, 12}, {0x5f, 12}, 358 {0x00, 0} 359 }; 360 361 /* New tables for Intra luminance coefficients. Same codewords, 362 different meaning */ 363 364 /* Coeffs for last = 0, run = 0. Indexed by [level-1] */ 365 366 static const VLCtable coeff_tab4[27] = 367 { 368 /* run = 0 */ 369 {0x02, 2}, {0x06, 3}, {0x0f, 4}, {0x0d, 5}, 370 {0x0c, 5}, {0x15, 6}, {0x13, 6}, {0x12, 6}, 371 {0x17, 7}, {0x1f, 8}, {0x1e, 8}, {0x1d, 8}, 372 {0x25, 9}, {0x24, 9}, {0x23, 9}, {0x21, 9}, 373 {0x21, 10}, {0x20, 10}, {0x0f, 10}, {0x0e, 10}, 374 {0x07, 11}, {0x06, 11}, {0x20, 11}, {0x21, 11}, 375 {0x50, 12}, {0x51, 12}, {0x52, 12} 376 }; 377 378 /* Coeffs for last = 0, run = 1. Indexed by [level-1] */ 379 380 static const VLCtable coeff_tab5[10] = 381 { 382 {0x0e, 4}, {0x14, 6}, {0x16, 7}, {0x1c, 8}, 383 {0x20, 9}, {0x1f, 9}, {0x0d, 10}, {0x22, 11}, 384 {0x53, 12}, {0x55, 12} 385 }; 386 387 /* Coeffs for last = 0, run = 2 -> 9. Indexed by [run-2][level-1] */ 388 389 static const VLCtable coeff_tab6[8][5] = 390 { 391 /* run = 2 */ 392 { 393 {0x0b, 5}, {0x15, 7}, {0x1e, 9}, {0x0c, 10}, 394 {0x56, 12} 395 }, 396 /* run = 3 */ 397 { 398 {0x11, 6}, {0x1b, 8}, {0x1d, 9}, {0x0b, 10}, 399 {0x00, 0} 400 }, 401 /* run = 4 */ 402 { 403 {0x10, 6}, {0x22, 9}, {0x0a, 10}, {0x00, 0}, 404 {0x00, 0} 405 }, 406 /* run = 5 */ 407 { 408 {0x0d, 6}, {0x1c, 9}, {0x08, 10}, {0x00, 0}, 409 {0x00, 0} 410 }, 411 /* run = 6 */ 412 { 413 {0x12, 7}, {0x1b, 9}, {0x54, 12}, {0x00, 0}, 414 {0x00, 0} 415 }, 416 /* run = 7 */ 417 { 418 {0x14, 7}, {0x1a, 9}, {0x57, 12}, {0x00, 0}, 419 {0x00, 0} 420 }, 421 /* run = 8 */ 422 { 423 {0x19, 8}, {0x09, 10}, {0x00, 0}, {0x00, 0}, 424 {0x00, 0} 425 }, 426 /* run = 9 */ 427 { 428 {0x18, 8}, {0x23, 11}, {0x00, 0}, {0x00, 0}, 429 {0x00, 0} 430 } 431 }; 432 433 /* Coeffs for last = 0, run = 10 -> 14. Indexed by [run-10] */ 434 435 static const VLCtable coeff_tab7[5] = 436 { 437 {0x17, 8}, {0x19, 9}, {0x18, 9}, {0x07, 10}, 438 {0x58, 12} 439 }; 440 441 /* Coeffs for last = 1, run = 0. Indexed by [level-1] */ 442 443 static const VLCtable coeff_tab8[8] = 444 { 445 {0x07, 4}, {0x0c, 6}, {0x16, 8}, {0x17, 9}, 446 {0x06, 10}, {0x05, 11}, {0x04, 11}, {0x59, 12} 447 }; 448 449 /* Coeffs for last = 1, run = 1 -> 6. Indexed by [run-1][level-1] */ 450 451 static const VLCtable coeff_tab9[6][3] = 452 { 453 /* run = 1 */ 454 { 455 {0x0f, 6}, {0x16, 9}, {0x05, 10} 456 }, 457 /* run = 2 */ 458 { 459 {0x0e, 6}, {0x04, 10}, {0x00, 0} 460 }, 461 /* run = 3 */ 462 { 463 {0x11, 7}, {0x24, 11}, {0x00, 0} 464 }, 465 /* run = 4 */ 466 { 467 {0x10, 7}, {0x25, 11}, {0x00, 0} 468 }, 469 /* run = 5 */ 470 { 471 {0x13, 7}, {0x5a, 12}, {0x00, 0} 472 }, 473 /* run = 6 */ 474 { 475 {0x15, 8}, {0x5b, 12}, {0x00, 0} 476 } 477 }; 478 479 /* Coeffs for last = 1, run = 7 -> 20. Indexed by [run-7] */ 480 481 static const VLCtable coeff_tab10[14] = 482 { 483 {0x14, 8}, {0x13, 8}, {0x1a, 8}, {0x15, 9}, 484 {0x14, 9}, {0x13, 9}, {0x12, 9}, {0x11, 9}, 485 {0x26, 11}, {0x27, 11}, {0x5c, 12}, {0x5d, 12}, 486 {0x5e, 12}, {0x5f, 12} 487 }; 488 489 490 #ifndef NO_RVLC 491 /* RVLC tables */ 492 /* DCT coefficients. Four tables, two for last = 0, two for last = 1. 493 the sign bit must be added afterwards. */ 494 495 /* DCT coeffs (intra) for last = 0. */ 496 497 /* Indexed by [level-1] */ 498 499 static const VLCtable coeff_RVLCtab1[27] = 500 { 501 /* run = 0 */ 502 { 0x6, 3}, 503 { 0x7, 3}, 504 { 0xa, 4}, 505 { 0x9, 5}, 506 { 0x14, 6}, 507 { 0x15, 6}, 508 { 0x34, 7}, 509 { 0x74, 8}, 510 { 0x75, 8}, 511 { 0xdd, 9}, 512 { 0xec, 9}, 513 { 0x1ec, 10}, 514 { 0x1ed, 10}, 515 { 0x1f4, 10}, 516 { 0x3ec, 11}, 517 { 0x3ed, 11}, 518 { 0x3f4, 11}, 519 { 0x77d, 12}, 520 { 0x7bc, 12}, 521 { 0xfbd, 13}, 522 { 0xfdc, 13}, 523 { 0x7bd, 12}, 524 { 0xfdd, 13}, 525 { 0x1fbd, 14}, 526 { 0x1fdc, 14}, 527 { 0x1fdd, 14}, 528 { 0x1ffc, 15} 529 }; 530 531 532 /* Indexed by [level-1] */ 533 534 static const VLCtable coeff_RVLCtab2[13] = 535 { 536 /* run = 1 */ 537 { 0x1, 4}, 538 { 0x8, 5}, 539 { 0x2d, 7}, 540 { 0x6c, 8}, 541 { 0x6d, 8}, 542 { 0xdc, 9}, 543 { 0x1dd, 10}, 544 { 0x3dc, 11}, 545 { 0x3dd, 11}, 546 { 0x77c, 12}, 547 { 0xfbc, 13}, 548 { 0x1f7d, 14}, 549 { 0x1fbc, 14} 550 }; 551 552 553 /* Indexed by [level-1] */ 554 555 static const VLCtable coeff_RVLCtab3[11] = 556 { 557 /* run = 2 */ 558 559 { 0x4, 5}, 560 { 0x2c, 7}, 561 { 0xbc, 9}, 562 { 0x1dc, 10}, 563 { 0x3bc, 11}, 564 { 0x3bd, 11}, 565 { 0xefd, 13}, 566 { 0xf7c, 13}, 567 { 0xf7d, 13}, 568 { 0x1efd, 14}, 569 { 0x1f7c, 14} 570 }; 571 572 573 /* Indexed by [level-1] */ 574 575 static const VLCtable coeff_RVLCtab4[9] = 576 { 577 /* run = 3 */ 578 { 0x5, 5}, 579 { 0x5c, 8}, 580 { 0xbd, 9}, 581 { 0x37d, 11}, 582 { 0x6fc, 12}, 583 { 0xefc, 13}, 584 { 0x1dfd, 14}, 585 { 0x1efc, 14}, 586 { 0x1ffd, 15} 587 }; 588 589 590 /* Indexed by [run-4][level-1] */ 591 592 static const VLCtable coeff_RVLCtab5[2][6] = 593 { 594 /* run = 4 */ 595 { 596 { 0xc, 6}, 597 { 0x5d, 8}, 598 { 0x1bd, 10}, 599 { 0x3fd, 12}, 600 { 0x6fd, 12}, 601 { 0x1bfd, 14} 602 }, 603 /* run = 5 */ 604 { 605 { 0xd, 6}, 606 { 0x7d, 9}, 607 { 0x2fc, 11}, 608 { 0x5fc, 12}, 609 { 0x1bfc, 14}, 610 { 0x1dfc, 14} 611 } 612 }; 613 614 615 /* Indexed by [run-6][level-1] */ 616 617 static const VLCtable coeff_RVLCtab6[2][5] = 618 { 619 620 /* run = 6 */ 621 { 622 { 0x1c, 7}, 623 { 0x17c, 10}, 624 { 0x2fd, 11}, 625 { 0x5fd, 12}, 626 { 0x2ffc, 15} 627 }, 628 /* run = 7 */ 629 { 630 { 0x1d, 7}, 631 { 0x17d, 10}, 632 { 0x37c, 11}, 633 { 0xdfd, 13}, 634 { 0x2ffd, 15} 635 } 636 637 }; 638 /* Indexed by [run-8][level-1] */ 639 640 static const VLCtable coeff_RVLCtab7[2][4] = 641 { 642 /* run = 8 */ 643 { 644 { 0x3c, 8}, 645 { 0x1bc, 10}, 646 { 0xbfd, 13}, 647 { 0x17fd, 14} 648 }, 649 /* run = 9 */ 650 { 651 { 0x3d, 8}, 652 { 0x1fd, 11}, 653 { 0xdfc, 13}, 654 { 0x37fc, 15}, 655 } 656 }; 657 658 659 660 /* Indexed by [run-10][level-1] */ 661 662 static const VLCtable coeff_RVLCtab8[3][2] = 663 { 664 /* run = 10 */ 665 { 666 { 0x7c, 9}, 667 { 0x3fc, 12} 668 }, 669 /* run = 11 */ 670 { 671 { 0xfc, 10}, 672 { 0xbfc, 13} 673 }, 674 /* run = 12 */ 675 { 676 { 0xfd, 10}, 677 { 0x37fd, 15} 678 } 679 }; 680 681 682 /* Indexed by [level-1] */ 683 684 static const VLCtable coeff_RVLCtab9[7] = 685 { 686 /* run = 13 -> 19 */ 687 { 0x1fc, 11}, 688 { 0x7fc, 13}, 689 { 0x7fd, 13}, 690 { 0xffc, 14}, 691 { 0xffd, 14}, 692 { 0x17fc, 14}, 693 { 0x3bfc, 15} 694 }; 695 696 697 698 /* first coeffs of last = 1. indexing by [run][level-1] */ 699 700 static const VLCtable coeff_RVLCtab10[2][5] = 701 { 702 /* run = 0 */ 703 { 704 { 0xb, 4}, 705 { 0x78, 8}, 706 { 0x3f5, 11}, 707 { 0xfec, 13}, 708 { 0x1fec, 14} 709 }, 710 /* run = 1 */ 711 { 712 { 0x12, 5}, 713 { 0xed, 9}, 714 { 0x7dc, 12}, 715 { 0x1fed, 14}, 716 { 0x3bfd, 15} 717 } 718 719 }; 720 721 static const VLCtable coeff_RVLCtab11[3] = 722 { 723 /* run = 2 */ 724 { 0x13, 5}, 725 { 0x3f8, 11}, 726 { 0x3dfc, 15} 727 728 }; 729 730 static const VLCtable coeff_RVLCtab12[11][2] = 731 { 732 /* run = 3 */ 733 { 734 { 0x18, 6}, 735 { 0x7dd, 12} 736 }, 737 /* run = 4 */ 738 { 739 { 0x19, 6}, 740 { 0x7ec, 12} 741 }, 742 /* run = 5 */ 743 { 744 { 0x22, 6}, 745 { 0xfed, 13} 746 }, 747 /* run = 6 */ 748 { 749 { 0x23, 6}, 750 { 0xff4, 13} 751 }, 752 /* run = 7 */ 753 { 754 { 0x35, 7}, 755 { 0xff5, 13} 756 }, 757 /* run = 8 */ 758 { 759 { 0x38, 7}, 760 { 0xff8, 13} 761 }, 762 /* run = 9 */ 763 { 764 { 0x39, 7}, 765 { 0xff9, 13} 766 }, 767 /* run = 10 */ 768 { 769 { 0x42, 7}, 770 { 0x1ff4, 14} 771 }, 772 /* run = 11 */ 773 { 774 { 0x43, 7}, 775 { 0x1ff5, 14} 776 }, 777 /* run = 12 */ 778 { 779 { 0x79, 8}, 780 { 0x1ff8, 14} 781 }, 782 /* run = 13 */ 783 { 784 { 0x82, 8}, 785 { 0x3dfd, 15} 786 } 787 788 }; 789 790 static const VLCtable coeff_RVLCtab13[32] = 791 { 792 /* run = 14 -> 44 */ 793 { 0x83, 8}, 794 { 0xf4, 9}, 795 { 0xf5, 9}, 796 { 0xf8, 9}, 797 { 0xf9, 9}, 798 { 0x102, 9}, 799 { 0x103, 9}, 800 { 0x1f5, 10}, 801 { 0x1f8, 10}, 802 { 0x1f9, 10}, 803 { 0x202, 10}, 804 { 0x203, 10}, 805 { 0x3f9, 11}, 806 { 0x402, 11}, 807 { 0x403, 11}, 808 { 0x7ed, 12}, 809 { 0x7f4, 12}, 810 { 0x7f5, 12}, 811 { 0x7f8, 12}, 812 { 0x7f9, 12}, 813 { 0x802, 12}, 814 { 0x803, 12}, 815 { 0x1002, 13}, 816 { 0x1003, 13}, 817 { 0x1ff9, 14}, 818 { 0x2002, 14}, 819 { 0x2003, 14}, 820 { 0x3efc, 15}, 821 { 0x3efd, 15}, 822 { 0x3f7c, 15}, 823 { 0x3f7d, 15} 824 }; 825 826 827 828 /* Coeffs for last = 0, run = 0. Indexed by [level-1] */ 829 830 static const VLCtable coeff_RVLCtab14[19] = 831 { 832 /* run = 0 */ 833 { 0x6, 3}, 834 { 0x1, 4}, 835 { 0x4, 5}, 836 { 0x1c, 7}, 837 { 0x3c, 8}, 838 { 0x3d, 8}, 839 { 0x7c, 9}, 840 { 0xfc, 10}, 841 { 0xfd, 10}, 842 { 0x1fc, 11}, 843 { 0x1fd, 11}, 844 { 0x3fc, 12}, 845 { 0x7fc, 13}, 846 { 0x7fd, 13}, 847 { 0xbfc, 13}, 848 { 0xbfd, 13}, 849 { 0xffc, 14}, 850 { 0xffd, 14}, 851 { 0x1ffc, 15} 852 }; 853 854 static const VLCtable coeff_RVLCtab15[10] = 855 { 856 /* run = 1 */ 857 { 0x7, 3}, 858 { 0xc, 6}, 859 { 0x5c, 8}, 860 { 0x7d, 9}, 861 { 0x17c, 10}, 862 { 0x2fc, 11}, 863 { 0x3fd, 12}, 864 { 0xdfc, 13}, 865 { 0x17fc, 14}, 866 { 0x17fd, 14} 867 }; 868 869 static const VLCtable coeff_RVLCtab16[2][7] = 870 { 871 /* run = 2 */ 872 { 873 { 0xa, 4}, 874 { 0x1d, 7}, 875 { 0xbc, 9}, 876 { 0x2fd, 11}, 877 { 0x5fc, 12}, 878 { 0x1bfc, 14}, 879 { 0x1bfd, 14} 880 }, 881 /* run = 3 */ 882 { 883 { 0x5, 5}, 884 { 0x5d, 8}, 885 { 0x17d, 10}, 886 { 0x5fd, 12}, 887 { 0xdfd, 13}, 888 { 0x1dfc, 14}, 889 { 0x1ffd, 15} 890 } 891 }; 892 893 static const VLCtable coeff_RVLCtab17[5] = 894 { 895 /* run = 4 */ 896 { 0x8, 5}, 897 { 0x6c, 8}, 898 { 0x37c, 11}, 899 { 0xefc, 13}, 900 { 0x2ffc, 15} 901 }; 902 903 static const VLCtable coeff_RVLCtab18[3][4] = 904 { 905 /* run = 5 */ 906 { 907 { 0x9, 5}, 908 { 0xbd, 9}, 909 { 0x37d, 11}, 910 { 0xefd, 13} 911 }, 912 /* run = 6 */ 913 { 914 { 0xd, 6}, 915 { 0x1bc, 10}, 916 { 0x6fc, 12}, 917 { 0x1dfd, 14} 918 }, 919 /* run = 7 */ 920 { 921 { 0x14, 6}, 922 { 0x1bd, 10}, 923 { 0x6fd, 12}, 924 { 0x2ffd, 15} 925 } 926 }; 927 928 static const VLCtable coeff_RVLCtab19[2][3] = 929 { 930 /* run = 8 */ 931 { 932 { 0x15, 6}, 933 { 0x1dc, 10}, 934 { 0xf7c, 13} 935 }, 936 /* run = 9 */ 937 { 938 { 0x2c, 7}, 939 { 0x1dd, 10}, 940 { 0x1efc, 14} 941 } 942 }; 943 944 static const VLCtable coeff_RVLCtab20[8][2] = 945 { 946 /* run = 10 */ 947 { 948 { 0x2d, 7}, 949 { 0x3bc, 11} 950 }, 951 /* run = 11 */ 952 { 953 { 0x34, 7}, 954 { 0x77c, 12} 955 }, 956 /* run = 12 */ 957 { 958 { 0x6d, 8}, 959 { 0xf7d, 13} 960 }, 961 /* run = 13 */ 962 { 963 { 0x74, 8}, 964 { 0x1efd, 14} 965 }, 966 /* run = 14 */ 967 { 968 { 0x75, 8}, 969 { 0x1f7c, 14} 970 }, 971 /* run = 15 */ 972 { 973 { 0xdc, 9}, 974 { 0x1f7d, 14} 975 }, 976 /* run = 16 */ 977 { 978 { 0xdd, 9}, 979 { 0x1fbc, 14} 980 }, 981 /* run = 17 */ 982 { 983 { 0xec, 9}, 984 { 0x37fc, 15} 985 } 986 }; 987 988 static const VLCtable coeff_RVLCtab21[21] = 989 { 990 /* run = 18 -> 38 */ 991 { 0x1ec, 10}, 992 { 0x1ed, 10}, 993 { 0x1f4, 10}, 994 { 0x3bd, 11}, 995 { 0x3dc, 11}, 996 { 0x3dd, 11}, 997 { 0x3ec, 11}, 998 { 0x3ed, 11}, 999 { 0x3f4, 11}, 1000 { 0x77d, 12}, 1001 { 0x7bc, 12}, 1002 { 0x7bd, 12}, 1003 { 0xfbc, 13}, 1004 { 0xfbd, 13}, 1005 { 0xfdc, 13}, 1006 { 0xfdd, 13}, 1007 { 0x1fbd, 14}, 1008 { 0x1fdc, 14}, 1009 { 0x1fdd, 14}, 1010 { 0x37fd, 15}, 1011 { 0x3bfc, 15} 1012 }; 1013 1014 1015 /* first coeffs of last = 1. indexing by [run][level-1] */ 1016 1017 static const VLCtable coeff_RVLCtab22[2][5] = 1018 { 1019 /* run = 0 */ 1020 { 1021 { 0xb, 4}, 1022 { 0x78, 8}, 1023 { 0x3f5, 11}, 1024 { 0xfec, 13}, 1025 { 0x1fec, 14} 1026 }, 1027 /* run = 1 */ 1028 { 1029 { 0x12, 5}, 1030 { 0xed, 9}, 1031 { 0x7dc, 12}, 1032 { 0x1fed, 14}, 1033 { 0x3bfd, 15} 1034 } 1035 1036 }; 1037 1038 static const VLCtable coeff_RVLCtab23[3] = 1039 { 1040 /* run = 2 */ 1041 { 0x13, 5}, 1042 { 0x3f8, 11}, 1043 { 0x3dfc, 15} 1044 1045 }; 1046 1047 static const VLCtable coeff_RVLCtab24[11][2] = 1048 { 1049 /* run = 3 */ 1050 { 1051 { 0x18, 6}, 1052 { 0x7dd, 12} 1053 }, 1054 /* run = 4 */ 1055 { 1056 { 0x19, 6}, 1057 { 0x7ec, 12} 1058 }, 1059 /* run = 5 */ 1060 { 1061 { 0x22, 6}, 1062 { 0xfed, 13} 1063 }, 1064 /* run = 6 */ 1065 { 1066 { 0x23, 6}, 1067 { 0xff4, 13} 1068 }, 1069 /* run = 7 */ 1070 { 1071 { 0x35, 7}, 1072 { 0xff5, 13} 1073 }, 1074 /* run = 8 */ 1075 { 1076 { 0x38, 7}, 1077 { 0xff8, 13} 1078 }, 1079 /* run = 9 */ 1080 { 1081 { 0x39, 7}, 1082 { 0xff9, 13} 1083 }, 1084 /* run = 10 */ 1085 { 1086 { 0x42, 7}, 1087 { 0x1ff4, 14} 1088 }, 1089 /* run = 11 */ 1090 { 1091 { 0x43, 7}, 1092 { 0x1ff5, 14} 1093 }, 1094 /* run = 12 */ 1095 { 1096 { 0x79, 8}, 1097 { 0x1ff8, 14} 1098 }, 1099 /* run = 13 */ 1100 { 1101 { 0x82, 8}, 1102 { 0x3dfd, 15} 1103 } 1104 1105 }; 1106 1107 static const VLCtable coeff_RVLCtab25[32] = 1108 { 1109 /* run = 14 -> 44 */ 1110 { 0x83, 8}, 1111 { 0xf4, 9}, 1112 { 0xf5, 9}, 1113 { 0xf8, 9}, 1114 { 0xf9, 9}, 1115 { 0x102, 9}, 1116 { 0x103, 9}, 1117 { 0x1f5, 10}, 1118 { 0x1f8, 10}, 1119 { 0x1f9, 10}, 1120 { 0x202, 10}, 1121 { 0x203, 10}, 1122 { 0x3f9, 11}, 1123 { 0x402, 11}, 1124 { 0x403, 11}, 1125 { 0x7ed, 12}, 1126 { 0x7f4, 12}, 1127 { 0x7f5, 12}, 1128 { 0x7f8, 12}, 1129 { 0x7f9, 12}, 1130 { 0x802, 12}, 1131 { 0x803, 12}, 1132 { 0x1002, 13}, 1133 { 0x1003, 13}, 1134 { 0x1ff9, 14}, 1135 { 0x2002, 14}, 1136 { 0x2003, 14}, 1137 { 0x3efc, 15}, 1138 { 0x3efd, 15}, 1139 { 0x3f7c, 15}, 1140 { 0x3f7d, 15} 1141 }; 1142 1143 #endif /* NO_RVLC */ 1144 1145 #endif /* _VLC_ENC_TAB_H_ */ 1146 1147