fax/faxclientandserver/faxio/FAXHUFF.H
changeset 20 244d7c5f118e
parent 19 1f776524b15c
child 23 6b1d113cdff3
equal deleted inserted replaced
19:1f776524b15c 20:244d7c5f118e
     1 // Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     2 // All rights reserved.
       
     3 // This component and the accompanying materials are made available
       
     4 // under the terms of "Eclipse Public License v1.0"
       
     5 // which accompanies this distribution, and is available
       
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     7 //
       
     8 // Initial Contributors:
       
     9 // Nokia Corporation - initial contribution.
       
    10 //
       
    11 // Contributors:
       
    12 //
       
    13 // Description:
       
    14 //
       
    15 
       
    16 /**
       
    17  @file
       
    18  @publishedPartner
       
    19  @released
       
    20 */
       
    21 
       
    22 #if !defined(__FAXHUFF_H__)
       
    23 #define __FAXHUFF_H__
       
    24 
       
    25 #define KFaxBlack 0		// Mask for CFbsBitmap bytes
       
    26 #define KFaxWhite 0xFF	// Reversing gives a negative image
       
    27 
       
    28 typedef TUint32 TCodeDef;
       
    29 
       
    30 #define HUFF(len,bits) (TUint(len)<<16)|(bits)
       
    31 #define HUFFLEN(def) (TUint(def)>>16)
       
    32 #define HUFFBITS(def) (TUint(def)<<16)
       
    33 
       
    34 const TCodeDef KCodes[] =
       
    35 	{
       
    36 	// interleaved black/white runs
       
    37 	HUFF(10,0x0dc0),  // 0 black = 10 bit code is 0000110111
       
    38 	HUFF(8,0x3500),// 0 white = 8 bit code is 00110101
       
    39 	HUFF(3,0x4000),// 1 black = 3 bit code is 010
       
    40 	HUFF(6,0x1c00),// 1 white = 6 bit code is 000111
       
    41 	HUFF(2,0xc000),// 2 black = 2 bit code is 11
       
    42 	HUFF(4,0x7000),// 2 white = 4 bit code is 0111
       
    43 	HUFF(2,0x8000),// 3 black = 2 bit code is 10
       
    44 	HUFF(4,0x8000),// 3 white = 4 bit code is 1000
       
    45 	HUFF(3,0x6000),// 4 black = 3 bit code is 011
       
    46 	HUFF(4,0xb000),// 4 white = 4 bit code is 1011
       
    47 	HUFF(4,0x3000),// 5 black = 4 bit code is 0011
       
    48 	HUFF(4,0xc000),// 5 white = 4 bit code is 1100
       
    49 	HUFF(4,0x2000),// 6 black = 4 bit code is 0010
       
    50 	HUFF(4,0xe000),// 6 white = 4 bit code is 1110
       
    51 	HUFF(5,0x1800),// 7 black = 5 bit code is 00011
       
    52 	HUFF(4,0xf000),// 7 white = 4 bit code is 1111
       
    53 	HUFF(6,0x1400),// 8 black = 6 bit code is 000101
       
    54 	HUFF(5,0x9800),// 8 white = 5 bit code is 10011
       
    55 	HUFF(6,0x1000),// 9 black = 6 bit code is 000100
       
    56 	HUFF(5,0xa000),// 9 white = 5 bit code is 10100
       
    57 	HUFF(7,0x0800),// 10 black = 7 bit code is 0000100
       
    58 	HUFF(5,0x3800),// 10 white = 5 bit code is 00111
       
    59 	HUFF(7,0x0a00),// 11 black = 7 bit code is 0000101
       
    60 	HUFF(5,0x4000),// 11 white = 5 bit code is 01000
       
    61 	HUFF(7,0x0e00),// 12 black = 7 bit code is 0000111
       
    62 	HUFF(6,0x2000),// 12 white = 6 bit code is 001000
       
    63 	HUFF(8,0x0400),// 13 black = 8 bit code is 00000100
       
    64 	HUFF(6,0x0c00),// 13 white = 6 bit code is 000011
       
    65 	HUFF(8,0x0700),// 14 black = 8 bit code is 00000111
       
    66 	HUFF(6,0xd000),// 14 white = 6 bit code is 110100
       
    67 	HUFF(9,0x0c00),// 15 black = 9 bit code is 000011000
       
    68 	HUFF(6,0xd400),// 15 white = 6 bit code is 110101
       
    69 	HUFF(10,0x05c0),  // 16 black = 10 bit code is 0000010111
       
    70 	HUFF(6,0xa800),// 16 white = 6 bit code is 101010
       
    71 	HUFF(10,0x0600),  // 17 black = 10 bit code is 0000011000
       
    72 	HUFF(6,0xac00),// 17 white = 6 bit code is 101011
       
    73 	HUFF(10,0x0200),  // 18 black = 10 bit code is 0000001000
       
    74 	HUFF(7,0x4e00),// 18 white = 7 bit code is 0100111
       
    75 	HUFF(11,0x0ce0),  // 19 black = 11 bit code is 00001100111
       
    76 	HUFF(7,0x1800),// 19 white = 7 bit code is 0001100
       
    77 	HUFF(11,0x0d00),  // 20 black = 11 bit code is 00001101000
       
    78 	HUFF(7,0x1000),// 20 white = 7 bit code is 0001000
       
    79 	HUFF(11,0x0d80),  // 21 black = 11 bit code is 00001101100
       
    80 	HUFF(7,0x2e00),// 21 white = 7 bit code is 0010111
       
    81 	HUFF(11,0x06e0),  // 22 black = 11 bit code is 00000110111
       
    82 	HUFF(7,0x0600),// 22 white = 7 bit code is 0000011
       
    83 	HUFF(11,0x0500),  // 23 black = 11 bit code is 00000101000
       
    84 	HUFF(7,0x0800),// 23 white = 7 bit code is 0000100
       
    85 	HUFF(11,0x02e0),  // 24 black = 11 bit code is 00000010111
       
    86 	HUFF(7,0x5000),// 24 white = 7 bit code is 0101000
       
    87 	HUFF(11,0x0300),  // 25 black = 11 bit code is 00000011000
       
    88 	HUFF(7,0x5600),// 25 white = 7 bit code is 0101011
       
    89 	HUFF(12,0x0ca0),  // 26 black = 12 bit code is 000011001010
       
    90 	HUFF(7,0x2600),// 26 white = 7 bit code is 0010011
       
    91 	HUFF(12,0x0cb0),  // 27 black = 12 bit code is 000011001011
       
    92 	HUFF(7,0x4800),// 27 white = 7 bit code is 0100100
       
    93 	HUFF(12,0x0cc0),  // 28 black = 12 bit code is 000011001100
       
    94 	HUFF(7,0x3000),// 28 white = 7 bit code is 0011000
       
    95 	HUFF(12,0x0cd0),  // 29 black = 12 bit code is 000011001101
       
    96 	HUFF(8,0x0200),// 29 white = 8 bit code is 00000010
       
    97 	HUFF(12,0x0680),  // 30 black = 12 bit code is 000001101000
       
    98 	HUFF(8,0x0300),// 30 white = 8 bit code is 00000011
       
    99 	HUFF(12,0x0690),  // 31 black = 12 bit code is 000001101001
       
   100 	HUFF(8,0x1a00),// 31 white = 8 bit code is 00011010
       
   101 	HUFF(12,0x06a0),  // 32 black = 12 bit code is 000001101010
       
   102 	HUFF(8,0x1b00),// 32 white = 8 bit code is 00011011
       
   103 	HUFF(12,0x06b0),  // 33 black = 12 bit code is 000001101011
       
   104 	HUFF(8,0x1200),// 33 white = 8 bit code is 00010010
       
   105 	HUFF(12,0x0d20),  // 34 black = 12 bit code is 000011010010
       
   106 	HUFF(8,0x1300),// 34 white = 8 bit code is 00010011
       
   107 	HUFF(12,0x0d30),  // 35 black = 12 bit code is 000011010011
       
   108 	HUFF(8,0x1400),// 35 white = 8 bit code is 00010100
       
   109 	HUFF(12,0x0d40),  // 36 black = 12 bit code is 000011010100
       
   110 	HUFF(8,0x1500),// 36 white = 8 bit code is 00010101
       
   111 	HUFF(12,0x0d50),  // 37 black = 12 bit code is 000011010101
       
   112 	HUFF(8,0x1600),// 37 white = 8 bit code is 00010110
       
   113 	HUFF(12,0x0d60),  // 38 black = 12 bit code is 000011010110
       
   114 	HUFF(8,0x1700),// 38 white = 8 bit code is 00010111
       
   115 	HUFF(12,0x0d70),  // 39 black = 12 bit code is 000011010111
       
   116 	HUFF(8,0x2800),// 39 white = 8 bit code is 00101000
       
   117 	HUFF(12,0x06c0),  // 40 black = 12 bit code is 000001101100
       
   118 	HUFF(8,0x2900),// 40 white = 8 bit code is 00101001
       
   119 	HUFF(12,0x06d0),  // 41 black = 12 bit code is 000001101101
       
   120 	HUFF(8,0x2a00),// 41 white = 8 bit code is 00101010
       
   121 	HUFF(12,0x0da0),  // 42 black = 12 bit code is 000011011010
       
   122 	HUFF(8,0x2b00),// 42 white = 8 bit code is 00101011
       
   123 	HUFF(12,0x0db0),  // 43 black = 12 bit code is 000011011011
       
   124 	HUFF(8,0x2c00),// 43 white = 8 bit code is 00101100
       
   125 	HUFF(12,0x0540),  // 44 black = 12 bit code is 000001010100
       
   126 	HUFF(8,0x2d00),// 44 white = 8 bit code is 00101101
       
   127 	HUFF(12,0x0550),  // 45 black = 12 bit code is 000001010101
       
   128 	HUFF(8,0x0400),// 45 white = 8 bit code is 00000100
       
   129 	HUFF(12,0x0560),  // 46 black = 12 bit code is 000001010110
       
   130 	HUFF(8,0x0500),// 46 white = 8 bit code is 00000101
       
   131 	HUFF(12,0x0570),  // 47 black = 12 bit code is 000001010111
       
   132 	HUFF(8,0x0a00),// 47 white = 8 bit code is 00001010
       
   133 	HUFF(12,0x0640),  // 48 black = 12 bit code is 000001100100
       
   134 	HUFF(8,0x0b00),// 48 white = 8 bit code is 00001011
       
   135 	HUFF(12,0x0650),  // 49 black = 12 bit code is 000001100101
       
   136 	HUFF(8,0x5200),// 49 white = 8 bit code is 01010010
       
   137 	HUFF(12,0x0520),  // 50 black = 12 bit code is 000001010010
       
   138 	HUFF(8,0x5300),// 50 white = 8 bit code is 01010011
       
   139 	HUFF(12,0x0530),  // 51 black = 12 bit code is 000001010011
       
   140 	HUFF(8,0x5400),// 51 white = 8 bit code is 01010100
       
   141 	HUFF(12,0x0240),  // 52 black = 12 bit code is 000000100100
       
   142 	HUFF(8,0x5500),// 52 white = 8 bit code is 01010101
       
   143 	HUFF(12,0x0370),  // 53 black = 12 bit code is 000000110111
       
   144 	HUFF(8,0x2400),// 53 white = 8 bit code is 00100100
       
   145 	HUFF(12,0x0380),  // 54 black = 12 bit code is 000000111000
       
   146 	HUFF(8,0x2500),// 54 white = 8 bit code is 00100101
       
   147 	HUFF(12,0x0270),  // 55 black = 12 bit code is 000000100111
       
   148 	HUFF(8,0x5800),// 55 white = 8 bit code is 01011000
       
   149 	HUFF(12,0x0280),  // 56 black = 12 bit code is 000000101000
       
   150 	HUFF(8,0x5900),// 56 white = 8 bit code is 01011001
       
   151 	HUFF(12,0x0580),  // 57 black = 12 bit code is 000001011000
       
   152 	HUFF(8,0x5a00),// 57 white = 8 bit code is 01011010
       
   153 	HUFF(12,0x0590),  // 58 black = 12 bit code is 000001011001
       
   154 	HUFF(8,0x5b00),// 58 white = 8 bit code is 01011011
       
   155 	HUFF(12,0x02b0),  // 59 black = 12 bit code is 000000101011
       
   156 	HUFF(8,0x4a00),// 59 white = 8 bit code is 01001010
       
   157 	HUFF(12,0x02c0),  // 60 black = 12 bit code is 000000101100
       
   158 	HUFF(8,0x4b00),// 60 white = 8 bit code is 01001011
       
   159 	HUFF(12,0x05a0),  // 61 black = 12 bit code is 000001011010
       
   160 	HUFF(8,0x3200),// 61 white = 8 bit code is 00110010
       
   161 	HUFF(12,0x0660),  // 62 black = 12 bit code is 000001100110
       
   162 	HUFF(8,0x3300),// 62 white = 8 bit code is 00110011
       
   163 	HUFF(12,0x0670),  // 63 black = 12 bit code is 000001100111
       
   164 	HUFF(8,0x3400),// 63 white = 8 bit code is 00110100
       
   165 	// code 0x80 and 0x81 not used for makeup.. use for tag codes instead!
       
   166 	HUFF(9,0x0180),	// two-dimensional EOL plus singleton 1 tag bit = 000000011
       
   167 	HUFF(9,0x0100), // two-dimensional EOL plus singleton 0 tag bit = 000000010
       
   168 	// interleaved black/white makeup
       
   169 	HUFF(10,0x03c0),  // 64 black = 10 bit code is 0000001111
       
   170 	HUFF(5,0xd800),// 64 white = 5 bit code is 11011
       
   171 	HUFF(12,0x0c80),  // 128 black = 12 bit code is 000011001000
       
   172 	HUFF(5,0x9000),// 128 white = 5 bit code is 10010
       
   173 	HUFF(12,0x0c90),  // 192 black = 12 bit code is 000011001001
       
   174 	HUFF(6,0x5c00),// 192 white = 6 bit code is 010111
       
   175 	HUFF(12,0x05b0),  // 256 black = 12 bit code is 000001011011
       
   176 	HUFF(7,0x6e00),// 256 white = 7 bit code is 0110111
       
   177 	HUFF(12,0x0330),  // 320 black = 12 bit code is 000000110011
       
   178 	HUFF(8,0x3600),// 320 white = 8 bit code is 00110110
       
   179 	HUFF(12,0x0340),  // 384 black = 12 bit code is 000000110100
       
   180 	HUFF(8,0x3700),// 384 white = 8 bit code is 00110111
       
   181 	HUFF(12,0x0350),  // 448 black = 12 bit code is 000000110101
       
   182 	HUFF(8,0x6400),// 448 white = 8 bit code is 01100100
       
   183 	HUFF(13,0x0360),  // 512 black = 13 bit code is 0000001101100
       
   184 	HUFF(8,0x6500),// 512 white = 8 bit code is 01100101
       
   185 	HUFF(13,0x0368),  // 576 black = 13 bit code is 0000001101101
       
   186 	HUFF(8,0x6800),// 576 white = 8 bit code is 01101000
       
   187 	HUFF(13,0x0250),  // 640 black = 13 bit code is 0000001001010
       
   188 	HUFF(8,0x6700),// 640 white = 8 bit code is 01100111
       
   189 	HUFF(13,0x0258),  // 704 black = 13 bit code is 0000001001011
       
   190 	HUFF(9,0x6600),// 704 white = 9 bit code is 011001100
       
   191 	HUFF(13,0x0260),  // 768 black = 13 bit code is 0000001001100
       
   192 	HUFF(9,0x6680),// 768 white = 9 bit code is 011001101
       
   193 	HUFF(13,0x0268),  // 832 black = 13 bit code is 0000001001101
       
   194 	HUFF(9,0x6900),// 832 white = 9 bit code is 011010010
       
   195 	HUFF(13,0x0390),  // 896 black = 13 bit code is 0000001110010
       
   196 	HUFF(9,0x6980),// 896 white = 9 bit code is 011010011
       
   197 	HUFF(13,0x0398),  // 960 black = 13 bit code is 0000001110011
       
   198 	HUFF(9,0x6a00),// 960 white = 9 bit code is 011010100
       
   199 	HUFF(13,0x03a0),  // 1024 black = 13 bit code is 0000001110100
       
   200 	HUFF(9,0x6a80),// 1024 white = 9 bit code is 011010101
       
   201 	HUFF(13,0x03a8),  // 1088 black = 13 bit code is 0000001110101
       
   202 	HUFF(9,0x6b00),// 1088 white = 9 bit code is 011010110
       
   203 	HUFF(13,0x03b0),  // 1152 black = 13 bit code is 0000001110110
       
   204 	HUFF(9,0x6b80),// 1152 white = 9 bit code is 011010111
       
   205 	HUFF(13,0x03b8),  // 1216 black = 13 bit code is 0000001110111
       
   206 	HUFF(9,0x6c00),// 1216 white = 9 bit code is 011011000
       
   207 	HUFF(13,0x0290),  // 1280 black = 13 bit code is 0000001010010
       
   208 	HUFF(9,0x6c80),// 1280 white = 9 bit code is 011011001
       
   209 	HUFF(13,0x0298),  // 1344 black = 13 bit code is 0000001010011
       
   210 	HUFF(9,0x6d00),// 1344 white = 9 bit code is 011011010
       
   211 	HUFF(13,0x02a0),  // 1408 black = 13 bit code is 0000001010100
       
   212 	HUFF(9,0x6d80),// 1408 white = 9 bit code is 011011011
       
   213 	HUFF(13,0x02a8),  // 1472 black = 13 bit code is 0000001010101
       
   214 	HUFF(9,0x4c00),// 1472 white = 9 bit code is 010011000
       
   215 	HUFF(13,0x02d0),  // 1536 black = 13 bit code is 0000001011010
       
   216 	HUFF(9,0x4c80),// 1536 white = 9 bit code is 010011001
       
   217 	HUFF(13,0x02d8),  // 1600 black = 13 bit code is 0000001011011
       
   218 	HUFF(9,0x4d00),// 1600 white = 9 bit code is 010011010
       
   219 	HUFF(13,0x0320),  // 1664 black = 13 bit code is 0000001100100
       
   220 	HUFF(6,0x6000),// 1664 white = 6 bit code is 011000
       
   221 	HUFF(13,0x0328),  // 1728 black = 13 bit code is 0000001100101
       
   222 	HUFF(9,0x4d80), // 1728 white = 9 bit code is 010011011
       
   223 	// extra codes
       
   224 	HUFF(8,0x0100),	  // one-dimensional EOL = 00000001
       
   225 	HUFF(4,0x1000),   // pass mode = 4 bit code is 0001
       
   226 	HUFF(3,0x2000),   // horizontal mode = 3 bit code is 001 followed by run lengths (a1-a0) (a2-a1)
       
   227 	// vertical mode codes
       
   228 	HUFF(7,0x0600),   // +3 b1-a1 = 7 bit code is 0000011
       
   229 	HUFF(6,0x0c00),   // +2 b1-a1 = 6 bit code is 000011 
       
   230 	HUFF(3,0x6000),   // +1 b1-a1 = 3 bit code is 011 
       
   231 	HUFF(1,0x8000),   //  0 b1=a1 = 1 bit code is 1 
       
   232 	HUFF(3,0x4000),   // -1 b1-a1 = 3 bit code is 010
       
   233 	HUFF(6,0x0800),   // -2 b1-a1 = 6 bit code is 000010
       
   234 	HUFF(7,0x0400)    // -3 b1-a1 = 7 bit code is 0000010
       
   235 	};
       
   236 
       
   237 const TInt KRleBlack=0;
       
   238 const TInt KRleWhite=1;
       
   239 const TInt KRleMakeup=128;
       
   240 const TInt KRleTag1D=KRleMakeup;	// exploit the two holes in the table
       
   241 const TInt KRleTag2D=KRleMakeup+1;
       
   242 const TInt KRleExtra=KRleMakeup+2*(1+(1728>>6));
       
   243 const TInt KRleStd1D=KRleExtra;
       
   244 const TInt KRlePassMode=KRleExtra+1;
       
   245 const TInt KRleHorzMode=KRleExtra+2;
       
   246 const TInt KRleVertMode0=KRleExtra+6;
       
   247 
       
   248 
       
   249 const TInt KRleMakeupMask=~(KRleWhite|KRleMakeup);
       
   250 
       
   251 #endif // __FAXHUFF_H__