/****************************************************************************
*
*   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
