Skip to content

Commit 8216e92

Browse files
committed
refactoring
1 parent 6bc4f9a commit 8216e92

File tree

8 files changed

+78
-52
lines changed

8 files changed

+78
-52
lines changed

formats/format.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,9 @@ class Format
2323
}
2424

2525
protected:
26+
// pointer to the file content
2627
char *fp;
28+
// size of the file
2729
size_t size;
2830
};
2931

formats/swf.cpp

Lines changed: 23 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,7 @@ size_t Swf::Leanify(size_t size_leanified /*= 0*/)
88
{
99
if (!is_recompress && *fp != 'F')
1010
{
11-
Move(size_leanified);
12-
return size;
11+
return Move(size_leanified);
1312
}
1413

1514
unsigned char *in_buffer = (unsigned char *)fp + 8;
@@ -29,8 +28,7 @@ size_t Swf::Leanify(size_t size_leanified /*= 0*/)
2928
{
3029
std::cout << "SWF file corrupted!" << std::endl;
3130
mz_free(in_buffer);
32-
Move(size_leanified);
33-
return size;
31+
return Move(size_leanified);
3432
}
3533
}
3634
else if (*fp == 'Z')
@@ -50,8 +48,7 @@ size_t Swf::Leanify(size_t size_leanified /*= 0*/)
5048
{
5149
std::cout << "SWF file corrupted!" << std::endl;
5250
delete[] dst_buffer;
53-
Move(size_leanified);
54-
return size;
51+
return Move(size_leanified);
5552
}
5653
in_buffer = dst_buffer;
5754
}
@@ -60,6 +57,7 @@ size_t Swf::Leanify(size_t size_leanified /*= 0*/)
6057
std::cout << "SWF is not compressed." << std::endl;
6158
}
6259

60+
// parsing SWF tags
6361
unsigned char *p = in_buffer + 13; // skip FrameSize(9B) + FrameRate(2B) + FrameCount(2B) = 13B
6462
size_t tag_size_leanified = 0;
6563
do
@@ -87,6 +85,10 @@ size_t Swf::Leanify(size_t size_leanified /*= 0*/)
8785
{
8886
// move header
8987
size_t header_size = 7 + (p[3] == 3);
88+
if (is_verbose)
89+
{
90+
std::cout << "DefineBitsLossless tag found." << std::endl;
91+
}
9092
if (tag_size_leanified)
9193
{
9294
memmove(p - tag_size_leanified, p, header_size);
@@ -101,6 +103,10 @@ size_t Swf::Leanify(size_t size_leanified /*= 0*/)
101103
}
102104
case 21: // DefineBitsJPEG2
103105
{
106+
if (is_verbose)
107+
{
108+
std::cout << "DefineBitsJPEG2 tag found." << std::endl;
109+
}
104110
// copy id
105111
*(uint16_t *)(p - tag_size_leanified) = *(uint16_t *)p;
106112

@@ -121,6 +127,10 @@ size_t Swf::Leanify(size_t size_leanified /*= 0*/)
121127
uint32_t img_size = *(uint32_t *)(p + 2);
122128
size_t header_size = tag_type == 90 ? 8 : 6;
123129

130+
if (is_verbose)
131+
{
132+
std::cout << "DefineBitsJPEG" << header_size / 2 << " tag found." << std::endl;
133+
}
124134
// Leanify embedded image
125135
size_t new_img_size = LeanifyFile(p + header_size, img_size, tag_size_leanified);
126136
*(uint32_t *)(p + 2 - tag_size_leanified) = new_img_size;
@@ -138,6 +148,10 @@ size_t Swf::Leanify(size_t size_leanified /*= 0*/)
138148
*p &= ~(1 << 4); // set HasMetadata bit to 0
139149
break;
140150
case 77: // Metadata
151+
if (is_verbose)
152+
{
153+
std::cout << "Metadata removed." << std::endl;
154+
}
141155
tag_size_leanified += tag_length + tag_header_length;
142156
p += tag_length;
143157
continue;
@@ -167,7 +181,7 @@ size_t Swf::Leanify(size_t size_leanified /*= 0*/)
167181
return size;
168182
}
169183

170-
// recompress
184+
// compress with LZMA
171185
size_t s = in_len, props = LZMA_PROPS_SIZE;
172186
unsigned char *dst = new unsigned char[in_len + LZMA_PROPS_SIZE];
173187
// have to set writeEndMark to true
@@ -221,44 +235,17 @@ size_t Swf::Leanify(size_t size_leanified /*= 0*/)
221235
return size;
222236
}
223237

224-
void Swf::Move(size_t size_leanified)
238+
size_t Swf::Move(size_t size_leanified)
225239
{
226240
if (size_leanified)
227241
{
228242
fp -= size_leanified;
229243
memmove(fp, fp + size_leanified, size);
230244
}
245+
return size;
231246
}
232247

233-
size_t Swf::ZlibRecompress(unsigned char *src, size_t src_len, size_t size_leanified)
234-
{
235-
size_t new_size = 0;
236-
if (is_recompress)
237-
{
238-
size_t s = 0;
239-
unsigned char *buffer = (unsigned char *)tinfl_decompress_mem_to_heap(src, src_len, &s, TINFL_FLAG_PARSE_ZLIB_HEADER);
240248

241-
unsigned char *out_buffer = NULL;
242-
ZopfliZlibCompress(&zopfli_options, buffer, s, &out_buffer, &new_size);
243-
mz_free(buffer);
244-
if (new_size < src_len)
245-
{
246-
memcpy(src - size_leanified, out_buffer, new_size);
247-
}
248-
else
249-
{
250-
new_size = src_len;
251-
memmove(src - size_leanified, src, src_len);
252-
}
253-
delete[] out_buffer;
254-
}
255-
else
256-
{
257-
new_size = src_len;
258-
memmove(src - size_leanified, src, src_len);
259-
}
260-
return new_size;
261-
}
262249

263250
void Swf::UpdateTagLength(unsigned char *tag_content, size_t header_length, size_t new_length)
264251
{

formats/swf.h

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99

1010
#include "miniz/miniz.h"
1111
#include "LZMA/LzmaLib.h"
12-
#include "zopfli/zlib_container.h"
1312

1413
#include "format.h"
1514
#include "../leanify.h"
@@ -21,22 +20,18 @@ extern int iterations;
2120
class Swf : Format
2221
{
2322
public:
24-
Swf(void *p, size_t s = 0) : Format(p, s)
25-
{
26-
ZopfliInitOptions(&zopfli_options);
27-
zopfli_options.numiterations = iterations;
28-
}
23+
Swf(void *p, size_t s = 0) : Format(p, s) {}
2924

3025
size_t Leanify(size_t size_leanified = 0);
3126

3227
static const unsigned char header_magic[3];
3328
static const unsigned char header_magic_deflate[3];
3429
static const unsigned char header_magic_lzma[3];
30+
3531
private:
36-
ZopfliOptions zopfli_options;
3732

38-
void Move(size_t size_leanified);
39-
size_t ZlibRecompress(unsigned char *src, size_t src_len, size_t size_leanified);
33+
size_t Move(size_t size_leanified);
34+
4035
void UpdateTagLength(unsigned char *tag_content, size_t header_length, size_t new_length);
4136
};
4237

formats/zip.cpp

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -149,13 +149,9 @@ size_t Zip::Leanify(size_t size_leanified /*= 0*/)
149149

150150

151151
// recompress
152-
ZopfliOptions options;
153-
ZopfliInitOptions(&options);
154-
options.numiterations = iterations;
155-
156152
unsigned char bp = 0, *out = NULL;
157153
size_t outsize = 0;
158-
ZopfliDeflate(&options, 2, 1, buffer, new_uncompressed_size, &bp, &out, &outsize);
154+
ZopfliDeflate(&zopfli_options, 2, 1, buffer, new_uncompressed_size, &bp, &out, &outsize);
159155

160156

161157
if (outsize < original_compressed_size)

formats/zip.h

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,19 @@ extern int level;
2323
class Zip : Format
2424
{
2525
public:
26-
Zip(void *p, size_t s = 0) : Format(p, s) {}
26+
Zip(void *p, size_t s = 0) : Format(p, s)
27+
{
28+
ZopfliInitOptions(&zopfli_options);
29+
zopfli_options.numiterations = iterations;
30+
}
2731
~Zip() { level--; }
2832

2933
size_t Leanify(size_t size_leanified = 0);
3034

3135
static const unsigned char header_magic[4];
36+
37+
private:
38+
ZopfliOptions zopfli_options;
3239
};
3340

3441

leanify.cpp

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,4 +99,39 @@ size_t LeanifyFile(void *file_pointer, size_t file_size, size_t size_leanified /
9999
}
100100
// for unsupported format, just memmove it.
101101
return Format(file_pointer, file_size).Leanify(size_leanified);
102+
}
103+
104+
105+
size_t ZlibRecompress(unsigned char *src, size_t src_len, size_t size_leanified /*= 0*/)
106+
{
107+
if (is_recompress)
108+
{
109+
size_t s = 0;
110+
unsigned char *buffer = (unsigned char *)tinfl_decompress_mem_to_heap(src, src_len, &s, TINFL_FLAG_PARSE_ZLIB_HEADER);
111+
if (!buffer)
112+
{
113+
std::cout << "Decompress Zlib failed." << std::endl;
114+
}
115+
else
116+
{
117+
ZopfliOptions zopfli_options;
118+
ZopfliInitOptions(&zopfli_options);
119+
zopfli_options.numiterations = iterations;
120+
121+
size_t new_size = 0;
122+
unsigned char *out_buffer = NULL;
123+
ZopfliZlibCompress(&zopfli_options, buffer, s, &out_buffer, &new_size);
124+
mz_free(buffer);
125+
if (new_size < src_len)
126+
{
127+
memcpy(src - size_leanified, out_buffer, new_size);
128+
delete[] out_buffer;
129+
return new_size;
130+
}
131+
delete[] out_buffer;
132+
}
133+
}
134+
135+
memmove(src - size_leanified, src, src_len);
136+
return src_len;
102137
}

leanify.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33

44
#include <iostream>
55

6+
#include "formats/zopfli/zlib_container.h"
7+
68
#include "formats/format.h"
79
#include "formats/gft.h"
810
#include "formats/gz.h"
@@ -18,5 +20,7 @@
1820

1921
size_t LeanifyFile(void *file_pointer, size_t file_size, size_t size_leanified = 0);
2022

23+
size_t ZlibRecompress(unsigned char *src, size_t src_len, size_t size_leanified = 0);
24+
2125

2226
#endif

main.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ void PauseIfNotTerminal()
7373
void PrintInfo()
7474
{
7575
std::cout << "Leanify\t" << VERSION << std::endl << std::endl;
76-
std::cout << "Usage: Leanify [options] path" << std::endl;
76+
std::cout << "Usage: Leanify [options] paths" << std::endl;
7777
std::cout << " -i iteration\tMore iterations means slower but better result. Default: 15." << std::endl;
7878
std::cout << " -f\t\tFast mode, no recompression." << std::endl;
7979
std::cout << " -q\t\tQuiet mode, no output." << std::endl;

0 commit comments

Comments
 (0)