Advertisement
Guest User

rABS vs binary arithmetic range coder

a guest
Mar 4th, 2014
525
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 0.87 KB | None | 0 0
  1.  
  2. =======================
  3.  
  4.     if ( x < (1<<32) )
  5.     {
  6.         x <<= 32;
  7.         x |= *dword_in_ptr++;
  8.     }
  9.  
  10.     uint64 xm = x & 4095;  
  11.  
  12.     if ( xm < p0 )
  13.     {
  14.         x = p0 * (x >> 12) + xm;
  15.    
  16.         p0 += (4096 - p0) >> 5;
  17.  
  18.         return 0;
  19.     }
  20.     else
  21.     {
  22.         x = (4096 - p0) * (x>>12) + xm - p0;
  23.  
  24.         p0 -= p0 >> 5;
  25.  
  26.         return 1;
  27.     }
  28.    
  29. =======================
  30.  
  31.     if ( range < (1<<32) )
  32.     {
  33.         code <<= 32; range <<= 32;
  34.         code |= *dword_in_ptr++;
  35.     }
  36.  
  37.     uint64 p0range = p0 * (range >> 12);
  38.    
  39.     if ( code < p0range )
  40.     {
  41.         range = p0range;
  42.    
  43.         p0 += (4096 - p0) >> 5;
  44.            
  45.         return 0;
  46.     }
  47.     else
  48.     {
  49.         code -= p0range;
  50.         range -= p0range;
  51.    
  52.         p0 -= p0 >> 5;
  53.        
  54.         return 1;
  55.     }
  56.  
  57. =======================
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement