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_UNCOMPRESSION_H_
23 #define NN_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_UNCOMPRESSION_H_ */
292 #endif
293