ScummVM API documentation
rnc_deco.h
1 /* ScummVM - Graphic Adventure Engine
2  *
3  * ScummVM is the legal property of its developers, whose names
4  * are too numerous to list here. Please refer to the COPYRIGHT
5  * file distributed with this source distribution.
6  *
7  * This program is free software: you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation, either version 3 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program. If not, see <http://www.gnu.org/licenses/>.
19  *
20  */
21 
22 #ifndef COMMON_RNC_DECO_H
23 #define COMMON_RNC_DECO_H
24 
25 
26 namespace Common {
27 
28 // Decoder for RNC (Rob Norton Computing) ProPack compression.
29 class RncDecoder {
30 
31 protected:
32  uint16 _rawTable[64];
33  uint16 _posTable[64];
34  uint16 _lenTable[64];
35  uint16 _crcTable[256];
36 
37  uint16 _bitBuffl;
38  uint16 _bitBuffh;
39  uint8 _bitCount;
40 
41  const uint8 *_srcPtr;
42  uint8 *_dstPtr;
43 
44  int32 _inputByteLeft;
45 
46 public:
47  RncDecoder();
48  ~RncDecoder();
49  int32 unpackM1(const void *input, uint inputSize, void *output);
50  int32 unpackM2(const void *input, void *output);
51 
52  static const uint32 kRnc1Signature = 0x524E4301; // "RNC\001"
53  static const uint32 kRnc2Signature = 0x524E4302; // "RNC\002"
54 
55 protected:
56  void initCrc();
57  uint16 crcBlock(const uint8 *block, uint32 size);
58  uint16 inputBits(uint8 amount);
59  void makeHufftable(uint16 *table);
60  uint16 inputValue(uint16 *table);
61  int getbit();
62 };
63 
64 } // End of namespace Common
65 
66 #endif
Definition: rnc_deco.h:29
Definition: algorithm.h:29