ruby-lzma 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (97) hide show
  1. data/.gitignore +6 -0
  2. data/README.markdown +15 -0
  3. data/Rakefile +53 -0
  4. data/VERSION +1 -0
  5. data/ext/Alloc.cpp +118 -0
  6. data/ext/Alloc.h +29 -0
  7. data/ext/BinTree.h +55 -0
  8. data/ext/BinTree2.h +12 -0
  9. data/ext/BinTree3.h +16 -0
  10. data/ext/BinTree3Z.h +16 -0
  11. data/ext/BinTree4.h +18 -0
  12. data/ext/BinTree4b.h +20 -0
  13. data/ext/BinTreeMain.h +444 -0
  14. data/ext/BranchX86.c +101 -0
  15. data/ext/BranchX86.h +19 -0
  16. data/ext/CRC.cpp +61 -0
  17. data/ext/CRC.h +36 -0
  18. data/ext/C_FileIO.h +45 -0
  19. data/ext/CommandLineParser.h +82 -0
  20. data/ext/Defs.h +20 -0
  21. data/ext/FileStreams.h +98 -0
  22. data/ext/HC.h +55 -0
  23. data/ext/HC2.h +13 -0
  24. data/ext/HC3.h +17 -0
  25. data/ext/HC4.h +19 -0
  26. data/ext/HC4b.h +21 -0
  27. data/ext/HCMain.h +350 -0
  28. data/ext/ICoder.h +156 -0
  29. data/ext/IMatchFinder.h +63 -0
  30. data/ext/IStream.h +62 -0
  31. data/ext/InBuffer.cpp +80 -0
  32. data/ext/InBuffer.h +76 -0
  33. data/ext/LZInWindow.cpp +102 -0
  34. data/ext/LZInWindow.h +84 -0
  35. data/ext/LZMA.h +82 -0
  36. data/ext/LZMADecoder.h +248 -0
  37. data/ext/LZMAEncoder.cpp +1504 -0
  38. data/ext/LZMAEncoder.h +416 -0
  39. data/ext/LZOutWindow.cpp +17 -0
  40. data/ext/LZOutWindow.h +66 -0
  41. data/ext/LzmaBench.h +11 -0
  42. data/ext/LzmaDecode.c +588 -0
  43. data/ext/LzmaDecode.h +131 -0
  44. data/ext/LzmaRam.cpp +228 -0
  45. data/ext/LzmaRam.h +46 -0
  46. data/ext/LzmaRamDecode.c +79 -0
  47. data/ext/LzmaRamDecode.h +55 -0
  48. data/ext/MyCom.h +203 -0
  49. data/ext/MyGuidDef.h +54 -0
  50. data/ext/MyInitGuid.h +13 -0
  51. data/ext/MyString.h +631 -0
  52. data/ext/MyUnknown.h +24 -0
  53. data/ext/MyWindows.h +183 -0
  54. data/ext/OutBuffer.cpp +117 -0
  55. data/ext/OutBuffer.h +64 -0
  56. data/ext/Pat.h +318 -0
  57. data/ext/Pat2.h +22 -0
  58. data/ext/Pat2H.h +24 -0
  59. data/ext/Pat2R.h +20 -0
  60. data/ext/Pat3H.h +24 -0
  61. data/ext/Pat4H.h +24 -0
  62. data/ext/PatMain.h +989 -0
  63. data/ext/RangeCoder.h +205 -0
  64. data/ext/RangeCoderBit.cpp +80 -0
  65. data/ext/RangeCoderBit.h +120 -0
  66. data/ext/RangeCoderBitTree.h +161 -0
  67. data/ext/RangeCoderOpt.h +31 -0
  68. data/ext/StdAfx.h +8 -0
  69. data/ext/StreamUtils.cpp +44 -0
  70. data/ext/StreamUtils.h +11 -0
  71. data/ext/StringConvert.h +71 -0
  72. data/ext/StringToInt.h +17 -0
  73. data/ext/Types.h +19 -0
  74. data/ext/Vector.h +211 -0
  75. data/ext/extconf.rb +7 -0
  76. data/ext/lzma_ruby.cpp +51 -0
  77. data/ext/lzmalib.h +64 -0
  78. data/ext/mylib.cpp +81 -0
  79. data/java/SevenZip/CRC.java +52 -0
  80. data/java/SevenZip/Compression/LZ/BinTree.java +382 -0
  81. data/java/SevenZip/Compression/LZ/InWindow.java +131 -0
  82. data/java/SevenZip/Compression/LZ/OutWindow.java +85 -0
  83. data/java/SevenZip/Compression/LZMA/Base.java +88 -0
  84. data/java/SevenZip/Compression/LZMA/Decoder.java +329 -0
  85. data/java/SevenZip/Compression/LZMA/Encoder.java +1415 -0
  86. data/java/SevenZip/Compression/RangeCoder/BitTreeDecoder.java +55 -0
  87. data/java/SevenZip/Compression/RangeCoder/BitTreeEncoder.java +99 -0
  88. data/java/SevenZip/Compression/RangeCoder/Decoder.java +88 -0
  89. data/java/SevenZip/Compression/RangeCoder/Encoder.java +151 -0
  90. data/java/SevenZip/ICodeProgress.java +6 -0
  91. data/java/SevenZip/LzmaAlone.java +253 -0
  92. data/java/SevenZip/LzmaBench.java +391 -0
  93. data/java/com/ephemeronindustries/lzma/LZMA.java +104 -0
  94. data/lib/lzma.rb +32 -0
  95. data/ruby-lzma.gemspec +136 -0
  96. data/test/test_lzma.rb +42 -0
  97. metadata +157 -0
data/ext/LzmaDecode.h ADDED
@@ -0,0 +1,131 @@
1
+ /*
2
+ LzmaDecode.h
3
+ LZMA Decoder interface
4
+
5
+ LZMA SDK 4.21 Copyright (c) 1999-2005 Igor Pavlov (2005-06-08)
6
+ http://www.7-zip.org/
7
+
8
+ LZMA SDK is licensed under two licenses:
9
+ 1) GNU Lesser General Public License (GNU LGPL)
10
+ 2) Common Public License (CPL)
11
+ It means that you can select one of these two licenses and
12
+ follow rules of that license.
13
+
14
+ SPECIAL EXCEPTION:
15
+ Igor Pavlov, as the author of this code, expressly permits you to
16
+ statically or dynamically link your code (or bind by name) to the
17
+ interfaces of this file without subjecting your linked code to the
18
+ terms of the CPL or GNU LGPL. Any modifications or additions
19
+ to this file, however, are subject to the LGPL or CPL terms.
20
+ */
21
+
22
+ #ifndef __LZMADECODE_H
23
+ #define __LZMADECODE_H
24
+
25
+ /* #define _LZMA_IN_CB */
26
+ /* Use callback for input data */
27
+
28
+ /* #define _LZMA_OUT_READ */
29
+ /* Use read function for output data */
30
+
31
+ /* #define _LZMA_PROB32 */
32
+ /* It can increase speed on some 32-bit CPUs,
33
+ but memory usage will be doubled in that case */
34
+
35
+ /* #define _LZMA_LOC_OPT */
36
+ /* Enable local speed optimizations inside code */
37
+
38
+ /* #define _LZMA_SYSTEM_SIZE_T */
39
+ /* Use system's size_t. You can use it to enable 64-bit sizes supporting*/
40
+
41
+ #ifndef UInt32
42
+ #ifdef _LZMA_UINT32_IS_ULONG
43
+ #define UInt32 unsigned long
44
+ #else
45
+ #define UInt32 unsigned int
46
+ #endif
47
+ #endif
48
+
49
+ #ifndef SizeT
50
+ #ifdef _LZMA_SYSTEM_SIZE_T
51
+ #include <stddef.h>
52
+ #define SizeT size_t
53
+ #else
54
+ #define SizeT UInt32
55
+ #endif
56
+ #endif
57
+
58
+ #ifdef _LZMA_PROB32
59
+ #define CProb UInt32
60
+ #else
61
+ #define CProb unsigned short
62
+ #endif
63
+
64
+ #define LZMA_RESULT_OK 0
65
+ #define LZMA_RESULT_DATA_ERROR 1
66
+
67
+ #ifdef _LZMA_IN_CB
68
+ typedef struct _ILzmaInCallback
69
+ {
70
+ int (*Read)(void *object, const unsigned char **buffer, SizeT *bufferSize);
71
+ } ILzmaInCallback;
72
+ #endif
73
+
74
+ #define LZMA_BASE_SIZE 1846
75
+ #define LZMA_LIT_SIZE 768
76
+
77
+ #define LZMA_PROPERTIES_SIZE 5
78
+
79
+ typedef struct _CLzmaProperties
80
+ {
81
+ int lc;
82
+ int lp;
83
+ int pb;
84
+ #ifdef _LZMA_OUT_READ
85
+ UInt32 DictionarySize;
86
+ #endif
87
+ }CLzmaProperties;
88
+
89
+ int LzmaDecodeProperties(CLzmaProperties *propsRes, const unsigned char *propsData, int size);
90
+
91
+ #define LzmaGetNumProbs(Properties) (LZMA_BASE_SIZE + (LZMA_LIT_SIZE << ((Properties)->lc + (Properties)->lp)))
92
+
93
+ #define kLzmaNeedInitId (-2)
94
+
95
+ typedef struct _CLzmaDecoderState
96
+ {
97
+ CLzmaProperties Properties;
98
+ CProb *Probs;
99
+
100
+ #ifdef _LZMA_IN_CB
101
+ const unsigned char *Buffer;
102
+ const unsigned char *BufferLim;
103
+ #endif
104
+
105
+ #ifdef _LZMA_OUT_READ
106
+ unsigned char *Dictionary;
107
+ UInt32 Range;
108
+ UInt32 Code;
109
+ UInt32 DictionaryPos;
110
+ UInt32 GlobalPos;
111
+ UInt32 DistanceLimit;
112
+ UInt32 Reps[4];
113
+ int State;
114
+ int RemainLen;
115
+ unsigned char TempDictionary[4];
116
+ #endif
117
+ } CLzmaDecoderState;
118
+
119
+ #ifdef _LZMA_OUT_READ
120
+ #define LzmaDecoderInit(vs) { (vs)->RemainLen = kLzmaNeedInitId; }
121
+ #endif
122
+
123
+ int LzmaDecode(CLzmaDecoderState *vs,
124
+ #ifdef _LZMA_IN_CB
125
+ ILzmaInCallback *inCallback,
126
+ #else
127
+ const unsigned char *inStream, SizeT inSize, SizeT *inSizeProcessed,
128
+ #endif
129
+ unsigned char *outStream, SizeT outSize, SizeT *outSizeProcessed);
130
+
131
+ #endif
data/ext/LzmaRam.cpp ADDED
@@ -0,0 +1,228 @@
1
+ // LzmaRam.cpp
2
+
3
+ #include "StdAfx.h"
4
+ #include "Types.h"
5
+ #include "LZMADecoder.h"
6
+ #include "LZMAEncoder.h"
7
+ #include "LzmaRam.h"
8
+
9
+ extern "C"
10
+ {
11
+ #include "BranchX86.h"
12
+ }
13
+
14
+ class CInStreamRam:
15
+ public ISequentialInStream,
16
+ public CMyUnknownImp
17
+ {
18
+ const Byte *Data;
19
+ size_t Size;
20
+ size_t Pos;
21
+ public:
22
+ MY_UNKNOWN_IMP
23
+ void Init(const Byte *data, size_t size)
24
+ {
25
+ Data = data;
26
+ Size = size;
27
+ Pos = 0;
28
+ }
29
+ STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize);
30
+ };
31
+
32
+ STDMETHODIMP CInStreamRam::Read(void *data, UInt32 size, UInt32 *processedSize)
33
+ {
34
+ UInt32 remain = Size - Pos;
35
+ if (size > remain)
36
+ size = remain;
37
+ for (UInt32 i = 0; i < size; i++)
38
+ ((Byte *)data)[i] = Data[Pos + i];
39
+ Pos += size;
40
+ if(processedSize != NULL)
41
+ *processedSize = size;
42
+ return S_OK;
43
+ }
44
+
45
+ class COutStreamRam:
46
+ public ISequentialOutStream,
47
+ public CMyUnknownImp
48
+ {
49
+ size_t Size;
50
+ public:
51
+ Byte *Data;
52
+ size_t Pos;
53
+ bool Overflow;
54
+ void Init(Byte *data, size_t size)
55
+ {
56
+ Data = data;
57
+ Size = size;
58
+ Pos = 0;
59
+ Overflow = false;
60
+ }
61
+ void SetPos(size_t pos)
62
+ {
63
+ Overflow = false;
64
+ Pos = pos;
65
+ }
66
+ MY_UNKNOWN_IMP
67
+ HRESULT WriteByte(Byte b)
68
+ {
69
+ if (Pos >= Size)
70
+ {
71
+ Overflow = true;
72
+ return E_FAIL;
73
+ }
74
+ Data[Pos++] = b;
75
+ return S_OK;
76
+ }
77
+ STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize);
78
+ };
79
+
80
+ STDMETHODIMP COutStreamRam::Write(const void *data, UInt32 size, UInt32 *processedSize)
81
+ {
82
+ UInt32 i;
83
+ for (i = 0; i < size && Pos < Size; i++)
84
+ Data[Pos++] = ((const Byte *)data)[i];
85
+ if(processedSize != NULL)
86
+ *processedSize = i;
87
+ if (i != size)
88
+ {
89
+ Overflow = true;
90
+ return E_FAIL;
91
+ }
92
+ return S_OK;
93
+ }
94
+
95
+ #define SZE_FAIL (1)
96
+ #define SZE_OUTOFMEMORY (2)
97
+ #define SZE_OUT_OVERFLOW (3)
98
+
99
+ int LzmaRamEncode(
100
+ const Byte *inBuffer, size_t inSize,
101
+ Byte *outBuffer, size_t outSize, size_t *outSizeProcessed,
102
+ UInt32 dictionarySize, ESzFilterMode filterMode)
103
+ {
104
+ #ifndef _NO_EXCEPTIONS
105
+ try {
106
+ #endif
107
+
108
+ *outSizeProcessed = 0;
109
+ const size_t kIdSize = 0;
110
+ const size_t kLzmaPropsSize = 5;
111
+ const size_t kMinDestSize = kIdSize + kLzmaPropsSize + 8;
112
+ if (outSize < kMinDestSize)
113
+ return SZE_OUT_OVERFLOW;
114
+ NCompress::NLZMA::CEncoder *encoderSpec = new NCompress::NLZMA::CEncoder;
115
+ CMyComPtr<ICompressCoder> encoder = encoderSpec;
116
+
117
+ PROPID propIDs[] =
118
+ {
119
+ NCoderPropID::kAlgorithm,
120
+ NCoderPropID::kDictionarySize,
121
+ NCoderPropID::kNumFastBytes,
122
+ };
123
+ const int kNumProps = sizeof(propIDs) / sizeof(propIDs[0]);
124
+ PROPVARIANT properties[kNumProps];
125
+ properties[0].vt = VT_UI4;
126
+ properties[1].vt = VT_UI4;
127
+ properties[2].vt = VT_UI4;
128
+ properties[0].ulVal = (UInt32)2;
129
+ properties[1].ulVal = (UInt32)dictionarySize;
130
+ properties[2].ulVal = (UInt32)64;
131
+
132
+ if (encoderSpec->SetCoderProperties(propIDs, properties, kNumProps) != S_OK)
133
+ return 1;
134
+
135
+ COutStreamRam *outStreamSpec = new COutStreamRam;
136
+ if (outStreamSpec == 0)
137
+ return SZE_OUTOFMEMORY;
138
+ CMyComPtr<ISequentialOutStream> outStream = outStreamSpec;
139
+ CInStreamRam *inStreamSpec = new CInStreamRam;
140
+ if (inStreamSpec == 0)
141
+ return SZE_OUTOFMEMORY;
142
+ CMyComPtr<ISequentialInStream> inStream = inStreamSpec;
143
+
144
+ outStreamSpec->Init(outBuffer, outSize);
145
+ // if (outStreamSpec->WriteByte(0) != S_OK)
146
+ // return SZE_OUT_OVERFLOW;
147
+
148
+ if (encoderSpec->WriteCoderProperties(outStream) != S_OK)
149
+ return SZE_OUT_OVERFLOW;
150
+ if (outStreamSpec->Pos != kIdSize + kLzmaPropsSize)
151
+ return 1;
152
+
153
+ int i;
154
+ for (i = 0; i < 8; i++)
155
+ {
156
+ UInt64 t = (UInt64)(inSize);
157
+ if (outStreamSpec->WriteByte((Byte)((t) >> (8 * i))) != S_OK)
158
+ return SZE_OUT_OVERFLOW;
159
+ }
160
+
161
+ Byte *filteredStream = 0;
162
+
163
+ bool useFilter = (filterMode != SZ_FILTER_NO);
164
+ if (useFilter)
165
+ {
166
+ if (inSize != 0)
167
+ {
168
+ filteredStream = (Byte *)MyAlloc(inSize);
169
+ if (filteredStream == 0)
170
+ return SZE_OUTOFMEMORY;
171
+ memmove(filteredStream, inBuffer, inSize);
172
+ }
173
+ UInt32 _prevMask;
174
+ UInt32 _prevPos;
175
+ x86_Convert_Init(_prevMask, _prevPos);
176
+ x86_Convert(filteredStream, (UInt32)inSize, 0, &_prevMask, &_prevPos, 1);
177
+ }
178
+
179
+ UInt32 minSize = 0;
180
+ int numPasses = (filterMode == SZ_FILTER_AUTO) ? 3 : 1;
181
+ bool bestIsFiltered = false;
182
+ int mainResult = 0;
183
+ size_t startPos = outStreamSpec->Pos;
184
+ for (i = 0; i < numPasses; i++)
185
+ {
186
+ if (numPasses > 1 && i == numPasses - 1 && !bestIsFiltered)
187
+ break;
188
+ outStreamSpec->SetPos(startPos);
189
+ bool curModeIsFiltered = false;
190
+ if (useFilter && i == 0)
191
+ curModeIsFiltered = true;
192
+ if (numPasses > 1 && i == numPasses - 1)
193
+ curModeIsFiltered = true;
194
+
195
+ inStreamSpec->Init(curModeIsFiltered ? filteredStream : inBuffer, inSize);
196
+
197
+ HRESULT lzmaResult = encoder->Code(inStream, outStream, 0, 0, 0);
198
+
199
+ mainResult = 0;
200
+ if (lzmaResult == E_OUTOFMEMORY)
201
+ {
202
+ mainResult = SZE_OUTOFMEMORY;
203
+ break;
204
+ }
205
+ if (i == 0 || outStreamSpec->Pos <= minSize)
206
+ {
207
+ minSize = outStreamSpec->Pos;
208
+ bestIsFiltered = curModeIsFiltered;
209
+ }
210
+ if (outStreamSpec->Overflow)
211
+ mainResult = SZE_OUT_OVERFLOW;
212
+ else if (lzmaResult != S_OK)
213
+ {
214
+ mainResult = SZE_FAIL;
215
+ break;
216
+ }
217
+ }
218
+ *outSizeProcessed = outStreamSpec->Pos;
219
+ // if (bestIsFiltered)
220
+ // outBuffer[0] = 1;
221
+ if (useFilter)
222
+ MyFree(filteredStream);
223
+ return mainResult;
224
+
225
+ #ifndef _NO_EXCEPTIONS
226
+ } catch(...) { return SZE_OUTOFMEMORY; }
227
+ #endif
228
+ }
data/ext/LzmaRam.h ADDED
@@ -0,0 +1,46 @@
1
+ // LzmaRam.h
2
+
3
+ #ifndef __LzmaRam_h
4
+ #define __LzmaRam_h
5
+
6
+ #include <stdlib.h>
7
+ #include "Types.h"
8
+
9
+ /*
10
+ LzmaRamEncode: BCJ + LZMA RAM->RAM compressing.
11
+ It uses .lzma format, but it writes one additional byte to .lzma file:
12
+ 0: - no filter
13
+ 1: - x86(BCJ) filter.
14
+
15
+ To provide best compression ratio dictionarySize mustbe >= inSize
16
+
17
+ LzmaRamEncode allocates Data with MyAlloc/BigAlloc functions.
18
+ RAM Requirements:
19
+ RamSize = dictionarySize * 9.5 + 6MB + FilterBlockSize
20
+ FilterBlockSize = 0, if useFilter == false
21
+ FilterBlockSize = inSize, if useFilter == true
22
+
23
+ Return code:
24
+ 0 - OK
25
+ 1 - Unspecified Error
26
+ 2 - Memory allocating error
27
+ 3 - Output buffer OVERFLOW
28
+
29
+ If you use SZ_FILTER_AUTO mode, then encoder will use 2 or 3 passes:
30
+ 2 passes when FILTER_NO provides better compression.
31
+ 3 passes when FILTER_YES provides better compression.
32
+ */
33
+
34
+ enum ESzFilterMode
35
+ {
36
+ SZ_FILTER_NO,
37
+ SZ_FILTER_YES,
38
+ SZ_FILTER_AUTO
39
+ };
40
+
41
+ int LzmaRamEncode(
42
+ const Byte *inBuffer, size_t inSize,
43
+ Byte *outBuffer, size_t outSize, size_t *outSizeProcessed,
44
+ UInt32 dictionarySize, ESzFilterMode filterMode);
45
+
46
+ #endif
@@ -0,0 +1,79 @@
1
+ /* LzmaRamDecode.c */
2
+
3
+ #include "LzmaRamDecode.h"
4
+ #ifdef _SZ_ONE_DIRECTORY
5
+ #include "LzmaDecode.h"
6
+ #include "BranchX86.h"
7
+ #else
8
+ #include "LzmaDecode.h"
9
+ #include "BranchX86.h"
10
+ #endif
11
+
12
+ #define LZMA_PROPS_SIZE 13
13
+ #define LZMA_SIZE_OFFSET 5
14
+
15
+ int LzmaRamGetUncompressedSize(
16
+ const unsigned char *inBuffer,
17
+ size_t inSize,
18
+ size_t *outSize)
19
+ {
20
+ unsigned int i;
21
+ if (inSize < LZMA_PROPS_SIZE)
22
+ return 1;
23
+ *outSize = 0;
24
+ for(i = 0; i < sizeof(size_t); i++)
25
+ *outSize += ((size_t)inBuffer[LZMA_SIZE_OFFSET + i]) << (8 * i);
26
+ for(; i < 8; i++)
27
+ if (inBuffer[LZMA_SIZE_OFFSET + i] != 0)
28
+ return 1;
29
+ return 0;
30
+ }
31
+
32
+ #define SZE_DATA_ERROR (1)
33
+ #define SZE_OUTOFMEMORY (2)
34
+
35
+ int LzmaRamDecompress(
36
+ const unsigned char *inBuffer,
37
+ size_t inSize,
38
+ unsigned char *outBuffer,
39
+ size_t outSize,
40
+ size_t *outSizeProcessed,
41
+ void * (*allocFunc)(size_t size),
42
+ void (*freeFunc)(void *))
43
+ {
44
+ CLzmaDecoderState state; /* it's about 24 bytes structure, if int is 32-bit */
45
+ int result;
46
+ SizeT outSizeProcessedLoc;
47
+ SizeT inProcessed;
48
+ int useFilter = 0;
49
+
50
+ if (inSize < LZMA_PROPS_SIZE)
51
+ return 1;
52
+ // useFilter = inBuffer[0];
53
+
54
+ *outSizeProcessed = 0;
55
+ if (useFilter > 1)
56
+ return 1;
57
+
58
+ if (LzmaDecodeProperties(&state.Properties, inBuffer, LZMA_PROPERTIES_SIZE) != LZMA_RESULT_OK)
59
+ return 1;
60
+ state.Probs = (CProb *)allocFunc(LzmaGetNumProbs(&state.Properties) * sizeof(CProb));
61
+ if (state.Probs == 0)
62
+ return SZE_OUTOFMEMORY;
63
+
64
+ result = LzmaDecode(&state,
65
+ inBuffer + LZMA_PROPS_SIZE, (SizeT)inSize - LZMA_PROPS_SIZE, &inProcessed,
66
+ outBuffer, (SizeT)outSize, &outSizeProcessedLoc);
67
+ freeFunc(state.Probs);
68
+ if (result != LZMA_RESULT_OK)
69
+ return 1;
70
+ *outSizeProcessed = (size_t)outSizeProcessedLoc;
71
+ if (useFilter == 1)
72
+ {
73
+ UInt32 _prevMask;
74
+ UInt32 _prevPos;
75
+ x86_Convert_Init(_prevMask, _prevPos);
76
+ x86_Convert(outBuffer, (UInt32)outSizeProcessedLoc, 0, &_prevMask, &_prevPos, 0);
77
+ }
78
+ return 0;
79
+ }