/**************************************************************************** * * Module Title : MvEntropy.c * * Description : Video CODEC: Motion vector entropy module. * * AUTHOR : Paul Wilkins * ***************************************************************************** * Revision History * * 1.03 YWX 06-Nov-01 Changed for compatibility with Equator C compiler * 1.02 JBB 13 Jun 01 VP4 Code Clean Out * 1.01 PGW 23 Jan 01 Module created. * ***************************************************************************** */ /**************************************************************************** * Header Files ***************************************************************************** */ /**************************************************************************** * Header Frames ***************************************************************************** */ #define STRICT /* Strict type checking. */ #include "type_aliases.h" #include "systemdependant.h" #include "codec_common.h" #include "codec_common_interface.h" #include "huffman.h" #include "pbdll.h" /**************************************************************************** * Explicit Imports ***************************************************************************** */ /**************************************************************************** * Constants ***************************************************************************** */ /**************************************************************************** * Types ***************************************************************************** */ /**************************************************************************** * Data structures ***************************************************************************** */ // VP5 MV coding tables UINT8 VP5_MvTableIndex[MV_ENTROPY_TOKENS] = { 15, 15, 14, 14, 13, 13, 13, 13, 12, 12, 12, 12, 11, 11, 11, 11, 10, 10, 9, 9, 8, 8, 7, 7, 6, 6, 5, 4, 3, 2, 1, 0, 1, 2, 3, 4, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 15, 15 }; HUFF_NODE XMvHuffTables[MV_ENTROPY_TABLES][MV_ENTROPY_TOKENS-1]; UINT32 XMvPatternTables[MV_ENTROPY_TABLES][MV_ENTROPY_TOKENS]; UINT8 XMvBitsTables[MV_ENTROPY_TABLES][MV_ENTROPY_TOKENS]; static UINT32 VP5_XMvFrequencyCounts[MV_ENTROPY_TABLES][MV_ENTROPY_TOKENS] = { 67 , 15 , 32 , 4 , 21 , 8 , 33 , 2 , 32 , 6 , 29 , 4 , 25 , 5 , 83 , 16 , 58 , 3 , 59 , 7 , 75 , 11 ,129 , 19 ,126 , 22 ,159 , 29 ,207 , 88 ,636 ,388 ,579 ,125 ,269 , 66 ,223 , 33 ,177 , 15 ,118 , 14 ,130 , 14 , 81 , 10 , 91 , 25 ,106 , 10 , 68 , 12 , 51 , 10 , 61 , 13 , 46 , 8 , 55 , 6 , 63 , 29 ,207 , 77 , 6 , 23 , 1 , 19 , 1 , 25 , 4 , 38 , 2 , 39 , 6 , 48 , 6 ,116 , 25 ,110 , 16 ,105 , 16 ,125 , 26 ,223 , 28 ,279 , 56 ,407 , 98 ,509 ,238 ,921 ,461 ,1260 ,628 ,857 ,173 ,543 , 74 ,368 , 31 ,284 , 28 ,207 , 21 ,159 , 21 ,180 , 38 ,166 , 14 , 56 , 5 , 42 , 8 , 48 , 5 , 35 , 4 , 29 , 8 , 37 , 10 , 84 , 7 , 3 , 3 , 1 , 4 , 0 , 3 , 1 , 4 , 0 , 4 , 0 , 10 , 0 , 13 , 7 , 18 , 1 , 17 , 2 , 22 , 5 , 36 , 5 , 52 , 15 , 83 , 15 ,116 , 35 ,220 ,144 ,391 ,262 ,282 ,178 ,235 , 52 ,150 , 23 , 83 , 12 , 74 , 4 , 44 , 8 , 46 , 9 , 36 , 1 , 18 , 1 , 10 , 1 , 7 , 3 , 8 , 0 , 6 , 2 , 6 , 0 , 15 , 25 , 3 , 17 , 3 , 5 , 2 , 9 , 1 , 23 , 0 , 21 , 5 , 17 , 6 , 51 , 7 , 61 , 9 , 48 , 5 , 76 , 7 , 93 , 11 ,125 , 26 ,190 , 54 ,271 , 98 ,502 ,194 ,604 ,221 ,606 ,258 ,639 ,296 ,527 , 56 ,282 , 32 ,195 , 17 ,138 , 11 ,135 , 18 ,132 , 3 , 50 , 1 , 31 , 6 , 34 , 3 , 23 , 3 , 17 , 1 , 20 , 3 , 49 , 10 , 0 , 3 , 1 , 4 , 0 , 2 , 1 , 3 , 1 , 2 , 1 , 4 , 0 , 7 , 7 , 11 , 0 , 12 , 2 , 16 , 2 , 21 , 2 , 31 , 10 , 40 , 10 , 46 , 20 ,115 , 59 ,140 ,106 ,222 ,106 ,225 , 76 ,199 , 82 ,126 , 9 , 67 , 4 , 38 , 2 , 36 , 12 , 34 , 0 , 8 , 0 , 7 , 1 , 9 , 0 , 7 , 3 , 8 , 2 , 12 , 0 , 17 , 28 , 5 , 11 , 1 , 12 , 2 , 8 , 1 , 14 , 2 , 19 , 2 , 19 , 2 , 38 , 8 , 38 , 2 , 47 , 4 , 54 , 5 , 81 , 11 ,103 , 16 ,124 , 23 ,183 , 56 ,376 ,178 ,451 ,142 ,487 ,125 ,549 ,185 ,552 , 89 ,443 ,170 ,358 , 34 ,180 , 16 ,167 , 31 ,152 , 12 , 49 , 7 , 39 , 5 , 37 , 5 , 33 , 4 , 20 , 4 , 25 , 10 , 59 , 22 , 3 , 18 , 0 , 6 , 2 , 8 , 1 , 15 , 0 , 10 , 0 , 17 , 6 , 40 , 6 , 48 , 6 , 50 , 3 , 55 , 7 , 83 , 14 ,100 , 11 , 99 , 14 ,151 , 39 ,309 ,159 ,370 ,124 ,487 ,176 ,686 ,188 ,704 ,121 ,606 , 79 ,385 , 68 ,368 ,126 ,331 , 62 ,200 , 16 ,101 , 5 , 74 , 6 , 79 , 5 , 57 , 9 , 47 , 6 , 47 , 6 , 75 , 15 , 2 , 10 , 0 , 5 , 2 , 7 , 3 , 11 , 3 , 13 , 0 , 15 , 0 , 25 , 1 , 27 , 2 , 35 , 3 , 46 , 7 , 48 , 7 , 62 , 15 , 77 , 13 ,112 , 32 ,220 ,104 ,251 , 64 ,242 , 72 ,347 , 95 ,525 , 79 ,699 , 65 ,533 , 41 ,240 , 13 ,254 , 77 ,264 , 72 ,179 , 8 , 89 , 7 , 65 , 3 , 61 , 3 , 45 , 2 , 49 , 8 , 68 , 14 , 3 , 7 , 0 , 7 , 1 , 7 , 0 , 8 , 3 , 10 , 0 , 7 , 0 , 21 , 4 , 28 , 2 , 17 , 0 , 33 , 7 , 26 , 2 , 40 , 4 , 48 , 9 , 70 , 13 ,147 , 84 ,160 , 41 ,167 , 41 ,202 , 42 ,301 , 32 ,475 , 29 ,410 , 38 ,333 , 17 ,265 , 31 ,171 , 10 ,117 , 16 ,156 , 72 ,146 , 6 , 64 , 5 , 48 , 2 , 49 , 12 , 80 , 14 , 2 , 6 , 0 , 2 , 0 , 3 , 1 , 2 , 0 , 6 , 1 , 4 , 1 , 14 , 5 , 12 , 0 , 13 , 1 , 24 , 2 , 20 , 5 , 20 , 3 , 32 , 7 , 43 , 11 , 93 , 46 , 96 , 25 , 96 , 18 ,117 , 22 ,137 , 14 ,140 , 17 ,256 , 14 ,388 , 13 ,330 , 20 ,112 , 4 , 81 , 7 , 63 , 6 , 68 , 16 , 79 , 43 , 71 , 7 , 43 , 10 , 80 , 19 , 2 , 3 , 0 , 6 , 0 , 3 , 0 , 11 , 1 , 8 , 2 , 7 , 0 , 18 , 4 , 11 , 1 , 17 , 3 , 20 , 3 , 15 , 2 , 33 , 9 , 33 , 11 , 51 , 14 ,127 , 64 ,148 , 35 ,106 , 16 ,107 , 21 ,119 , 11 ,133 , 18 ,195 , 19 ,287 , 11 ,267 , 15 ,200 , 3 ,101 , 7 , 86 , 7 , 56 , 3 , 49 , 8 , 65 , 11 ,100 , 63 ,163 , 25 , 5 , 12 , 0 , 8 , 0 , 7 , 0 , 8 , 1 , 18 , 0 , 21 , 0 , 42 , 5 , 33 , 1 , 22 , 5 , 23 , 5 , 29 , 4 , 51 , 17 , 47 , 14 , 69 , 28 ,189 ,104 ,200 , 15 ,131 , 33 ,121 , 18 ,146 , 26 ,162 , 18 ,155 , 12 ,175 , 12 ,278 , 21 ,331 , 13 ,240 , 7 ,148 , 9 ,104 , 11 , 84 , 15 , 83 , 8 ,163 , 71 ,339 , 17 , 4 , 8 , 0 , 5 , 0 , 6 , 0 , 5 , 0 , 13 , 0 , 3 , 1 , 12 , 4 , 14 , 1 , 8 , 2 , 14 , 1 , 20 , 0 , 16 , 0 , 23 , 7 , 34 , 10 , 63 , 44 , 85 , 19 , 53 , 13 , 66 , 12 , 63 , 10 , 70 , 5 , 66 , 12 , 49 , 5 ,106 , 8 , 93 , 11 , 81 , 6 , 87 , 2 ,101 , 3 , 78 , 3 , 58 , 4 , 93 , 32 ,155 , 13 , 3 , 4 , 1 , 8 , 0 , 3 , 1 , 6 , 1 , 10 , 0 , 8 , 0 , 11 , 3 , 14 , 2 , 9 , 2 , 13 , 4 , 14 , 3 , 13 , 4 , 18 , 6 , 20 , 10 , 66 , 16 , 57 , 10 , 27 , 9 , 44 , 10 , 35 , 4 , 30 , 7 , 42 , 5 , 38 , 1 , 42 , 9 , 48 , 2 , 42 , 1 , 41 , 6 , 52 , 2 , 70 , 2 , 71 , 3 , 77 , 16 ,130 , 3 , 2 , 2 , 1 , 2 , 1 , 1 , 0 , 3 , 0 , 4 , 0 , 2 , 0 , 6 , 4 , 9 , 0 , 6 , 3 , 7 , 1 , 6 , 1 , 8 , 0 , 12 , 2 , 17 , 4 , 50 , 16 , 50 , 3 , 22 , 8 , 24 , 4 , 20 , 3 , 20 , 3 , 27 , 1 , 24 , 2 , 41 , 1 , 31 , 1 , 29 , 1 , 24 , 0 , 30 , 0 , 31 , 2 , 29 , 1 , 36 , 15 , 76 , 35 , 7 , 15 , 1 , 6 , 0 , 3 , 1 , 9 , 1 , 11 , 0 , 10 , 1 , 24 , 4 , 28 , 0 , 9 , 1 , 15 , 6 , 23 , 2 , 29 , 5 , 32 , 3 , 40 , 15 ,121 , 64 ,136 , 17 , 49 , 11 , 49 , 12 , 50 , 10 , 64 , 4 , 53 , 7 , 42 , 9 , 57 , 8 , 75 , 3 , 47 , 3 , 39 , 7 , 38 , 2 , 35 , 7 , 52 , 3 , 87 , 40 ,194 , /* 95 ,284 , 30 , 82 , 36 ,143 , 37 ,148 , 34 ,174 , 45 ,164 , 56 ,241 ,101 ,690 ,145 ,296 ,101 ,283 ,118 ,313 ,129 ,346 ,136 ,448 ,185 ,543 ,283 ,1035 ,725 ,3842 ,1009 ,1273 ,347 ,757 ,243 ,543 ,225 ,381 ,162 ,362 ,130 ,294 ,124 ,358 ,188 ,722 ,128 ,260 , 90 ,200 , 64 ,200 , 64 ,160 , 50 ,153 , 34 ,129 , 60 ,374 ,171 , 90 ,162 , 21 , 68 , 15 , 76 , 26 , 83 , 25 ,123 , 34 ,119 , 46 ,158 , 80 ,374 , 87 ,232 , 84 ,204 , 90 ,247 ,138 ,283 ,155 ,398 ,217 ,453 ,244 ,771 ,556 ,2108 ,915 ,1372 ,406 ,579 ,239 ,393 ,169 ,273 ,156 ,246 , 88 ,183 , 84 ,197 ,108 ,383 , 72 ,178 , 35 ,105 , 42 ,127 , 31 , 97 , 25 , 68 , 20 , 61 , 23 ,122 , 78 , 88 ,255 , 38 ,112 , 31 ,139 , 47 ,134 , 46 ,215 , 47 ,205 , 78 ,250 ,123 ,672 ,133 ,328 ,117 ,295 ,137 ,344 ,139 ,371 ,197 ,472 ,212 ,620 ,322 ,980 ,694 ,2402 ,1096 ,2773 ,1079 ,1699 ,549 ,971 ,317 ,650 ,277 ,552 ,185 ,381 ,147 ,428 ,206 ,799 ,125 ,293 , 82 ,212 , 64 ,211 , 60 ,151 , 71 ,163 , 29 ,126 , 33 ,280 ,120 , 40 , 78 , 25 , 29 , 19 , 57 , 18 , 53 , 14 , 58 , 33 , 85 , 36 ,100 , 56 ,224 , 52 ,109 , 47 ,133 , 44 ,122 , 70 ,134 , 70 ,200 , 81 ,208 ,142 ,343 ,223 ,827 ,373 ,1018 ,512 ,933 ,314 ,509 ,170 ,300 ,111 ,189 , 80 ,164 , 76 ,143 , 77 ,298 , 78 ,112 , 34 , 85 , 40 , 57 , 20 , 59 , 20 , 47 , 11 , 50 , 22 , 73 , 56 , 65 ,161 , 25 , 59 , 18 ,103 , 37 , 88 , 45 ,106 , 39 ,105 , 51 ,172 , 76 ,492 ,103 ,214 , 59 ,212 , 65 ,246 ,104 ,281 ,126 ,340 ,153 ,381 ,214 ,604 ,357 ,1262 ,444 ,1463 ,679 ,1863 ,785 ,1296 ,449 ,685 ,307 ,517 ,162 ,314 ,161 ,366 ,132 ,606 ,112 ,232 , 68 ,187 , 70 ,161 , 41 ,123 , 38 ,119 , 36 ,112 , 35 ,194 , 99 , 46 , 76 , 18 , 37 , 16 , 52 , 12 , 54 , 7 , 48 , 14 , 69 , 28 ,112 , 38 ,219 , 57 ,116 , 56 , 96 , 37 , 93 , 38 ,121 , 82 ,178 ,107 ,177 , 78 ,259 ,181 ,491 ,214 ,554 ,302 ,717 ,382 ,788 ,306 ,459 ,199 ,311 ,134 ,235 ,120 ,207 , 85 ,308 , 70 ,135 , 45 , 79 , 41 , 80 , 23 , 72 , 12 , 54 , 7 , 56 , 23 ,113 , 59 , 111 ,226 , 21 ,100 , 36 ,125 , 50 ,158 , 62 ,172 , 55 ,177 , 71 ,288 ,113 ,633 ,129 ,326 , 91 ,268 ,113 ,362 ,133 ,321 ,136 ,424 ,156 ,461 ,240 ,643 ,470 ,1336 ,464 ,1271 ,503 ,1739 ,898 ,2410 ,961 ,1777 ,643 ,1105 ,332 ,709 ,304 ,619 ,294 ,973 ,213 ,386 ,123 ,282 , 78 ,254 , 79 ,222 , 54 ,185 , 57 ,160 , 57 ,264 ,153 , 80 ,188 , 28 , 87 , 31 ,117 , 35 ,108 , 38 ,147 , 54 ,184 , 58 ,188 ,121 ,584 ,108 ,312 , 93 ,231 , 89 ,272 ,109 ,303 ,132 ,326 ,146 ,377 ,156 ,496 ,297 ,1039 ,320 ,825 ,281 ,1010 ,459 ,1403 ,696 ,2078 ,895 ,1575 ,441 ,800 ,260 ,567 ,315 ,891 ,239 ,357 ,118 ,240 , 91 ,212 , 93 ,184 , 69 ,174 , 56 ,129 , 52 ,284 ,120 , 89 ,177 , 17 , 70 , 23 , 77 , 39 ,110 , 31 ,147 , 44 ,138 , 64 ,183 , 81 ,461 , 87 ,234 , 79 ,236 , 70 ,253 ,113 ,244 ,125 ,290 ,111 ,241 ,124 ,384 ,221 ,940 ,251 ,599 ,220 ,602 ,320 ,840 ,336 ,1185 ,638 ,1811 ,664 ,1197 ,307 ,751 ,344 ,942 ,213 ,377 ,131 ,259 , 69 ,201 , 66 ,164 , 48 ,171 , 53 ,136 , 36 ,272 ,142 , 91 ,130 , 27 , 69 , 21 , 85 , 23 , 93 , 36 ,142 , 26 ,121 , 30 ,182 , 65 ,427 , 83 ,201 , 59 ,175 , 64 ,211 , 67 ,198 ,100 ,257 ,107 ,245 ,139 ,322 ,184 ,723 ,214 ,430 ,169 ,445 ,208 ,572 ,228 ,650 ,328 ,1034 ,483 ,1618 ,676 ,1115 ,348 ,1025 ,233 ,413 ,137 ,271 , 81 ,227 , 77 ,170 , 45 ,144 , 56 ,111 , 45 ,178 ,115 , 89 ,200 , 30 , 88 , 21 ,110 , 35 ,102 , 39 ,130 , 46 ,148 , 35 ,234 , 95 ,522 ,128 ,236 , 85 ,188 , 81 ,233 , 84 ,251 , 84 ,282 ,117 ,285 ,121 ,370 ,193 ,806 ,217 ,484 ,162 ,469 ,161 ,494 ,205 ,518 ,241 ,622 ,259 ,918 ,594 ,1431 ,675 ,1505 ,338 ,455 ,129 ,273 , 84 ,236 , 82 ,201 , 80 ,142 , 44 ,142 , 31 ,294 ,162 , 237 ,546 , 61 ,167 , 63 ,238 , 85 ,255 , 71 ,357 , 81 ,323 , 97 ,417 ,186 ,1285 ,302 ,588 ,189 ,469 ,174 ,517 ,224 ,561 ,207 ,619 ,234 ,593 ,285 ,800 ,469 ,1935 ,468 ,983 ,329 ,845 ,281 ,927 ,328 ,944 ,378 ,980 ,372 ,1070 ,523 ,1544 ,857 ,3091 ,995 ,1478 ,465 ,811 ,245 ,613 ,188 ,442 ,166 ,445 ,132 ,334 ,123 ,759 ,360 , 86 ,220 , 34 , 85 , 27 , 93 , 35 ,102 , 39 ,113 , 57 ,138 , 45 ,182 , 71 ,489 , 98 ,221 , 84 ,170 , 78 ,230 , 93 ,248 , 81 ,237 ,109 ,255 ,126 ,365 ,188 ,752 ,209 ,422 ,133 ,331 ,163 ,400 ,133 ,401 ,151 ,410 ,155 ,425 ,153 ,468 ,194 ,916 ,246 ,491 ,205 ,413 ,201 ,373 ,153 ,278 , 96 ,197 , 76 ,162 , 72 ,342 ,210 , 68 ,184 , 17 , 52 , 12 , 86 , 35 , 70 , 18 ,100 , 38 ,102 , 35 ,134 , 76 ,373 , 55 ,185 , 48 ,130 , 65 ,200 , 68 ,177 , 77 ,225 , 90 ,186 , 73 ,271 ,128 ,509 ,126 ,343 ,103 ,286 ,103 ,297 ,133 ,252 ,107 ,269 , 87 ,244 ,114 ,289 ,160 ,621 ,145 ,281 ,101 ,270 ,120 ,265 ,132 ,257 ,142 ,320 ,115 ,201 , 58 ,329 ,193 , 52 , 96 , 4 , 25 , 12 , 39 , 9 , 36 , 15 , 45 , 22 , 32 , 22 , 64 , 36 ,154 , 34 , 79 , 23 , 61 , 28 , 92 , 18 , 66 , 30 , 85 , 41 , 90 , 48 ,140 , 55 ,250 , 57 ,112 , 42 ,103 , 38 ,128 , 44 , 99 , 43 ,112 , 45 ,115 , 38 ,131 , 63 ,288 , 57 ,138 , 31 , 99 , 31 , 94 , 37 , 96 , 30 ,131 , 45 ,117 , 52 ,161 , 94 , 147 ,381 , 25 ,105 , 21 ,147 , 37 ,119 , 43 ,177 , 37 ,168 , 49 ,204 ,106 ,620 ,102 ,238 , 65 ,200 , 57 ,231 , 97 ,191 ,101 ,224 , 89 ,222 , 95 ,394 ,199 ,748 ,171 ,384 ,125 ,322 ,100 ,301 ,118 ,289 ,125 ,304 , 92 ,234 ,100 ,331 ,163 ,834 ,175 ,334 , 81 ,274 , 64 ,266 , 85 ,212 ,113 ,285 , 63 ,206 , 96 ,690 ,402 , { 36, 69, 8, 21, 8, 28, 15, 29, 11, 32, 14, 33, 15, 41, 25, 109, 22, 61, 32, 62, 32, 78, 49, 91, 64, 126, 102, 165, 207, 615, 1860, 2163, 1514, 598, 254, 180, 105, 131, 75, 70, 43, 60, 38, 48, 31, 60, 36, 105, 26, 47, 29, 35, 17, 32, 16, 25, 7, 29, 8, 21, 7, 49, 49, }, { 11, 22, 6, 8, 8, 11, 5, 11, 1, 14, 5, 16, 13, 23, 14, 32, 18, 29, 25, 32, 26, 37, 32, 52, 55, 83, 94, 145, 201, 458, 1233, 2600, 1790, 1313, 420, 221, 125, 126, 94, 71, 38, 41, 30, 40, 26, 29, 22, 47, 24, 23, 12, 17, 15, 14, 14, 14, 8, 9, 9, 9, 2, 17, 23, }, { 29, 32, 9, 22, 7, 21, 10, 11, 5, 27, 16, 17, 13, 23, 20, 59, 14, 35, 14, 32, 25, 41, 43, 53, 40, 75, 61, 135, 146, 298, 635, 1241, 2473, 1648, 1042, 437, 182, 146, 94, 94, 55, 49, 37, 52, 28, 51, 34, 49, 22, 26, 13, 22, 15, 23, 10, 20, 14, 26, 10, 14, 5, 27, 37, }, { 18, 18, 10, 10, 16, 20, 6, 22, 16, 30, 14, 38, 16, 24, 12, 59, 28, 61, 36, 53, 18, 59, 59, 57, 43, 86, 100, 137, 178, 291, 560, 1069, 1243, 1919, 1102, 866, 346, 270, 153, 137, 90, 63, 43, 34, 38, 61, 36, 57, 24, 47, 18, 30, 26, 24, 10, 24, 14, 36, 8, 12, 4, 34, 34, }, { 38, 61, 15, 22, 12, 33, 22, 33, 17, 35, 10, 33, 12, 27, 15, 86, 25, 63, 33, 78, 35, 71, 55, 89, 55, 165, 83, 132, 172, 256, 462, 778, 671, 989, 1261, 1045, 803, 524, 259, 231, 109, 109, 61, 89, 48, 76, 66, 101, 55, 58, 20, 45, 20, 33, 27, 40, 12, 33, 10, 25, 2, 71, 53, }, { 39, 35, 7, 39, 10, 31, 24, 21, 35, 46, 35, 46, 21, 46, 17, 78, 24, 49, 24, 99, 67, 74, 42, 92, 56, 127, 95, 202, 191, 414, 475, 613, 652, 656, 652, 1042, 680, 769, 574, 333, 205, 195, 88, 74, 88, 74, 70, 81, 53, 95, 46, 39, 24, 46, 14, 67, 24, 17, 7, 28, 14, 63, 28, }, { 57, 58, 7, 29, 7, 36, 7, 58, 27, 47, 22, 58, 23, 53, 33, 91, 29, 84, 38, 57, 66, 69, 79, 84, 77, 97, 93, 169, 139, 285, 364, 597, 480, 388, 448, 636, 774, 995, 691, 551, 320, 241, 160, 169, 99, 125, 79, 123, 68, 79, 33, 60, 20, 47, 34, 62, 22, 62, 25, 51, 27, 84, 77, }, { 91, 88, 16, 40, 13, 32, 10, 42, 16, 53, 21, 50, 13, 66, 53, 107, 34, 72, 29, 58, 32, 74, 64, 88, 85, 109, 96, 168, 149, 326, 323, 495, 374, 425, 364, 471, 412, 554, 589, 787, 527, 460, 313, 214, 163, 168, 149, 184, 104, 109, 61, 93, 66, 80, 37, 64, 29, 40, 40, 29, 13, 72, 66, }, { 76, 83, 6, 56, 16, 46, 36, 73, 26, 69, 36, 69, 53, 66, 56, 103, 66, 106, 49, 79, 36, 93, 83, 133, 79, 119, 89, 136, 119, 233, 226, 442, 319, 306, 236, 312, 266, 409, 372, 532, 502, 675, 496, 386, 236, 262, 239, 206, 163, 143, 93, 96, 59, 99, 53, 93, 53, 59, 33, 53, 36, 99, 123, }, { 60, 86, 18, 33, 18, 63, 11, 60, 18, 105, 30, 48, 56, 90, 33, 82, 78, 101, 30, 101, 67, 116, 75, 123, 45, 108, 97, 131, 71, 213, 217, 330, 292, 255, 180, 210, 243, 371, 258, 390, 240, 562, 446, 675, 480, 498, 318, 348, 225, 247, 112, 135, 93, 82, 48, 90, 67, 90, 52, 45, 22, 90, 97, }, { 76, 129, 10, 45, 3, 48, 20, 66, 20, 73, 17, 59, 17, 76, 31, 125, 55, 94, 38, 80, 41, 108, 80, 111, 87, 104, 55, 108, 76, 160, 234, 451, 290, 248, 199, 223, 139, 297, 150, 318, 199, 342, 321, 489, 433, 605, 563, 510, 391, 286, 171, 139, 115, 108, 73, 108, 59, 115, 48, 31, 20, 139, 132, }, { 93, 100, 15, 36, 24, 51, 17, 58, 26, 58, 15, 68, 20, 58, 55, 201, 79, 96, 39, 85, 49, 125, 53, 85, 51, 89, 83, 112, 96, 186, 224, 440, 224, 190, 115, 178, 100, 193, 114, 250, 171, 229, 157, 294, 247, 421, 437, 859, 482, 530, 336, 285, 186, 231, 142, 155, 77, 112, 76, 74, 47, 125, 144, }, { 137, 99, 12, 54, 15, 54, 25, 60, 25, 76, 25, 70, 44, 54, 76, 127, 60, 70, 19, 99, 67, 127, 54, 127, 79, 95, 60, 76, 60, 172, 134, 338, 213, 213, 89, 150, 137, 210, 111, 182, 95, 255, 105, 255, 150, 322, 265, 427, 255, 472, 408, 443, 415, 495, 306, 287, 178, 175, 134, 111, 83, 185, 252, }, { 105, 149, 28, 64, 32, 72, 24, 72, 12, 64, 24, 64, 12, 64, 48, 157, 80, 76, 40, 76, 56, 117, 64, 109, 76, 141, 64, 109, 76, 198, 145, 307, 133, 137, 109, 125, 93, 226, 80, 153, 113, 214, 97, 234, 88, 218, 258, 384, 234, 234, 214, 283, 222, 432, 311, 465, 384, 343, 258, 283, 190, 323, 404, }, { 263, 160, 22, 80, 11, 148, 11, 91, 34, 137, 22, 91, 80, 137, 34, 171, 22, 57, 22, 102, 45, 160, 80, 91, 80, 171, 45, 114, 80, 137, 171, 286, 57, 148, 80, 286, 125, 160, 125, 171, 102, 102, 57, 217, 125, 160, 80, 286, 114, 102, 148, 251, 217, 297, 137, 343, 251, 514, 228, 400, 331, 526, 675, }, { 188, 256, 21, 68, 21, 108, 25, 119, 32, 101, 21, 54, 10, 83, 61, 151, 68, 94, 43, 126, 43, 108, 43, 151, 65, 137, 68, 159, 86, 209, 144, 368, 159, 188, 72, 155, 83, 188, 97, 137, 65, 155, 97, 144, 57, 195, 97, 249, 104, 213, 61, 169, 101, 278, 101, 209, 144, 365, 173, 285, 216, 824, 1356, } */ }; HUFF_NODE YMvHuffTables[MV_ENTROPY_TABLES][MV_ENTROPY_TOKENS-1]; UINT32 YMvPatternTables[MV_ENTROPY_TABLES][MV_ENTROPY_TOKENS]; UINT8 YMvBitsTables[MV_ENTROPY_TABLES][MV_ENTROPY_TOKENS]; static UINT32 VP5_YMvFrequencyCounts[MV_ENTROPY_TABLES][MV_ENTROPY_TOKENS] = { 19 , 12 , 31 , 74 , 10 , 11 , 33 , 66 , 10 , 14 , 26 , 82 , 14 , 27 , 22 ,118 , 27 , 28 , 49 ,170 , 32 , 54 , 70 ,313 , 94 ,101 ,190 ,999 ,326 ,643 ,695 ,1793 ,370 ,583 ,290 ,393 ,100 , 72 , 94 ,215 , 48 , 45 , 59 ,122 , 30 , 33 , 29 , 93 , 14 , 21 , 24 , 78 , 6 , 19 , 20 , 43 , 7 , 12 , 15 , 66 , 17 , 8 , 15 , 4 , 5 , 2 , 11 , 3 , 2 , 2 , 10 , 5 , 1 , 4 , 17 , 5 , 8 , 9 , 28 , 6 , 20 , 26 , 68 , 22 , 43 , 51 , 94 , 63 , 75 , 84 ,179 ,203 ,308 ,352 ,1106 ,655 ,1312 ,535 ,643 ,219 ,117 ,108 ,153 , 74 , 53 , 48 , 77 , 31 , 31 , 23 , 39 , 16 , 12 , 6 , 21 , 10 , 15 , 9 , 9 , 5 , 4 , 2 , 17 , 7 , 11 , 6 , 6 , 6 , 2 , 10 , 4 , 9 , 4 , 17 , 5 , 10 , 5 , 16 , 9 , 13 , 11 , 44 , 16 , 31 , 17 , 46 , 24 , 39 , 39 , 89 , 55 , 48 , 62 ,139 ,126 ,276 ,210 ,715 ,742 ,1649 ,361 ,945 ,265 ,242 ,110 ,206 , 93 , 78 , 55 ,101 , 31 , 45 , 23 , 68 , 22 , 25 , 16 , 22 , 6 , 14 , 9 , 23 , 3 , 17 , 9 , 26 , 2 , 10 , 8 , 2 , 5 , 2 , 6 , 3 , 3 , 2 , 11 , 3 , 8 , 3 , 12 , 2 , 12 , 7 , 23 , 11 , 13 , 8 , 28 , 16 , 31 , 30 , 65 , 28 , 43 , 69 ,110 ,120 ,149 ,183 ,502 ,403 ,627 ,370 ,750 ,259 ,180 ,136 ,173 , 71 , 50 , 39 , 67 , 34 , 27 , 23 , 44 , 15 , 13 , 6 , 21 , 9 , 11 , 3 , 12 , 3 , 2 , 2 , 13 , 2 , 9 , 4 , 6 , 5 , 3 , 22 , 3 , 6 , 2 , 15 , 4 , 4 , 3 , 24 , 4 , 8 , 10 , 32 , 13 , 12 , 12 , 48 , 15 , 20 , 26 ,117 , 33 , 45 , 58 ,181 , 87 ,146 ,146 ,891 ,341 ,639 ,524 ,1885 ,524 ,313 ,300 ,1314 ,194 ,108 , 74 ,252 , 48 , 53 , 30 ,140 , 31 , 42 , 14 , 58 , 13 , 15 , 10 , 39 , 5 , 11 , 4 , 31 , 6 , 14 , 7 , 1 , 4 , 1 , 9 , 0 , 0 , 6 , 10 , 2 , 2 , 1 , 9 , 2 , 1 , 8 , 13 , 4 , 7 , 4 , 13 , 10 , 8 , 8 , 32 , 19 , 21 , 24 , 58 , 54 , 52 , 57 ,163 , 87 ,164 ,199 ,599 ,183 ,127 ,168 ,557 ,119 ,104 , 59 ,108 , 49 , 24 , 20 , 53 , 19 , 11 , 7 , 17 , 6 , 3 , 3 , 10 , 7 , 4 , 4 , 6 , 4 , 3 , 0 , 4 , 5 , 1 , 11 , 1 , 3 , 5 , 6 , 2 , 9 , 3 , 8 , 3 , 5 , 4 , 19 , 4 , 9 , 8 , 18 , 6 , 12 , 10 , 35 , 16 , 29 , 26 , 60 , 47 , 82 , 64 ,120 , 70 ,185 ,145 ,335 ,155 ,118 ,104 ,405 ,100 , 85 , 57 ,192 , 49 , 81 , 45 , 83 , 22 , 20 , 16 , 42 , 15 , 17 , 6 , 35 , 7 , 14 , 6 , 22 , 9 , 8 , 5 , 6 , 7 , 1 , 12 , 3 , 8 , 4 , 14 , 7 , 7 , 3 , 23 , 8 , 5 , 8 , 33 , 6 , 15 , 4 , 33 , 13 , 21 , 20 , 69 , 23 , 38 , 40 ,135 , 57 , 91 , 84 ,287 ,133 ,196 ,172 ,730 ,229 ,174 ,234 ,1521 ,194 ,140 ,124 ,895 ,130 ,115 , 87 ,443 , 73 , 77 , 36 ,109 , 32 , 34 , 19 , 82 , 16 , 16 , 6 , 79 , 11 , 19 , 23 , 1 , 2 , 3 , 3 , 2 , 3 , 0 , 3 , 1 , 2 , 3 , 4 , 4 , 3 , 1 , 10 , 2 , 3 , 3 , 11 , 6 , 5 , 5 , 12 , 8 , 12 , 18 , 31 , 24 , 39 , 39 , 68 , 50 , 61 , 45 , 74 , 36 , 43 , 32 ,133 , 25 , 37 , 16 ,101 , 15 , 29 , 20 , 50 , 10 , 26 , 15 , 50 , 12 , 23 , 12 , 21 , 6 , 8 , 4 , 19 , 8 , 7 , 4 , 2 , 3 , 2 , 8 , 2 , 2 , 2 , 9 , 2 , 2 , 2 , 10 , 3 , 4 , 4 , 18 , 2 , 10 , 2 , 31 , 6 , 12 , 9 , 29 , 12 , 22 , 19 , 54 , 37 , 46 , 34 ,131 , 65 , 78 , 64 ,149 , 54 , 65 , 68 ,388 , 46 , 26 , 57 ,620 , 59 , 33 , 31 ,471 , 37 , 37 , 29 ,158 , 21 , 39 , 25 ,171 , 21 , 36 , 8 , 70 , 14 , 12 , 14 , 0 , 3 , 1 , 4 , 1 , 3 , 1 , 5 , 1 , 6 , 2 , 6 , 3 , 2 , 2 , 8 , 2 , 9 , 4 , 6 , 2 , 2 , 3 , 18 , 8 , 4 , 9 , 29 , 19 , 34 , 28 , 38 , 22 , 28 , 19 , 27 , 12 , 18 , 14 , 68 , 13 , 15 , 8 , 36 , 6 , 26 , 3 , 34 , 6 , 22 , 3 , 16 , 4 , 19 , 3 , 11 , 8 , 14 , 4 , 48 , 15 , 23 , 7 , 1 , 3 , 1 , 12 , 1 , 1 , 3 , 12 , 3 , 4 , 7 , 13 , 2 , 5 , 4 , 21 , 5 , 14 , 6 , 20 , 7 , 10 , 14 , 29 , 8 , 25 , 22 , 50 , 27 , 54 , 33 ,115 , 57 , 89 , 43 ,121 , 33 , 56 , 32 ,149 , 19 , 30 , 22 ,295 , 22 , 30 , 26 ,411 , 28 , 21 , 16 ,267 , 25 , 28 , 15 , 99 , 12 , 32 , 17 ,128 , 29 , 61 , 52 , 2 , 4 , 4 , 12 , 1 , 4 , 1 , 7 , 1 , 1 , 3 , 11 , 2 , 7 , 5 , 13 , 2 , 9 , 3 , 19 , 5 , 8 , 9 , 17 , 11 , 8 , 12 , 34 , 24 , 41 , 25 , 55 , 31 , 58 , 29 , 54 , 17 , 26 , 21 , 52 , 14 , 17 , 18 , 68 , 4 , 18 , 13 ,170 , 13 , 22 , 14 ,179 , 18 , 15 , 5 ,120 , 14 , 18 , 12 ,102 , 26 , 49 , 29 , 5 , 3 , 0 , 8 , 2 , 2 , 2 , 4 , 0 , 5 , 0 , 5 , 0 , 2 , 0 , 8 , 0 , 3 , 3 , 12 , 1 , 3 , 3 , 23 , 8 , 16 , 7 , 26 , 13 , 20 , 18 , 45 , 22 , 28 , 22 , 41 , 14 , 16 , 16 , 49 , 11 , 15 , 11 , 73 , 3 , 10 , 7 , 61 , 7 , 9 , 5 , 90 , 12 , 12 , 7 , 63 , 14 , 8 , 4 , 83 , 13 , 19 , 15 , 3 , 4 , 3 , 9 , 0 , 2 , 0 , 3 , 0 , 2 , 3 , 7 , 0 , 3 , 1 , 8 , 2 , 8 , 1 , 5 , 3 , 6 , 2 , 18 , 3 , 12 , 8 , 34 , 15 , 19 , 12 , 47 , 19 , 25 , 21 , 35 , 15 , 16 , 10 , 33 , 6 , 12 , 6 , 39 , 4 , 15 , 2 , 48 , 6 , 10 , 8 , 42 , 3 , 5 , 4 , 73 , 4 , 1 , 5 ,152 , 11 , 15 , 18 , 0 , 2 , 1 , 1 , 0 , 4 , 0 , 3 , 0 , 3 , 0 , 4 , 0 , 4 , 1 , 2 , 1 , 3 , 0 , 5 , 0 , 3 , 0 , 7 , 4 , 7 , 6 , 15 , 9 , 13 , 8 , 20 , 8 , 16 , 10 , 10 , 5 , 6 , 2 , 12 , 2 , 11 , 1 , 10 , 0 , 10 , 2 , 11 , 0 , 2 , 0 , 7 , 3 , 2 , 3 , 9 , 2 , 5 , 0 , 6 , 3 , 10 , 4 , /* 36 , 94 ,136 ,248 , 42 , 90 , 62 ,284 , 73 , 93 , 87 ,430 ,119 ,147 ,180 ,888 ,157 ,216 ,203 ,716 ,131 ,208 ,243 ,1216 ,272 ,346 ,457 ,2737 ,863 ,1978 ,2840 ,8045 ,1609 ,1342 ,538 ,1273 ,316 ,287 ,195 ,794 ,177 ,199 ,134 ,584 ,193 ,198 ,163 ,755 ,145 ,162 , 99 ,370 ,106 , 76 , 49 ,313 , 64 , 71 , 38 ,252 ,165 , 75 , 39 , 23 , 53 , 71 ,150 , 34 , 48 , 45 ,176 , 57 , 65 , 76 ,251 , 75 ,115 ,138 ,556 ,130 ,153 ,128 ,428 , 94 ,122 ,172 ,606 ,188 ,219 ,287 ,917 ,407 ,804 ,1000 ,5395 ,2602 ,2741 ,1082 ,2329 ,428 ,261 ,215 ,727 ,174 ,154 ,128 ,431 ,149 ,138 ,143 ,593 ,155 ,108 , 95 ,263 , 85 , 62 , 46 ,193 , 49 , 60 , 43 ,168 , 81 , 65 , 33 , 37 , 50 , 64 ,112 , 30 , 51 , 35 ,186 , 44 , 69 , 50 ,251 , 58 ,106 ,126 ,484 , 95 ,167 ,105 ,314 , 97 ,115 ,138 ,527 ,131 ,203 ,185 ,621 ,298 ,678 ,761 ,3375 ,2087 ,2890 ,1483 ,2215 ,482 ,432 ,260 ,745 ,180 ,208 ,128 ,411 ,152 ,134 ,136 ,568 ,124 ,152 , 78 ,226 , 72 , 92 , 51 ,181 , 39 , 66 , 28 ,149 ,102 , 71 , 22 , 16 , 30 , 45 , 84 , 14 , 51 , 29 ,100 , 28 , 49 , 38 ,159 , 48 , 78 , 70 ,326 , 81 , 77 , 71 ,243 , 65 , 64 ,100 ,330 ,100 ,135 ,149 ,378 ,210 ,370 ,370 ,1619 ,907 ,1450 ,1128 ,2217 ,513 ,260 ,240 ,710 ,200 ,128 ,118 ,320 ,128 , 94 , 86 ,353 , 92 , 98 , 80 ,147 , 50 , 36 , 31 ,127 , 45 , 27 , 24 , 78 , 63 , 38 , 22 , 30 , 76 ,122 ,219 , 38 , 74 , 58 ,308 , 50 , 97 ,116 ,409 , 89 ,168 ,143 ,810 ,146 ,169 ,189 ,626 ,150 ,194 ,199 ,809 ,177 ,230 ,261 ,1073 ,322 ,567 ,620 ,3684 ,1380 ,1976 ,1723 ,7569 ,1900 ,854 ,742 ,3046 ,468 ,334 ,267 ,990 ,273 ,249 ,215 ,1029 ,273 ,190 ,133 ,524 ,120 ,107 , 58 ,358 , 77 , 84 , 52 ,292 ,139 , 82 , 49 , 7 , 23 , 47 , 61 , 22 , 23 , 21 ,103 , 14 , 22 , 33 ,136 , 54 , 45 , 57 ,229 , 48 , 54 , 62 ,169 , 52 , 63 , 76 ,241 , 68 , 68 ,115 ,272 ,140 ,153 ,185 ,772 ,302 ,420 ,445 ,1755 ,642 ,242 ,319 ,1349 ,276 ,128 ,105 ,421 ,151 , 86 , 83 ,362 , 77 , 57 , 66 ,167 , 64 , 27 , 34 ,134 , 32 , 29 , 14 , 90 , 61 , 38 , 24 , 23 , 17 , 46 , 77 , 18 , 40 , 28 ,109 , 20 , 37 , 34 ,157 , 36 , 72 , 47 ,242 , 50 , 60 , 69 ,205 , 63 , 75 , 77 ,240 , 77 , 98 ,118 ,363 ,181 ,266 ,269 ,889 ,305 ,457 ,344 ,1010 ,388 ,304 ,365 ,1372 ,317 ,167 ,131 ,572 ,191 ,109 ,110 ,438 , 98 , 93 , 75 ,213 , 83 , 58 , 57 ,157 , 45 , 46 , 32 , 96 , 63 , 78 , 31 , 38 , 89 , 80 ,239 , 44 , 71 , 68 ,286 , 59 , 98 , 76 ,355 , 94 ,145 ,134 ,677 ,142 ,149 ,163 ,540 ,135 ,154 ,157 ,706 ,143 ,212 ,239 ,882 ,307 ,403 ,489 ,1903 ,579 ,795 ,614 ,2498 ,984 ,648 ,760 ,5794 ,1295 ,394 ,465 ,2504 ,467 ,394 ,289 ,1266 ,232 ,250 ,164 ,561 ,146 ,128 , 74 ,383 ,129 ,103 , 47 ,265 ,156 , 96 , 58 , 11 , 31 , 34 , 51 , 12 , 19 , 22 , 67 , 14 , 25 , 46 , 78 , 32 , 41 , 44 ,145 , 28 , 37 , 39 ,130 , 26 , 37 , 46 ,159 , 67 , 47 , 61 ,206 ,102 ,138 ,116 ,429 ,131 ,207 ,121 ,325 ,119 , 98 ,106 ,347 ,108 , 77 , 62 ,330 , 83 , 72 , 51 ,242 , 56 , 44 , 28 ,145 , 32 , 34 , 27 , 78 , 31 , 24 , 15 , 81 , 52 , 27 , 15 , 39 , 72 ,103 ,179 , 29 , 52 , 53 ,207 , 40 , 62 , 66 ,258 , 75 , 80 ,114 ,420 , 81 , 89 ,125 ,392 ,105 , 88 ,120 ,488 ,115 ,119 ,184 ,614 ,194 ,321 ,286 ,1271 ,327 ,367 ,316 ,1021 ,303 ,287 ,238 ,1478 ,452 ,159 ,231 ,2465 ,662 ,191 ,265 ,1859 ,292 ,161 ,158 ,523 ,132 , 82 , 76 ,326 ,108 , 82 , 60 ,247 ,182 , 79 , 44 , 15 , 21 , 32 , 40 , 12 , 15 , 15 , 63 , 15 , 16 , 28 , 72 , 24 , 35 , 31 ,154 , 38 , 35 , 44 ,120 , 37 , 27 , 51 ,141 , 46 , 43 , 61 ,227 ,109 ,149 ,128 ,410 ,143 ,176 ,104 ,288 , 73 , 99 , 56 ,259 , 83 , 55 , 47 ,206 , 73 , 51 , 59 ,315 , 64 , 43 , 32 ,146 , 37 , 40 , 23 , 84 , 22 , 23 , 23 , 64 , 48 , 25 , 14 , 34 , 80 , 79 ,191 , 41 , 62 , 73 ,272 , 41 , 73 , 67 ,295 , 64 ,116 ,137 ,579 ,129 ,141 ,166 ,443 ,102 ,132 ,132 ,535 ,151 ,183 ,209 ,800 ,282 ,476 ,461 ,1521 ,406 ,526 ,351 ,1005 ,285 ,248 ,223 ,1036 ,341 ,172 ,215 ,1113 ,427 ,204 ,254 ,2027 ,432 ,172 ,189 ,828 ,198 ,118 , 99 ,437 ,127 ,108 , 89 ,355 ,204 ,114 , 50 , 13 , 70 , 76 ,116 , 28 , 41 , 57 ,139 , 32 , 37 , 48 ,203 , 57 , 66 , 74 ,308 , 60 , 62 ,131 ,273 , 89 , 66 , 83 ,322 , 79 , 81 ,138 ,423 ,180 ,250 ,246 ,760 ,214 ,276 ,174 ,540 ,165 ,102 , 86 ,610 ,155 , 82 ,109 ,509 ,164 , 87 ,121 ,723 ,212 , 81 ,101 ,637 ,168 , 46 , 69 ,296 , 76 , 54 , 61 ,209 ,182 , 78 , 66 , 14 , 36 , 53 ,132 , 17 , 38 , 21 ,121 , 24 , 34 , 40 ,153 , 38 , 39 , 45 ,290 , 39 , 64 , 68 ,185 , 49 , 54 , 61 ,256 , 53 , 88 , 71 ,330 ,135 ,213 ,177 ,577 ,159 ,162 ,164 ,401 ,113 , 96 ,114 ,415 ,138 , 91 , 73 ,369 ,148 , 79 , 75 ,502 ,112 , 69 , 87 ,295 , 97 , 63 , 40 ,274 ,105 , 51 , 34 ,194 ,156 , 70 , 54 , 14 , 46 , 63 , 89 , 14 , 50 , 17 , 97 , 21 , 24 , 30 ,116 , 22 , 41 , 44 ,181 , 35 , 37 , 43 ,185 , 32 , 55 , 62 ,201 , 39 , 47 , 82 ,273 ,112 ,159 ,131 ,512 ,110 ,163 ,117 ,303 ,103 , 67 , 86 ,322 , 90 , 65 , 46 ,304 , 94 , 55 , 88 ,376 , 89 , 50 , 61 ,248 , 89 , 36 , 58 ,234 , 85 , 44 , 40 ,210 ,293 , 73 , 44 , 17 , 16 , 21 , 40 , 8 , 10 , 14 , 45 , 8 , 14 , 7 , 42 , 13 , 13 , 15 , 70 , 17 , 29 , 20 , 64 , 19 , 10 , 29 , 69 , 23 , 16 , 20 , 90 , 25 , 64 , 58 ,167 , 72 , 75 , 41 ,121 , 35 , 29 , 15 ,118 , 25 , 30 , 25 , 90 , 28 , 29 , 20 , 95 , 19 , 25 , 16 , 73 , 17 , 18 , 12 , 54 , 17 , 31 , 14 , 66 , 43 , 27 , 23 , { 25, 61, 10, 20, 8, 25, 9, 24, 10, 23, 9, 23, 13, 35, 19, 77, 18, 56, 21, 38, 21, 49, 35, 65, 45, 86, 80, 141, 197, 521, 1533, 2830, 1891, 605, 232, 160, 91, 100, 63, 71, 51, 57, 26, 43, 27, 36, 23, 68, 22, 39, 13, 25, 14, 25, 10, 21, 6, 23, 5, 19, 3, 49, 29, }, { 17, 14, 2, 15, 4, 10, 3, 16, 5, 11, 6, 17, 8, 23, 17, 38, 20, 34, 14, 35, 17, 34, 29, 42, 47, 75, 83, 115, 145, 372, 910, 2907, 2317, 1284, 375, 198, 116, 93, 52, 52, 35, 46, 18, 33, 23, 22, 24, 34, 10, 23, 9, 16, 9, 15, 8, 10, 8, 7, 4, 9, 4, 17, 10, }, { 12, 34, 9, 24, 2, 26, 6, 15, 7, 22, 18, 28, 11, 31, 17, 51, 18, 29, 20, 35, 21, 51, 53, 68, 53, 85, 68, 120, 151, 310, 525, 1339, 2210, 1761, 988, 498, 210, 167, 96, 93, 76, 54, 32, 44, 30, 53, 25, 60, 26, 40, 24, 30, 6, 34, 13, 22, 4, 26, 10, 18, 7, 35, 17, }, { 27, 33, 5, 15, 6, 15, 5, 41, 12, 24, 15, 19, 12, 48, 12, 24, 17, 29, 8, 34, 26, 60, 47, 69, 40, 95, 94, 121, 151, 303, 468, 1041, 1205, 1641, 1136, 986, 548, 304, 212, 195, 123, 83, 55, 76, 27, 41, 33, 60, 31, 36, 29, 24, 15, 27, 10, 17, 6, 33, 8, 12, 3, 48, 26, }, { 42, 61, 6, 36, 16, 40, 8, 20, 30, 20, 4, 30, 28, 40, 18, 47, 26, 53, 22, 44, 26, 77, 53, 79, 61, 128, 77, 108, 145, 265, 298, 776, 670, 1079, 1128, 1269, 840, 603, 265, 226, 165, 167, 63, 75, 49, 79, 42, 94, 36, 44, 14, 59, 20, 30, 16, 28, 12, 38, 22, 38, 12, 67, 34, }, { 22, 45, 8, 19, 5, 31, 8, 16, 16, 28, 31, 14, 19, 36, 16, 56, 31, 48, 59, 59, 22, 76, 50, 59, 33, 96, 96, 127, 118, 266, 379, 651, 577, 722, 835, 1152, 1019, 864, 535, 325, 186, 184, 118, 101, 79, 73, 59, 127, 50, 70, 45, 33, 25, 39, 22, 39, 8, 28, 14, 8, 8, 45, 33, }, { 38, 53, 15, 34, 5, 25, 8, 44, 20, 32, 19, 20, 19, 51, 25, 74, 34, 55, 36, 76, 39, 67, 60, 74, 36, 95, 82, 120, 131, 190, 352, 606, 400, 509, 463, 769, 888, 966, 762, 570, 330, 316, 162, 174, 120, 159, 86, 127, 67, 86, 44, 53, 29, 70, 31, 38, 24, 31, 10, 34, 12, 53, 53, }, { 46, 80, 7, 43, 4, 24, 7, 41, 7, 48, 12, 43, 24, 51, 17, 73, 38, 68, 29, 68, 34, 90, 14, 109, 55, 126, 58, 146, 126, 221, 250, 630, 370, 462, 370, 489, 430, 613, 737, 890, 747, 535, 233, 197, 163, 185, 109, 99, 65, 94, 29, 80, 51, 70, 31, 53, 12, 48, 14, 41, 19, 87, 60, }, { 35, 86, 6, 41, 16, 25, 9, 38, 45, 38, 28, 48, 22, 51, 28, 83, 41, 73, 38, 41, 32, 112, 80, 80, 70, 112, 96, 119, 141, 292, 337, 521, 299, 347, 241, 340, 289, 488, 402, 649, 572, 810, 440, 385, 295, 273, 167, 183, 90, 102, 57, 102, 54, 73, 48, 61, 32, 67, 25, 64, 12, 99, 115, }, { 47, 95, 21, 39, 13, 69, 8, 52, 17, 65, 21, 60, 26, 43, 21, 95, 82, 112, 21, 47, 43, 138, 52, 99, 82, 125, 60, 130, 143, 273, 225, 555, 286, 416, 251, 316, 234, 390, 268, 360, 338, 507, 438, 646, 446, 386, 308, 281, 182, 186, 86, 138, 26, 143, 34, 47, 43, 121, 21, 69, 13, 30, 82, }, { 90, 129, 12, 60, 8, 51, 17, 17, 30, 124, 38, 60, 34, 90, 47, 120, 64, 99, 38, 94, 47, 163, 64, 112, 73, 133, 77, 116, 133, 323, 262, 478, 288, 353, 168, 185, 150, 336, 202, 232, 232, 340, 284, 422, 469, 577, 478, 409, 245, 189, 120, 163, 94, 155, 51, 112, 64, 68, 51, 64, 21, 137, 107, }, { 67, 111, 29, 35, 24, 65, 16, 73, 8, 51, 35, 70, 10, 97, 65, 189, 59, 105, 40, 94, 51, 97, 62, 97, 84, 127, 86, 151, 121, 311, 281, 512, 289, 349, 178, 257, 151, 257, 214, 241, 176, 273, 173, 252, 235, 344, 355, 650, 376, 401, 214, 254, 140, 168, 84, 102, 43, 97, 65, 97, 32, 140, 140, }, { 60, 174, 34, 60, 26, 87, 30, 43, 17, 100, 26, 78, 47, 104, 52, 126, 39, 108, 60, 113, 78, 113, 82, 143, 60, 143, 69, 169, 91, 283, 239, 522, 261, 274, 139, 217, 148, 174, 117, 226, 156, 204, 143, 174, 191, 283, 248, 413, 261, 331, 222, 383, 243, 296, 222, 239, 100, 178, 74, 156, 34, 265, 222, }, { 160, 183, 41, 41, 5, 89, 29, 100, 41, 89, 65, 47, 47, 77, 59, 136, 53, 100, 47, 183, 47, 94, 35, 100, 77, 142, 89, 142, 106, 272, 332, 522, 249, 302, 178, 178, 178, 189, 106, 172, 100, 261, 112, 178, 94, 290, 160, 284, 136, 249, 106, 231, 172, 272, 201, 403, 178, 308, 148, 213, 100, 338, 332, }, { 114, 158, 1, 86, 57, 86, 28, 100, 86, 57, 28, 114, 57, 86, 43, 129, 14, 86, 43, 57, 86, 114, 57, 158, 57, 186, 129, 186, 158, 215, 215, 474, 158, 316, 186, 172, 129, 316, 114, 114, 201, 201, 71, 100, 186, 201, 114, 272, 100, 172, 86, 143, 86, 330, 244, 301, 158, 201, 129, 445, 86, 502, 675, }, { 173, 195, 21, 75, 37, 75, 5, 102, 43, 113, 21, 86, 27, 92, 37, 173, 37, 140, 54, 108, 48, 124, 48, 146, 70, 173, 108, 195, 119, 227, 292, 596, 238, 265, 151, 157, 130, 195, 54, 184, 86, 249, 65, 130, 54, 178, 102, 254, 124, 216, 54, 162, 86, 216, 92, 222, 113, 205, 86, 216, 146, 807, 970, } */}; /**************************************************************************** * Functions ***************************************************************************** */ /**************************************************************************** * * ROUTINE : CreateMvTrees * * INPUTS : None * * OUTPUTS : None * * RETURNS : None. * * FUNCTION : Builds the VP5 huffman trees used for decoding motion vectors. * * SPECIAL NOTES : None. * * * ERRORS : None. * ****************************************************************************/ void VP5_CreateMvTrees () { UINT32 i; // Build the VP5 trees. memset( XMvHuffTables, 0, (sizeof(HUFF_NODE) * MV_ENTROPY_TABLES * (MV_ENTROPY_TOKENS-1))); memset( YMvHuffTables, 0, (sizeof(HUFF_NODE) * MV_ENTROPY_TABLES * (MV_ENTROPY_TOKENS-1))); for ( i = 0; i < MV_ENTROPY_TABLES; i ++ ) { VP5_BuildHuffTree( XMvHuffTables[i], VP5_XMvFrequencyCounts[i], MV_ENTROPY_TOKENS ); VP5_BuildHuffTree( YMvHuffTables[i], VP5_YMvFrequencyCounts[i], MV_ENTROPY_TOKENS ); } } /**************************************************************************** * * ROUTINE : CreateMvCodeArrays * * INPUTS : None * * OUTPUTS : None * * RETURNS : None. * * FUNCTION : Creates the VP5 Mv huffman code arrays from the VP5 * Mv huffman trees. * * SPECIAL NOTES : None. * * * ERRORS : None. * ****************************************************************************/ //sjlhack - Jim, is this code used??????????????? #if 0 void VP5_CreateMvCodeArrays() { UINT32 i; for ( i = 0; i < MV_ENTROPY_TABLES; i++ ) { VP5_CreateCodeArray( XMvHuffTables[i], 0, XMvPatternTables[i], XMvBitsTables[i], 0, 0 ); VP5_CreateCodeArray( YMvHuffTables[i], 0, YMvPatternTables[i], YMvBitsTables[i], 0, 0 ); } } #endif /* Decoder specific functions */ #ifdef PBDLL /**************************************************************************** * * ROUTINE : VP5_ExtractMVectorComponent * * INPUTS : Decoder Instance * Tree root * Invert sign flag * * OUTPUTS : None. * * RETURNS : None. * * FUNCTION : Extracts a motion vector component for VP5 * * SPECIAL NOTES : None. * * * ERRORS : None. * ****************************************************************************/ INT32 VP5_ExtractMVectorComponent(PB_INSTANCE *pbi, HUFF_NODE * hn, BOOL Invert ) { int nodeptr = 0; int selector = 0; INT32 MvComponent; // Loop searches down through tree based upon bits read from the bitstream // until it hits a leaf at which point we have decoded a token do { int which =DecodeBool(&pbi->br, hn[nodeptr].freq); if(which) { selector = hn[nodeptr].rightunion.right.selector; nodeptr = hn[nodeptr].rightunion.right.value; } else { selector = hn[nodeptr].leftunion.left.selector; nodeptr = (int) hn[nodeptr].leftunion.left.value; } } while ( !selector); MvComponent = (INT32)(nodeptr - 31); return ( Invert ) ? (-MvComponent) : MvComponent; } /**************************************************************************** * * ROUTINE : ExtractMVectorComponentA * * INPUTS : Decoder Instance * Tree root (Not used for VP4) * Invert sign flag (Not used for VP4) * * OUTPUTS : None. * * RETURNS : None. * * FUNCTION : Extracts a motion vector component coded with method A. * * SPECIAL NOTES : None. * * * ERRORS : None. * ****************************************************************************/ static INT32 ExtractMVectorComponentA(PB_INSTANCE *pbi, HUFF_NODE * hn, BOOL Invert ) { INT32 MVectComponent; // temp storage for motion vector UINT32 MVCode = 0; // Temporary storage while decoding the MV UINT32 ExtraBits = 0; // Get group to which coded component belongs MVCode = VP5_bitread( &pbi->br, 3 ); // Now extract the appropriate number of bits to identify the component switch ( MVCode ) { case 0: MVectComponent = 0; break; case 1: MVectComponent = 1; break; case 2: MVectComponent = -1; break; case 3: if ( VP5_bitread1( &pbi->br )) MVectComponent = -2; else MVectComponent = 2; break; case 4: if ( VP5_bitread1( &pbi->br ) ) MVectComponent = -3; else MVectComponent = 3; break; case 5: ExtraBits = VP5_bitread( &pbi->br, 2 ); MVectComponent = 4 + ExtraBits; if ( VP5_bitread1( &pbi->br ) ) MVectComponent = -MVectComponent; break; case 6: ExtraBits = VP5_bitread( &pbi->br, 3 ); MVectComponent = 8 + ExtraBits; if ( VP5_bitread1( &pbi->br )) MVectComponent = -MVectComponent; break; case 7: ExtraBits = VP5_bitread( &pbi->br, 4 ); MVectComponent = 16 + ExtraBits; if ( VP5_bitread1( &pbi->br ) ) MVectComponent = -MVectComponent; break; } return MVectComponent; } /**************************************************************************** * * ROUTINE : ExtractMVectorComponentB * * INPUTS : Decoder Instance * Tree root (Not used for VP4) * Invert sign flag (Not used for VP4) * * OUTPUTS : None. * * RETURNS : None. * * FUNCTION : Extracts an MV component coded using the fallback method * * SPECIAL NOTES : None. * * * ERRORS : None. * ****************************************************************************/ static INT32 ExtractMVectorComponentB(PB_INSTANCE *pbi, HUFF_NODE * MvNodePtr, BOOL Invert ) { INT32 MVectComponent; // temp storage for motion vector // Get group to which coded component belongs MVectComponent = VP5_bitread( &pbi->br, 5 ); if ( VP5_bitread1( &pbi->br ) ) MVectComponent = -MVectComponent; return MVectComponent; } #endif