1 /*---------------------------------------------------------------------------*
2 Project: Horizon
3 File: cx_Uncompression.h
4
5 Copyright (C)2009-2012 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: 47717 $
14 *---------------------------------------------------------------------------*/
15
16 /* Please see man pages for details
17
18
19
20 */
21
22 #ifndef NN_CX_CX_UNCOMPRESSION_H_
23 #define NN_CX_CX_UNCOMPRESSION_H_
24
25 #include <nn/types.h>
26 #include <nn/assert.h>
27
28 namespace nn {
29 namespace cx {
30
31 /* Please see man pages for details
32
33 */
34 enum CompressionType
35 {
36 COMPRESSION_LZ = 0x10, //
37 COMPRESSION_HUFFMAN = 0x20, //
38 COMPRESSION_RL = 0x30, //
39 COMPRESSION_LH = 0x40, //
40 COMPRESSION_LRC = 0x50, //
41 COMPRESSION_DEFLATE = 0x60, //
42 COMPRESSION_DIFF = 0x80, //
43
44 COMPRESSION_TYPE_MASK = 0xF0,
45 COMPRESSION_TYPE_EX_MASK = 0xFF
46 };
47
48
49 /* Please see man pages for details
50
51 */
52 struct CompressionHeader
53 {
54 u8 compType; //
55 u8 compParam; //
56 NN_PADDING2;
57 u32 destSize; //
58 };
59
60
61 /* Please see man pages for details
62
63
64 */
65
66 /* Please see man pages for details
67
68
69 */
70 CompressionHeader GetCompressionHeader(const void* pData);
71
72 /* Please see man pages for details
73
74
75
76
77
78
79
80
81
82 */
GetCompressionType(const void * pData)83 inline CompressionType GetCompressionType(const void* pData)
84 {
85 const u8* p = static_cast<const u8*>(pData);
86 return static_cast<CompressionType>(*p & 0xF0);
87 }
88
89
90 /* Please see man pages for details
91
92
93
94
95
96
97
98
99
100
101
102
103 */
104 u32 GetUncompressedSize(const void *pData);
105
106 //----------------------------------------------------------------------
107 /* Please see man pages for details
108
109
110
111
112
113 *///-------------------------------------------------------------------
114 size_t GetGzipUncompressedSize(const void* pSrc, size_t srcSize);
115
116 /* Please see man pages for details
117
118
119
120
121
122
123
124
125
126
127
128 */
129 void UncompressAny( const void* srcp, void* destp );
130
131
132 /* Please see man pages for details
133
134
135
136
137
138
139
140 */
141 void UncompressRL( const void *srcp, void *destp );
142
143
144 /* Please see man pages for details
145
146
147
148
149
150
151
152
153
154 */
155 void UncompressLZ( const void *srcp, void *destp );
156
157
158 /* Please see man pages for details
159
160
161
162
163 */
164 void UncompressBLZ(void* pData, size_t dataSize, size_t bufferSize);
165
166
167 /* Please see man pages for details
168
169
170
171
172
173
174
175
176
177 */
178 void UncompressHuffman( const void *srcp, void *destp );
179
180
181 /* Please see man pages for details
182
183 */
184 const int UNCOMPRESS_LH_WORK_SIZE = (1 << 11) + (1 << 7);
185
186 /* Please see man pages for details
187
188
189
190
191 */
192 void UncompressLH( const u8* srcp, u8* destp, void* work );
193
194 /* Please see man pages for details
195
196 */
197 const int UNCOMPRESS_LRC_WORK_SIZE = ((1 << 12) + (1 << 9)) * 8;
198
199 /* Please see man pages for details
200
201
202
203
204 */
205 void UncompressLRC( const u8* srcp, u8* destp, void* work );
206
207
208
209 //----------------------------------------------------------------------
210 /* Please see man pages for details
211 *///-------------------------------------------------------------------
212 const int UNCOMPRESS_DEFLATE_WORK_SIZE = 7116;
213
214 //----------------------------------------------------------------------
215 /* Please see man pages for details
216 *///-------------------------------------------------------------------
217 const int UNCOMPRESS_GZIP_WORK_SIZE = UNCOMPRESS_DEFLATE_WORK_SIZE;
218
219 //----------------------------------------------------------------------
220 /* Please see man pages for details
221 *///-------------------------------------------------------------------
222 const int UNCOMPRESS_ZLIB_WORK_SIZE = UNCOMPRESS_DEFLATE_WORK_SIZE;
223
224
225 //----------------------------------------------------------------------
226 /* Please see man pages for details
227
228
229
230
231
232
233
234
235
236
237
238
239 *///-------------------------------------------------------------------
240 s32 UncompressDeflate(void* pDst, size_t dstSize, const void* pSrc, size_t srcSize, void* pWork );
241
242 //----------------------------------------------------------------------
243 /* Please see man pages for details
244
245
246
247
248
249
250
251
252
253
254
255
256 *///-------------------------------------------------------------------
257 s32 UncompressGzip (void* pDst, size_t dstSize, const void* pSrc, size_t srcSize, void* pWork );
258
259 //----------------------------------------------------------------------
260 /* Please see man pages for details
261
262
263
264
265
266
267
268
269
270
271
272
273 *///-------------------------------------------------------------------
274 s32 UncompressZlib (void* pDst, size_t dstSize, const void* pSrc, size_t srcSize, void* pWork );
275
276 /* Please see man pages for details
277
278
279
280
281 */
282 void UnfilterDiff( const void *srcp, void *destp );
283
284 /*
285
286 */
287
288 } // namespace cx
289 } // namespace nn
290
291 /* NN_CX_CX_UNCOMPRESSION_H_ */
292 #endif
293