1 /*---------------------------------------------------------------------------*
2 Project: Horizon
3 File: cx_Uncompression.h
4
5 Copyright (C)2009-2010 Nintendo Co., Ltd./HAL Laboratory, Inc. All rights reserved.
6
7 These coded instructions, statements, and computer programs contain
8 proprietary information of Nintendo of America Inc. and/or Nintendo
9 Company Ltd., and are protected by Federal copyright law. They may
10 not be disclosed to third parties or copied or duplicated in any form,
11 in whole or in part, without the prior written consent of Nintendo.
12
13 $Revision: 38499 $
14 *---------------------------------------------------------------------------*/
15
16 #ifndef NN_CX_UNCOMPRESSION_H_
17 #define NN_CX_UNCOMPRESSION_H_
18
19 #include <nn/types.h>
20
21
22 namespace nn {
23 namespace cx {
24
25 /* Please see man pages for details
26
27 */
28 enum CompressionType
29 {
30 COMPRESSION_LZ = 0x10, //
31 COMPRESSION_HUFFMAN = 0x20, //
32 COMPRESSION_RL = 0x30, //
33 COMPRESSION_LH = 0x40, //
34 COMPRESSION_LRC = 0x50, //
35 COMPRESSION_DIFF = 0x80, //
36
37 COMPRESSION_TYPE_MASK = 0xF0,
38 COMPRESSION_TYPE_EX_MASK = 0xFF
39 };
40
41
42 //----------------------------------------------------------------
43 // Compressed Data Header
44 //
45 struct CompressionHeader
46 {
47 u8 compType; // Compression type
48 u8 compParam; // Compression parameter
49 u8 padding_[2];
50 u32 destSize; // Expanded size
51 };
52
53
54 /* Please see man pages for details
55
56
57 */
58
59 /* Please see man pages for details
60
61
62 */
63 CompressionHeader GetCompressionHeader( const void *data );
64
65 /* Please see man pages for details
66
67
68
69
70
71
72 */
GetCompressionType(const void * data)73 inline CompressionType GetCompressionType( const void *data )
74 {
75 return (CompressionType)( *(u8*)data & 0xF0 );
76 }
77
78
79 /* Please see man pages for details
80
81
82
83
84
85
86
87 */
88 u32 GetUncompressedSize( const void *srcp );
89
90 /* Please see man pages for details
91
92
93
94
95
96
97
98
99
100
101 */
102 void UncompressAny( const void* srcp, void* destp );
103
104
105 /* Please see man pages for details
106
107
108
109
110
111
112
113 */
114 void UncompressRL( const void *srcp, void *destp );
115
116
117 /* Please see man pages for details
118
119
120
121
122
123
124
125
126
127 */
128 void UncompressLZ( const void *srcp, void *destp );
129
130
131 /* Please see man pages for details
132
133
134
135
136 */
137 void UncompressBLZ(void* pData, size_t dataSize, size_t bufferSize);
138
139
140 /* Please see man pages for details
141
142
143
144
145
146
147
148
149
150 */
151 void UncompressHuffman( const void *srcp, void *destp );
152
153
154 /* Please see man pages for details
155
156 */
157 const int UNCOMPRESS_LH_WORK_SIZE = (1 << 11) + (1 << 7);
158
159 /* Please see man pages for details
160
161
162
163
164 */
165 void UncompressLH( const u8* srcp, u8* destp, void* work );
166
167 /* Please see man pages for details
168
169 */
170 const int UNCOMPRESS_LRC_WORK_SIZE = ((1 << 12) + (1 << 9)) * 8;
171
172 /* Please see man pages for details
173
174
175
176
177 */
178 void UncompressLRC( const u8* srcp, u8* destp, void* work );
179
180
181 /* Please see man pages for details
182
183
184
185
186
187
188
189 */
190 void UnfilterDiff( const void *srcp, void *destp );
191
192 /*
193
194 */
195
196 } // namespace cx
197 } // namespace nn
198
199 /* NN_CX_UNCOMPRESSION_H_ */
200 #endif
201