mirror of
https://github.com/schnaader/precomp-cpp
synced 2026-08-23 00:23:04 -04:00
commit
3f973a2e44
1 changed files with 203 additions and 141 deletions
344
precomp.cpp
344
precomp.cpp
|
|
@ -490,12 +490,11 @@ int main(int argc, char* argv[])
|
|||
#ifdef COMFORT
|
||||
wait_for_key();
|
||||
#endif
|
||||
|
||||
|
||||
return return_errorlevel;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#ifndef PRECOMPDLL
|
||||
#ifndef COMFORT
|
||||
int init(int argc, char* argv[]) {
|
||||
|
|
@ -528,7 +527,7 @@ int init(int argc, char* argv[]) {
|
|||
}
|
||||
suppress_mp3_big_value_pairs_sum = -1;
|
||||
mp3_parsing_cache_second_frame = -1;
|
||||
|
||||
|
||||
bool valid_syntax = false;
|
||||
bool input_file_given = false;
|
||||
bool output_file_given = false;
|
||||
|
|
@ -540,6 +539,7 @@ int init(int argc, char* argv[]) {
|
|||
bool lzma_max_memory_set = false;
|
||||
bool lzma_thread_count_set = false;
|
||||
bool long_help = false;
|
||||
bool preserve_extension = false;
|
||||
|
||||
for (i = 1; (i < argc) && (parse_on); i++) {
|
||||
if (argv[i][0] == '-') { // switch
|
||||
|
|
@ -681,7 +681,7 @@ int init(int argc, char* argv[]) {
|
|||
if ((toupper(argv[i][2]) == 'O') && (toupper(argv[i][3]) == 'N') && (toupper(argv[i][4]) == 'G')
|
||||
&& (toupper(argv[i][5]) == 'H') && (toupper(argv[i][6]) == 'E') && (toupper(argv[i][7]) == 'L')
|
||||
&& (toupper(argv[i][8]) == 'P')) {
|
||||
long_help = true;
|
||||
long_help = true;
|
||||
} else if (toupper(argv[i][2]) == 'M') { // LZMA max. memory
|
||||
if (lzma_max_memory_set) {
|
||||
error(ERR_ONLY_SET_LZMA_MEMORY_ONCE);
|
||||
|
|
@ -714,7 +714,7 @@ int init(int argc, char* argv[]) {
|
|||
exit(1);
|
||||
}
|
||||
multiplicator *= 10;
|
||||
}
|
||||
}
|
||||
lzma_thread_count_set = true;
|
||||
} else {
|
||||
printf("ERROR: Unknown switch \"%s\"\n", argv[i]);
|
||||
|
|
@ -977,6 +977,11 @@ int init(int argc, char* argv[]) {
|
|||
fast_mode = true;
|
||||
break;
|
||||
}
|
||||
case 'E':
|
||||
{
|
||||
preserve_extension = true;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
printf("ERROR: Unknown switch \"%s\"\n", argv[i]);
|
||||
|
|
@ -1002,18 +1007,24 @@ int init(int argc, char* argv[]) {
|
|||
|
||||
// output file given? If not, use input filename with .pcf extension
|
||||
if ((!output_file_given) && (operation == P_COMPRESS)) {
|
||||
output_file_name = new char[strlen(input_file_name) + 9];
|
||||
strcpy(output_file_name, input_file_name);
|
||||
char* backslash_at_pos = strrchr(output_file_name, PATH_DELIM);
|
||||
char* dot_at_pos = strrchr(output_file_name, '.');
|
||||
if ((dot_at_pos == NULL) || ((backslash_at_pos != NULL) && (dot_at_pos < backslash_at_pos))) {
|
||||
strcpy(output_file_name + strlen(input_file_name), ".pcf");
|
||||
if(!preserve_extension) {
|
||||
output_file_name = new char[strlen(input_file_name) + 9];
|
||||
strcpy(output_file_name, input_file_name);
|
||||
char* backslash_at_pos = strrchr(output_file_name, PATH_DELIM);
|
||||
char* dot_at_pos = strrchr(output_file_name, '.');
|
||||
if ((dot_at_pos == NULL) || ((backslash_at_pos != NULL) && (dot_at_pos < backslash_at_pos))) {
|
||||
strcpy(output_file_name + strlen(input_file_name), ".pcf");
|
||||
} else {
|
||||
strcpy(dot_at_pos, ".pcf");
|
||||
// same as output file because input file had .pcf extension?
|
||||
if (strcmp(input_file_name, output_file_name) == 0) {
|
||||
strcpy(dot_at_pos, "_pcf.pcf");
|
||||
}
|
||||
}
|
||||
} else {
|
||||
strcpy(dot_at_pos, ".pcf");
|
||||
// same as output file because input file had .pcf extension?
|
||||
if (strcmp(input_file_name, output_file_name) == 0) {
|
||||
strcpy(dot_at_pos, "_pcf.pcf");
|
||||
}
|
||||
output_file_name = new char[strlen(input_file_name) + 9];
|
||||
strcpy(output_file_name,input_file_name);
|
||||
strcat(output_file_name,".pcf");
|
||||
}
|
||||
output_file_given = true;
|
||||
} else if ((!output_file_given) && (operation == P_CONVERT)) {
|
||||
|
|
@ -1035,6 +1046,7 @@ int init(int argc, char* argv[]) {
|
|||
}
|
||||
printf(" r \"Recompress\" PCF file (restore original file)\n");
|
||||
printf(" o[filename] Write output to [filename] <[input_file].pcf or file in header>\n");
|
||||
printf(" e preserve original extension of input name for output name \n");
|
||||
printf(" c[lbn] Compression method to use, l = lzma2, b = bZip2, n = none <l>\n");
|
||||
printf(" lm[amount] Set maximal LZMA memory in MiB <%i>\n", lzma_max_memory_default());
|
||||
printf(" lt[count] Set LZMA thread count <auto-detect: %i>\n", auto_detected_thread_count());
|
||||
|
|
@ -1050,7 +1062,7 @@ int init(int argc, char* argv[]) {
|
|||
printf(" t+ = enable these types only, t- = enable all types except these\n");
|
||||
printf(" P = PDF, Z = ZIP, G = GZip, N = PNG, F = GIF, J = JPG\n");
|
||||
printf(" S = SWF, M = MIME Base64, B = bZip2, 3 = MP3\n");
|
||||
|
||||
|
||||
if (!long_help) {
|
||||
printf(" longhelp Show long help\n");
|
||||
} else {
|
||||
|
|
@ -1153,6 +1165,7 @@ int init_comfort(int argc, char* argv[]) {
|
|||
bool level_switch = false;
|
||||
bool lzma_max_memory_set = false;
|
||||
bool lzma_thread_count_set = false;
|
||||
bool preserve_extension = false;
|
||||
|
||||
printf("\n");
|
||||
if (V_MINOR2 == 0) {
|
||||
|
|
@ -1208,22 +1221,6 @@ int init_comfort(int argc, char* argv[]) {
|
|||
operation = P_DECOMPRESS;
|
||||
}
|
||||
}
|
||||
|
||||
if (operation == P_COMPRESS) {
|
||||
output_file_name = new char[strlen(input_file_name) + 9];
|
||||
strcpy(output_file_name, input_file_name);
|
||||
char* dot_at_pos = strrchr(output_file_name, '.');
|
||||
if (dot_at_pos == NULL) {
|
||||
strcpy(output_file_name + strlen(input_file_name), ".pcf");
|
||||
} else {
|
||||
strcpy(dot_at_pos, ".pcf");
|
||||
// same as output file because input file had .pcf extension?
|
||||
if (strcmp(input_file_name, output_file_name) == 0) {
|
||||
strcpy(dot_at_pos, "_pcf.pcf");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// precomf.ini in EXE directory?
|
||||
|
|
@ -1264,6 +1261,8 @@ int init_comfort(int argc, char* argv[]) {
|
|||
fprintf(fnewini,"Intense_Mode=off\n\n");
|
||||
fprintf(fnewini,";; Brute mode (on/off)\n");
|
||||
fprintf(fnewini,"Brute_Mode=off\n\n");
|
||||
fprintf(fnewini,";; Preserve Input's file extension (on/off)\n");
|
||||
fprintf(fnewini,"Preserve_Extension=off\n\n");
|
||||
fprintf(fnewini,";; Wrap BMP header around PDF images (on/off)\n");
|
||||
fprintf(fnewini,"PDF_BMP_Mode=off\n\n");
|
||||
fprintf(fnewini,";; Recompress progressive JPGs only (on/off)\n");
|
||||
|
|
@ -1290,7 +1289,7 @@ int init_comfort(int argc, char* argv[]) {
|
|||
min_ident_size_set = true;
|
||||
compression_otf_max_memory = 2048;
|
||||
lzma_max_memory_set = true;
|
||||
lzma_thread_count_set = true;
|
||||
lzma_thread_count_set = true;
|
||||
parse_ini_file = false;
|
||||
}
|
||||
}
|
||||
|
|
@ -1305,8 +1304,7 @@ int init_comfort(int argc, char* argv[]) {
|
|||
string::iterator it;
|
||||
char param[256], value[256];
|
||||
|
||||
while (ini_file) {
|
||||
getline(ini_file, line);
|
||||
while (getline(ini_file, line)) {
|
||||
string::size_type semicolon_at_pos = line.find(";", 0);
|
||||
if (semicolon_at_pos != string::npos) {
|
||||
line.erase(semicolon_at_pos, line.length() - semicolon_at_pos);
|
||||
|
|
@ -1343,7 +1341,7 @@ int init_comfort(int argc, char* argv[]) {
|
|||
}
|
||||
memset(param, '\0', 256);
|
||||
parName.copy(param, 256);
|
||||
|
||||
|
||||
// get value
|
||||
getline(ss, valuestr);
|
||||
// remove spaces
|
||||
|
|
@ -1387,7 +1385,7 @@ int init_comfort(int argc, char* argv[]) {
|
|||
min_ident_size_set = true;
|
||||
|
||||
printf("INI: Set minimal identical byte size to %i\n", min_ident_size);
|
||||
|
||||
|
||||
valid_param = true;
|
||||
}
|
||||
|
||||
|
|
@ -1428,16 +1426,16 @@ int init_comfort(int argc, char* argv[]) {
|
|||
compression_otf_method = OTF_XZ_MT;
|
||||
valid_param = true;
|
||||
}
|
||||
|
||||
|
||||
show_lzma_progress = (compression_otf_method == OTF_XZ_MT);
|
||||
|
||||
|
||||
if (!valid_param) {
|
||||
printf("ERROR: Invalid compression method value: %s\n", value);
|
||||
wait_for_key();
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (strcmp(param, "lzma_maximal_memory") == 0) {
|
||||
if (lzma_max_memory_set) {
|
||||
error(ERR_ONLY_SET_LZMA_MEMORY_ONCE);
|
||||
|
|
@ -1455,10 +1453,10 @@ int init_comfort(int argc, char* argv[]) {
|
|||
if (compression_otf_max_memory > 0) {
|
||||
printf("INI: Set LZMA maximal memory to %i MiB\n", (int)compression_otf_max_memory);
|
||||
}
|
||||
|
||||
|
||||
valid_param = true;
|
||||
}
|
||||
|
||||
|
||||
if (strcmp(param, "lzma_thread_count") == 0) {
|
||||
if (lzma_thread_count_set) {
|
||||
error(ERR_ONLY_SET_LZMA_THREAD_ONCE);
|
||||
|
|
@ -1476,10 +1474,10 @@ int init_comfort(int argc, char* argv[]) {
|
|||
if (compression_otf_thread_count > 0) {
|
||||
printf("INI: Set LZMA thread count to %i\n", compression_otf_thread_count);
|
||||
}
|
||||
|
||||
|
||||
valid_param = true;
|
||||
}
|
||||
|
||||
|
||||
if (strcmp(param, "fast_mode") == 0) {
|
||||
if (strcmp(value, "off") == 0) {
|
||||
printf("INI: Disabled fast mode\n");
|
||||
|
|
@ -1498,6 +1496,21 @@ int init_comfort(int argc, char* argv[]) {
|
|||
exit(1);
|
||||
}
|
||||
}
|
||||
// future note: params should be in lowercase for comparisons here only
|
||||
if (strcmp(param,"preserve_extension") == 0) {
|
||||
if (strcmp(value,"off") == 0) {
|
||||
printf("INI: Not preserve extension\n");
|
||||
preserve_extension = false;
|
||||
} else if (strcmp(value,"on") == 0) {
|
||||
printf("INI: Preserve extension\n");
|
||||
preserve_extension = true;
|
||||
} else {
|
||||
printf("ERROR: Invalid Preserve extension mode: %s\n",value);
|
||||
wait_for_key();
|
||||
exit(1);
|
||||
}
|
||||
valid_param = true;
|
||||
}
|
||||
|
||||
if (strcmp(param, "intense_mode") == 0) {
|
||||
if (strcmp(value, "off") == 0) {
|
||||
|
|
@ -1656,61 +1669,61 @@ int init_comfort(int argc, char* argv[]) {
|
|||
printf("INI: PDF compression enabled\n");
|
||||
} else {
|
||||
printf("INI: PDF compression disabled\n");
|
||||
}
|
||||
}
|
||||
|
||||
if (use_zip) {
|
||||
printf("INI: ZIP compression enabled\n");
|
||||
} else {
|
||||
printf("INI: ZIP compression disabled\n");
|
||||
}
|
||||
}
|
||||
|
||||
if (use_gzip) {
|
||||
printf("INI: GZip compression enabled\n");
|
||||
} else {
|
||||
printf("INI: GZip compression disabled\n");
|
||||
}
|
||||
}
|
||||
|
||||
if (use_png) {
|
||||
printf("INI: PNG compression enabled\n");
|
||||
} else {
|
||||
printf("INI: PNG compression disabled\n");
|
||||
}
|
||||
}
|
||||
|
||||
if (use_gif) {
|
||||
printf("INI: GIF compression enabled\n");
|
||||
} else {
|
||||
printf("INI: GIF compression disabled\n");
|
||||
}
|
||||
}
|
||||
|
||||
if (use_jpg) {
|
||||
printf("INI: JPG compression enabled\n");
|
||||
} else {
|
||||
printf("INI: JPG compression disabled\n");
|
||||
}
|
||||
}
|
||||
|
||||
if (use_mp3) {
|
||||
printf("INI: MP3 compression enabled\n");
|
||||
} else {
|
||||
printf("INI: MP3 compression disabled\n");
|
||||
}
|
||||
}
|
||||
|
||||
if (use_swf) {
|
||||
printf("INI: SWF compression enabled\n");
|
||||
} else {
|
||||
printf("INI: SWF compression disabled\n");
|
||||
}
|
||||
}
|
||||
|
||||
if (use_base64) {
|
||||
printf("INI: Base64 compression enabled\n");
|
||||
} else {
|
||||
printf("INI: Base64 compression disabled\n");
|
||||
}
|
||||
}
|
||||
|
||||
if (use_bzip2) {
|
||||
printf("INI: bZip2 compression enabled\n");
|
||||
} else {
|
||||
printf("INI: bZip2 compression disabled\n");
|
||||
}
|
||||
}
|
||||
|
||||
valid_param = true;
|
||||
}
|
||||
|
|
@ -1769,7 +1782,7 @@ int init_comfort(int argc, char* argv[]) {
|
|||
recursion_depth_set = true;
|
||||
|
||||
printf("INI: Set maximal recursion depth to %i\n", max_recursion_depth);
|
||||
|
||||
|
||||
valid_param = true;
|
||||
}
|
||||
|
||||
|
|
@ -1839,6 +1852,28 @@ int init_comfort(int argc, char* argv[]) {
|
|||
ini_file.close();
|
||||
}
|
||||
|
||||
if (operation == P_COMPRESS) {
|
||||
if(!preserve_extension) {
|
||||
output_file_name = new char[strlen(input_file_name) + 9];
|
||||
strcpy(output_file_name, input_file_name);
|
||||
char* backslash_at_pos = strrchr(output_file_name, PATH_DELIM);
|
||||
char* dot_at_pos = strrchr(output_file_name, '.');
|
||||
if ((dot_at_pos == NULL) || ((backslash_at_pos != NULL) && (dot_at_pos < backslash_at_pos))) {
|
||||
strcpy(output_file_name + strlen(input_file_name), ".pcf");
|
||||
} else {
|
||||
strcpy(dot_at_pos, ".pcf");
|
||||
// same as output file because input file had .pcf extension?
|
||||
if (strcmp(input_file_name, output_file_name) == 0) {
|
||||
strcpy(dot_at_pos, "_pcf.pcf");
|
||||
}
|
||||
}
|
||||
} else {
|
||||
output_file_name = new char[strlen(input_file_name) + 9];
|
||||
strcpy(output_file_name,input_file_name);
|
||||
strcat(output_file_name,".pcf");
|
||||
}
|
||||
}
|
||||
|
||||
if (file_exists(output_file_name)) {
|
||||
printf("Output file \"%s\" exists. Overwrite (y/n)? ", output_file_name);
|
||||
char ch = getche();
|
||||
|
|
@ -1912,7 +1947,7 @@ void denit_compress() {
|
|||
if ((recursion_depth == 0) && (!DEBUG_MODE) && show_lzma_progress && (old_lzma_progress_text_length > -1)) {
|
||||
printf("%s", string(old_lzma_progress_text_length, '\b').c_str()); // backspaces to remove old lzma progress text
|
||||
}
|
||||
|
||||
|
||||
#ifndef PRECOMPDLL
|
||||
long long fout_length = fileSize64(output_file_name);
|
||||
if (recursion_depth == 0) {
|
||||
|
|
@ -2034,7 +2069,7 @@ void denit_convert() {
|
|||
if ((!DEBUG_MODE) && show_lzma_progress && (conversion_to_method == OTF_XZ_MT) && (old_lzma_progress_text_length > -1)) {
|
||||
printf("%s", string(old_lzma_progress_text_length, '\b').c_str()); // backspaces to remove old lzma progress text
|
||||
}
|
||||
|
||||
|
||||
long long fout_length = fileSize64(output_file_name);
|
||||
#ifndef PRECOMPDLL
|
||||
if (!DEBUG_MODE) {
|
||||
|
|
@ -2050,7 +2085,7 @@ void denit_convert() {
|
|||
printf(" instead of ");
|
||||
print64(fin_length);
|
||||
printf(" \n");
|
||||
}
|
||||
}
|
||||
printf("\nDone.\n");
|
||||
printf_time(get_time_ms() - start_time);
|
||||
#else
|
||||
|
|
@ -2179,7 +2214,7 @@ int def_compare(FILE *source, FILE *compfile, int level, int windowbits, int mem
|
|||
ret = deflate(&strm, flush);
|
||||
|
||||
have = DEF_COMPARE_CHUNK - strm.avail_out;
|
||||
|
||||
|
||||
if (have > 0) {
|
||||
if (compfile == fin) {
|
||||
identical_bytes_compare = compare_file_mem_penalty(compfile, out, input_file_pos + comp_pos, have, total_same_byte_count, total_same_byte_count_penalty, rek_same_byte_count, rek_same_byte_count_penalty, rek_penalty_bytes_len, local_penalty_bytes_len, use_penalty_bytes);
|
||||
|
|
@ -2231,7 +2266,7 @@ int def_compare_bzip2(FILE *source, FILE *compfile, int level, int& decompressed
|
|||
long long rek_penalty_bytes_len = 0;
|
||||
long long local_penalty_bytes_len = 0;
|
||||
bool use_penalty_bytes = false;
|
||||
|
||||
|
||||
/* compress until end of file */
|
||||
do {
|
||||
print_work_sign(true);
|
||||
|
|
@ -2449,7 +2484,7 @@ int def_part_skip(FILE *source, FILE *dest, int level, int windowbits, int memle
|
|||
frs_offset = 0;
|
||||
frs_skip_len = (4 - (bmp_width % 4));
|
||||
frs_line_len = bmp_width;
|
||||
|
||||
|
||||
/* compress until end of file */
|
||||
do {
|
||||
if ((stream_size_in - pos_in) >= CHUNK) {
|
||||
|
|
@ -2546,7 +2581,7 @@ int inf(FILE *source, FILE *dest, int windowbits, int& compressed_stream_size) {
|
|||
|
||||
compressed_stream_size += (avail_in_before - strm.avail_in);
|
||||
avail_in_before = strm.avail_in;
|
||||
|
||||
|
||||
have = CHUNK - strm.avail_out;
|
||||
if (own_fwrite(out, 1, have, dest) != have || ferror(dest)) {
|
||||
(void)inflateEnd(&strm);
|
||||
|
|
@ -2786,7 +2821,7 @@ long long compare_file_mem_penalty(FILE* file1, unsigned char* input_bytes2, lon
|
|||
seek_64(file1, pos1);
|
||||
|
||||
size1 = fread(input_bytes1, 1, bytecount, file1);
|
||||
|
||||
|
||||
for (i = 0; i < size1; i++) {
|
||||
if (input_bytes1[i] == input_bytes2[i]) {
|
||||
same_byte_count++;
|
||||
|
|
@ -2802,14 +2837,14 @@ long long compare_file_mem_penalty(FILE* file1, unsigned char* input_bytes2, lon
|
|||
local_penalty_bytes_len += 5;
|
||||
// position
|
||||
local_penalty_bytes[local_penalty_bytes_len-5] = (total_same_byte_count >> 24) % 256;
|
||||
local_penalty_bytes[local_penalty_bytes_len-4] = (total_same_byte_count >> 16) % 256;
|
||||
local_penalty_bytes[local_penalty_bytes_len-3] = (total_same_byte_count >> 8) % 256;
|
||||
local_penalty_bytes[local_penalty_bytes_len-4] = (total_same_byte_count >> 16) % 256;
|
||||
local_penalty_bytes[local_penalty_bytes_len-3] = (total_same_byte_count >> 8) % 256;
|
||||
local_penalty_bytes[local_penalty_bytes_len-2] = total_same_byte_count % 256;
|
||||
// new byte
|
||||
local_penalty_bytes[local_penalty_bytes_len-1] = input_bytes1[i];
|
||||
}
|
||||
total_same_byte_count++;
|
||||
|
||||
|
||||
if (total_same_byte_count_penalty > rek_same_byte_count_penalty) {
|
||||
use_penalty_bytes = true;
|
||||
rek_penalty_bytes_len = local_penalty_bytes_len;
|
||||
|
|
@ -3099,7 +3134,7 @@ void try_decompression_pdf(int windowbits, int pdf_header_length, int img_width,
|
|||
for (int i = 0; i < (4 - (img_width % 4)); i++) {
|
||||
fout_fputc(0);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
safe_fclose(&ftempout);
|
||||
|
|
@ -3337,6 +3372,33 @@ void show_used_levels() {
|
|||
}
|
||||
}
|
||||
|
||||
string disable_methods(""); // for comfort it will be reverse
|
||||
/*
|
||||
P = PDF, Z = ZIP, G = GZip, N = PNG, F = GIF, J = JPG
|
||||
S = SWF, M = MIME Base64, B = bZip2, 3 = MP3
|
||||
*/
|
||||
#ifdef COMFORT
|
||||
#define DISABLE_OR_ENABLE_FOR_COMFORT !
|
||||
#else
|
||||
#define DISABLE_OR_ENABLE_FOR_COMFORT
|
||||
#endif // COMFORT
|
||||
if (((use_pdf) && DISABLE_OR_ENABLE_FOR_COMFORT((recompressed_pdf_count == 0) && (decompressed_pdf_count > 0)))) disable_methods += 'p';
|
||||
if (((use_zip) && DISABLE_OR_ENABLE_FOR_COMFORT((recompressed_zip_count == 0) && (decompressed_zip_count > 0)))) disable_methods += 'z';
|
||||
if (((use_gzip) && DISABLE_OR_ENABLE_FOR_COMFORT((recompressed_gzip_count == 0) && (decompressed_gzip_count > 0)))) disable_methods += 'g';
|
||||
if ((((use_png) && DISABLE_OR_ENABLE_FOR_COMFORT(((recompressed_png_count + recompressed_png_multi_count) == 0) && (decompressed_png_count + decompressed_png_multi_count > 0))))) disable_methods += 'n';
|
||||
if (((use_gif) && DISABLE_OR_ENABLE_FOR_COMFORT((recompressed_gif_count == 0) && (decompressed_gif_count > 0)))) disable_methods += 'f';
|
||||
if (((use_jpg) && DISABLE_OR_ENABLE_FOR_COMFORT(((recompressed_jpg_count + recompressed_jpg_prog_count) == 0) && (decompressed_jpg_count + decompressed_jpg_prog_count > 0)))) disable_methods += 'j';
|
||||
if (((use_swf) && DISABLE_OR_ENABLE_FOR_COMFORT((recompressed_swf_count == 0) && (decompressed_swf_count > 0)))) disable_methods += 's';
|
||||
if (((use_base64) && DISABLE_OR_ENABLE_FOR_COMFORT((recompressed_base64_count == 0) && (decompressed_base64_count > 0)))) disable_methods += 'm';
|
||||
if (((use_bzip2) && DISABLE_OR_ENABLE_FOR_COMFORT((recompressed_bzip2_count == 0) && (decompressed_bzip2_count > 0)))) disable_methods += 'b';
|
||||
if (((use_mp3) && DISABLE_OR_ENABLE_FOR_COMFORT((recompressed_mp3_count == 0) && (decompressed_mp3_count > 0)))) disable_methods += '3';
|
||||
if ( disable_methods.length() > 0 ) {
|
||||
if (DISABLE_OR_ENABLE_FOR_COMFORT(false))
|
||||
printf("\nCompression_Types=%s",disable_methods.c_str());
|
||||
else
|
||||
printf(" -t-%s",disable_methods.c_str());
|
||||
}
|
||||
|
||||
if (max_recursion_depth_reached) {
|
||||
printf("\n\nMaximal recursion depth %i reached, increasing it could give better results.\n", max_recursion_depth);
|
||||
} else if (max_recursion_depth_used != max_recursion_depth) {
|
||||
|
|
@ -3604,7 +3666,7 @@ bool compress_file(float min_percent, float max_percent) {
|
|||
// find "/Height"
|
||||
height_pos = (unsigned char*)strstr((const char*)(type_buf + start_pos), "/Height") - type_buf;
|
||||
|
||||
if (height_pos > 0)
|
||||
if (height_pos > 0)
|
||||
for (int i = height_pos + 8; i < type_buf_length; i++) {
|
||||
if (((type_buf[i] >= '0') && (type_buf[i] <= '9')) || (type_buf[i] == ' ')) {
|
||||
if (type_buf[i] != ' ') {
|
||||
|
|
@ -3617,8 +3679,8 @@ bool compress_file(float min_percent, float max_percent) {
|
|||
|
||||
// find "/BitsPerComponent"
|
||||
bpc_pos = (unsigned char*)strstr((const char*)(type_buf + start_pos), "/BitsPerComponent") - type_buf;
|
||||
|
||||
if (bpc_pos > 0)
|
||||
|
||||
if (bpc_pos > 0)
|
||||
for (int i = bpc_pos + 18; i < type_buf_length; i++) {
|
||||
if (((type_buf[i] >= '0') && (type_buf[i] <= '9')) || (type_buf[i] == ' ')) {
|
||||
if (type_buf[i] != ' ') {
|
||||
|
|
@ -3902,7 +3964,7 @@ bool compress_file(float min_percent, float max_percent) {
|
|||
printf("Ignoring following JPG streams until position ");
|
||||
print64(suppress_jpg_parsing_until);
|
||||
printf(" to avoid slowdown\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -3930,7 +3992,7 @@ bool compress_file(float min_percent, float max_percent) {
|
|||
saved_cb = cb;
|
||||
|
||||
long long act_pos = input_file_pos;
|
||||
|
||||
|
||||
// parse frames until first invalid frame is found or end-of-file
|
||||
seek_64(fin, act_pos);
|
||||
while (fread(in, 1, 4, fin) == 4) {
|
||||
|
|
@ -3980,16 +4042,16 @@ bool compress_file(float min_percent, float max_percent) {
|
|||
if (act_pos == mp3_parsing_cache_second_frame) {
|
||||
n = mp3_parsing_cache_n;
|
||||
mp3_length = mp3_parsing_cache_mp3_length;
|
||||
|
||||
|
||||
// update values
|
||||
mp3_parsing_cache_second_frame = act_pos + frame_size;
|
||||
mp3_parsing_cache_n -= 1;
|
||||
mp3_parsing_cache_mp3_length -= frame_size;
|
||||
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
n++;
|
||||
mp3_length += frame_size;
|
||||
act_pos += frame_size;
|
||||
|
|
@ -4020,9 +4082,9 @@ bool compress_file(float min_percent, float max_percent) {
|
|||
mp3_parsing_cache_n = n - 1;
|
||||
mp3_parsing_cache_mp3_length = mp3_length - mp3_parsing_cache_second_frame_candidate_size;
|
||||
}
|
||||
|
||||
|
||||
long long position_length_sum = saved_input_file_pos + mp3_length;
|
||||
|
||||
|
||||
// type must be MPEG-1, Layer III, packMP3 won't process any other files
|
||||
if ( type == MPEG1_LAYER_III ) {
|
||||
// sum of position and length of last "big value pairs out of bounds" error is suppressed to avoid slowdowns
|
||||
|
|
@ -4102,9 +4164,9 @@ bool compress_file(float min_percent, float max_percent) {
|
|||
}
|
||||
base64_header_length++;
|
||||
} while (base64_header_length < (CHECKBUF_SIZE - 2));
|
||||
|
||||
|
||||
if (found_double_crlf) {
|
||||
|
||||
|
||||
saved_input_file_pos = input_file_pos;
|
||||
saved_cb = cb;
|
||||
|
||||
|
|
@ -4230,7 +4292,7 @@ while (fin_pos < fin_length) {
|
|||
float percent = (fin_pos / (float)fin_length) * 100;
|
||||
show_progress(percent, true, true);
|
||||
}
|
||||
|
||||
|
||||
unsigned char header1 = fin_fgetc();
|
||||
if (header1 == 0) { // uncompressed data
|
||||
long long uncompressed_data_length;
|
||||
|
|
@ -4984,9 +5046,9 @@ while (fin_pos < fin_length) {
|
|||
|
||||
if (in_memory) {
|
||||
jpg_mem_in = new unsigned char[decompressed_data_length];
|
||||
|
||||
|
||||
fast_copy(fin, jpg_mem_in, decompressed_data_length);
|
||||
|
||||
|
||||
pjglib_init_streams(jpg_mem_in, 1, decompressed_data_length, jpg_mem_out, 1);
|
||||
recompress_success = pjglib_convert_stream2mem(&jpg_mem_out, &jpg_mem_out_size, recompress_msg);
|
||||
} else {
|
||||
|
|
@ -5043,7 +5105,7 @@ while (fin_pos < fin_length) {
|
|||
}
|
||||
} while (!found_ffda);
|
||||
}
|
||||
|
||||
|
||||
if ((!found_ffda) || ((ffda_pos - 1 - MJPGDHT_LEN) < 0)) {
|
||||
printf("ERROR: Motion JPG stream corrupted\n");
|
||||
exit(1);
|
||||
|
|
@ -5222,7 +5284,7 @@ while (fin_pos < fin_length) {
|
|||
line_count += fin_fgetc();
|
||||
|
||||
unsigned int* base64_line_len = new unsigned int[line_count];
|
||||
|
||||
|
||||
if (line_case == 2) {
|
||||
for (int i = 0; i < line_count; i++) {
|
||||
base64_line_len[i] = fin_fgetc();
|
||||
|
|
@ -5405,7 +5467,7 @@ while (fin_pos < fin_length) {
|
|||
bool in_memory = (recompressed_data_length <= MP3_MAX_MEMORY_SIZE);
|
||||
|
||||
bool recompress_success = false;
|
||||
|
||||
|
||||
if (in_memory) {
|
||||
mp3_mem_in = new unsigned char[decompressed_data_length];
|
||||
|
||||
|
|
@ -5434,7 +5496,7 @@ while (fin_pos < fin_length) {
|
|||
|
||||
if (in_memory) {
|
||||
fast_copy(mp3_mem_out, fout, recompressed_data_length);
|
||||
|
||||
|
||||
if (mp3_mem_in != NULL) delete[] mp3_mem_in;
|
||||
if (mp3_mem_out != NULL) delete[] mp3_mem_out;
|
||||
} else {
|
||||
|
|
@ -5677,7 +5739,7 @@ void convert_file() {
|
|||
|
||||
init_compress_otf();
|
||||
init_decompress_otf();
|
||||
|
||||
|
||||
if (!DEBUG_MODE) show_progress(0, false, false);
|
||||
|
||||
for (;;) {
|
||||
|
|
@ -5706,11 +5768,11 @@ void convert_file() {
|
|||
show_progress(percent, true, true);
|
||||
}
|
||||
}
|
||||
own_fwrite(convbuf, 1, conv_bytes, fout);
|
||||
own_fwrite(convbuf, 1, conv_bytes, fout);
|
||||
|
||||
denit_compress_otf();
|
||||
denit_decompress_otf();
|
||||
|
||||
|
||||
denit_convert();
|
||||
}
|
||||
|
||||
|
|
@ -5979,7 +6041,7 @@ void lzma_progress_update() {
|
|||
float percent = ((input_file_pos + uncompressed_bytes_written) / ((float)fin_length + uncompressed_bytes_total)) * (global_max_percent - global_min_percent) + global_min_percent;
|
||||
|
||||
uint64_t progress_in = 0, progress_out = 0;
|
||||
|
||||
|
||||
lzma_get_progress(&otf_xz_stream_c, &progress_in, &progress_out);
|
||||
|
||||
lzma_mib_total = otf_xz_stream_c.total_in / (1024 * 1024);
|
||||
|
|
@ -6007,13 +6069,13 @@ void fast_copy(FILE* file1, FILE* file2, long long bytecount, bool update_progre
|
|||
own_fread(copybuf, 1, remaining_bytes, file1);
|
||||
own_fwrite(copybuf, 1, remaining_bytes, file2, false, update_progress);
|
||||
}
|
||||
|
||||
|
||||
if ((update_progress) && (!DEBUG_MODE)) uncompressed_bytes_written += bytecount;
|
||||
}
|
||||
|
||||
void fast_copy(FILE* file, unsigned char* mem, long long bytecount) {
|
||||
if (bytecount == 0) return;
|
||||
|
||||
|
||||
long long i;
|
||||
int remaining_bytes = (bytecount % COPY_BUF_SIZE);
|
||||
long long maxi = (bytecount / COPY_BUF_SIZE);
|
||||
|
|
@ -6030,7 +6092,7 @@ void fast_copy(FILE* file, unsigned char* mem, long long bytecount) {
|
|||
|
||||
void fast_copy(unsigned char* mem, FILE* file, long long bytecount) {
|
||||
if (bytecount == 0) return;
|
||||
|
||||
|
||||
long long i;
|
||||
int remaining_bytes = (bytecount % COPY_BUF_SIZE);
|
||||
long long maxi = (bytecount / COPY_BUF_SIZE);
|
||||
|
|
@ -6048,7 +6110,7 @@ void fast_copy(unsigned char* mem, FILE* file, long long bytecount) {
|
|||
size_t own_fwrite(const void *ptr, size_t size, size_t count, FILE* stream, bool final_byte, bool update_lzma_progress) {
|
||||
size_t result = 0;
|
||||
bool use_otf = false;
|
||||
|
||||
|
||||
if (comp_decomp_state == P_CONVERT) {
|
||||
use_otf = (conversion_to_method > OTF_NONE);
|
||||
if (use_otf) compression_otf_method = conversion_to_method;
|
||||
|
|
@ -6140,7 +6202,7 @@ size_t own_fwrite(const void *ptr, size_t size, size_t count, FILE* stream, bool
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
|
@ -6200,13 +6262,13 @@ size_t own_fread(void *ptr, size_t size, size_t count, FILE* stream) {
|
|||
|
||||
otf_xz_stream_d.avail_out = size * count;
|
||||
otf_xz_stream_d.next_out = (uint8_t *)ptr;
|
||||
|
||||
|
||||
do {
|
||||
print_work_sign(true);
|
||||
if ((otf_xz_stream_d.avail_in == 0) && !feof(fin)) {
|
||||
otf_xz_stream_d.next_in = (uint8_t *)otf_in;
|
||||
otf_xz_stream_d.avail_in = fread(otf_in, 1, CHUNK, fin);
|
||||
|
||||
|
||||
if (ferror(fin)) {
|
||||
printf("ERROR: Could not read input file\n");
|
||||
exit(1);
|
||||
|
|
@ -6219,7 +6281,7 @@ size_t own_fread(void *ptr, size_t size, size_t count, FILE* stream) {
|
|||
decompress_otf_end = true;
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
if (ret != LZMA_OK) {
|
||||
const char *msg;
|
||||
switch (ret) {
|
||||
|
|
@ -6342,8 +6404,8 @@ long long compare_files_penalty(FILE* file1, FILE* file2, long long pos1, long l
|
|||
local_penalty_bytes_len += 5;
|
||||
// position
|
||||
local_penalty_bytes[local_penalty_bytes_len-5] = (same_byte_count >> 24) % 256;
|
||||
local_penalty_bytes[local_penalty_bytes_len-4] = (same_byte_count >> 16) % 256;
|
||||
local_penalty_bytes[local_penalty_bytes_len-3] = (same_byte_count >> 8) % 256;
|
||||
local_penalty_bytes[local_penalty_bytes_len-4] = (same_byte_count >> 16) % 256;
|
||||
local_penalty_bytes[local_penalty_bytes_len-3] = (same_byte_count >> 8) % 256;
|
||||
local_penalty_bytes[local_penalty_bytes_len-2] = same_byte_count % 256;
|
||||
// new byte
|
||||
local_penalty_bytes[local_penalty_bytes_len-1] = input_bytes1[i];
|
||||
|
|
@ -7269,7 +7331,7 @@ void try_decompression_gif(unsigned char version[5]) {
|
|||
recompressed_streams_count++;
|
||||
recompressed_gif_count++;
|
||||
non_zlib_was_used = true;
|
||||
|
||||
|
||||
if (penalty_bytes != NULL) {
|
||||
memcpy(best_penalty_bytes, penalty_bytes, penalty_bytes_len);
|
||||
best_penalty_bytes_len = penalty_bytes_len;
|
||||
|
|
@ -7394,7 +7456,7 @@ void try_decompression_jpg (long long jpg_length, bool progressive_jpg) {
|
|||
jpg_mem_in = new unsigned char[jpg_length + MJPGDHT_LEN];
|
||||
seek_64(fin, input_file_pos);
|
||||
fast_copy(fin, jpg_mem_in, jpg_length);
|
||||
|
||||
|
||||
pjglib_init_streams(jpg_mem_in, 1, jpg_length, jpg_mem_out, 1);
|
||||
recompress_success = pjglib_convert_stream2mem(&jpg_mem_out, &jpg_mem_out_size, recompress_msg);
|
||||
} else { // large stream => use temporary files
|
||||
|
|
@ -7413,14 +7475,14 @@ void try_decompression_jpg (long long jpg_length, bool progressive_jpg) {
|
|||
|
||||
recompress_success = pjglib_convert_file2file(tempfile0, tempfile1, recompress_msg);
|
||||
}
|
||||
|
||||
|
||||
if ((!recompress_success) && (strncmp(recompress_msg, "huffman table missing", 21) == 0) && (use_mjpeg)) {
|
||||
if (DEBUG_MODE) printf ("huffman table missing, trying to use Motion JPEG DHT\n");
|
||||
// search 0xFF 0xDA, insert MJPGDHT (MJPGDHT_LEN bytes)
|
||||
bool found_ffda = false;
|
||||
bool found_ff = false;
|
||||
int ffda_pos = -1;
|
||||
|
||||
|
||||
if (in_memory) {
|
||||
do {
|
||||
ffda_pos++;
|
||||
|
|
@ -7466,10 +7528,10 @@ void try_decompression_jpg (long long jpg_length, bool progressive_jpg) {
|
|||
safe_fclose(&fjpg);
|
||||
recompress_success = pjglib_convert_file2file(tempfile3, tempfile1, recompress_msg);
|
||||
}
|
||||
|
||||
|
||||
mjpg_dht_used = recompress_success;
|
||||
}
|
||||
|
||||
|
||||
decompressed_streams_count++;
|
||||
if (progressive_jpg) {
|
||||
decompressed_jpg_prog_count++;
|
||||
|
|
@ -7486,8 +7548,8 @@ void try_decompression_jpg (long long jpg_length, bool progressive_jpg) {
|
|||
}
|
||||
|
||||
if (recompress_success) {
|
||||
int jpg_new_length = -1;
|
||||
|
||||
int jpg_new_length = -1;
|
||||
|
||||
if (in_memory) {
|
||||
jpg_new_length = jpg_mem_out_size;
|
||||
} else {
|
||||
|
|
@ -7495,8 +7557,8 @@ void try_decompression_jpg (long long jpg_length, bool progressive_jpg) {
|
|||
fseek(ftempout, 0, SEEK_END);
|
||||
jpg_new_length = ftell(ftempout);
|
||||
safe_fclose(&ftempout);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (jpg_new_length > 0) {
|
||||
recompressed_streams_count++;
|
||||
if (progressive_jpg) {
|
||||
|
|
@ -7555,7 +7617,7 @@ void try_decompression_jpg (long long jpg_length, bool progressive_jpg) {
|
|||
}
|
||||
|
||||
if (jpg_mem_in != NULL) delete[] jpg_mem_in;
|
||||
if (jpg_mem_out != NULL) delete[] jpg_mem_out;
|
||||
if (jpg_mem_out != NULL) delete[] jpg_mem_out;
|
||||
}
|
||||
|
||||
void try_decompression_mp3 (long long mp3_length) {
|
||||
|
|
@ -7581,7 +7643,7 @@ void try_decompression_mp3 (long long mp3_length) {
|
|||
mp3_mem_in = new unsigned char[mp3_length];
|
||||
seek_64(fin, input_file_pos);
|
||||
fast_copy(fin, mp3_mem_in, mp3_length);
|
||||
|
||||
|
||||
pmplib_init_streams(mp3_mem_in, 1, mp3_length, mp3_mem_out, 1);
|
||||
recompress_success = pmplib_convert_stream2mem(&mp3_mem_out, &mp3_mem_out_size, recompress_msg);
|
||||
} else { // large stream => use temporary files
|
||||
|
|
@ -7598,7 +7660,7 @@ void try_decompression_mp3 (long long mp3_length) {
|
|||
|
||||
recompress_success = pmplib_convert_file2file(tempfile0, tempfile1, recompress_msg);
|
||||
}
|
||||
|
||||
|
||||
if ((!recompress_success) && (strncmp(recompress_msg, "synching failure", 16) == 0)) {
|
||||
int frame_n;
|
||||
int pos;
|
||||
|
|
@ -7607,7 +7669,7 @@ void try_decompression_mp3 (long long mp3_length) {
|
|||
mp3_length = pos;
|
||||
|
||||
if (DEBUG_MODE) printf ("Too much garbage data at the end, retry with new length %i\n", pos);
|
||||
|
||||
|
||||
if (in_memory) {
|
||||
pmplib_init_streams(mp3_mem_in, 1, mp3_length, mp3_mem_out, 1);
|
||||
recompress_success = pmplib_convert_stream2mem(&mp3_mem_out, &mp3_mem_out_size, recompress_msg);
|
||||
|
|
@ -7633,7 +7695,7 @@ void try_decompression_mp3 (long long mp3_length) {
|
|||
printf(" to avoid slowdown\n");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
decompressed_streams_count++;
|
||||
decompressed_mp3_count++;
|
||||
|
||||
|
|
@ -7647,7 +7709,7 @@ void try_decompression_mp3 (long long mp3_length) {
|
|||
|
||||
if (recompress_success) {
|
||||
int mp3_new_length = -1;
|
||||
|
||||
|
||||
if (in_memory) {
|
||||
mp3_new_length = mp3_mem_out_size;
|
||||
} else {
|
||||
|
|
@ -7656,7 +7718,7 @@ void try_decompression_mp3 (long long mp3_length) {
|
|||
mp3_new_length = ftell(ftempout);
|
||||
safe_fclose(&ftempout);
|
||||
}
|
||||
|
||||
|
||||
if (mp3_new_length > 0) {
|
||||
recompressed_streams_count++;
|
||||
recompressed_mp3_count++;
|
||||
|
|
@ -7716,7 +7778,7 @@ bool is_valid_mp3_frame(unsigned char* frame_data, unsigned char header2, unsign
|
|||
int nsb, gr, ch;
|
||||
unsigned short crc;
|
||||
unsigned char* sideinfo;
|
||||
|
||||
|
||||
nsb = (nch == 1) ? 17 : 32;
|
||||
|
||||
sideinfo = frame_data;
|
||||
|
|
@ -7729,11 +7791,11 @@ bool is_valid_mp3_frame(unsigned char* frame_data, unsigned char header2, unsign
|
|||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
abitreader* side_reader = new abitreader(sideinfo, nsb);
|
||||
|
||||
|
||||
side_reader->read((nch == 1) ? 18 : 20);
|
||||
|
||||
|
||||
// granule specific side info
|
||||
char window_switching, region0_size, region1_size;
|
||||
for (gr = 0; gr < 2; gr++) {
|
||||
|
|
@ -7754,10 +7816,10 @@ bool is_valid_mp3_frame(unsigned char* frame_data, unsigned char header2, unsign
|
|||
}
|
||||
side_reader->read(3);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
delete(side_reader);
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -7768,14 +7830,14 @@ inline unsigned short mp3_calc_layer3_crc(unsigned char header2, unsigned char h
|
|||
{
|
||||
// crc has a start value of 0xFFFF
|
||||
unsigned short crc = 0xFFFF;
|
||||
|
||||
|
||||
// process two last bytes from header...
|
||||
crc = (crc << 8) ^ crc_table[(crc>>8) ^ header2];
|
||||
crc = (crc << 8) ^ crc_table[(crc>>8) ^ header3];
|
||||
// ... and all the bytes from the side information
|
||||
for ( int i = 0; i < sidesize; i++ )
|
||||
crc = (crc << 8) ^ crc_table[(crc>>8) ^ sideinfo[i]];
|
||||
|
||||
|
||||
return crc;
|
||||
}
|
||||
|
||||
|
|
@ -8417,7 +8479,7 @@ void try_decompression_base64(int base64_header_length) {
|
|||
|
||||
unsigned char base64_data[CHUNK >> 2];
|
||||
unsigned int* base64_line_len = new unsigned int[65536];
|
||||
|
||||
|
||||
int avail_in = 0;
|
||||
int i, j, k;
|
||||
unsigned char a, b, c, d;
|
||||
|
|
@ -8425,7 +8487,7 @@ void try_decompression_base64(int base64_header_length) {
|
|||
bool decoding_failed = false;
|
||||
bool stream_finished = false;
|
||||
k = 0;
|
||||
|
||||
|
||||
unsigned int line_nr = 0;
|
||||
int line_count = 0;
|
||||
unsigned int act_line_len = 0;
|
||||
|
|
@ -8604,7 +8666,7 @@ void try_decompression_base64(int base64_header_length) {
|
|||
}
|
||||
|
||||
delete[] base64_line_len;
|
||||
|
||||
|
||||
fout_fput32(identical_bytes);
|
||||
fout_fput32(identical_bytes_decomp);
|
||||
|
||||
|
|
@ -8696,7 +8758,7 @@ void error(int error_nr) {
|
|||
break;
|
||||
case ERR_ONLY_SET_LZMA_THREAD_ONCE:
|
||||
printf("LZMA thread count can only be set once");
|
||||
break;
|
||||
break;
|
||||
default:
|
||||
printf("Unknown error");
|
||||
}
|
||||
|
|
@ -8907,7 +8969,7 @@ void recursion_push() {
|
|||
recursion_stack_push(&mp3_parsing_cache_second_frame, sizeof(mp3_parsing_cache_second_frame));
|
||||
recursion_stack_push(&mp3_parsing_cache_n, sizeof(mp3_parsing_cache_n));
|
||||
recursion_stack_push(&mp3_parsing_cache_mp3_length, sizeof(mp3_parsing_cache_mp3_length));
|
||||
|
||||
|
||||
recursion_stack_push(&compression_otf_method, sizeof(compression_otf_method));
|
||||
recursion_stack_push(&decompress_otf_end, sizeof(decompress_otf_end));
|
||||
}
|
||||
|
|
@ -9039,10 +9101,10 @@ recursion_result recursion_compress(int compressed_bytes, int decompressed_bytes
|
|||
}
|
||||
tmp_r.success = compress_file(recursion_min_percent, recursion_max_percent);
|
||||
|
||||
if (anything_was_used)
|
||||
if (anything_was_used)
|
||||
rescue_anything_was_used = true;
|
||||
|
||||
if (non_zlib_was_used)
|
||||
if (non_zlib_was_used)
|
||||
rescue_non_zlib_was_used = true;
|
||||
|
||||
recursion_depth--;
|
||||
|
|
@ -9251,19 +9313,19 @@ void init_compress_otf() {
|
|||
uint64_t block_size = 0;
|
||||
uint64_t max_memory = compression_otf_max_memory * 1024 * 1024LL;
|
||||
int threads = compression_otf_thread_count;
|
||||
|
||||
|
||||
if (max_memory == 0) {
|
||||
max_memory = lzma_max_memory_default() * 1024 * 1024LL;
|
||||
}
|
||||
if (threads == 0) {
|
||||
threads = auto_detected_thread_count();
|
||||
}
|
||||
|
||||
|
||||
if (!init_encoder_mt(&otf_xz_stream_c, threads, max_memory, memory_usage, block_size)) {
|
||||
printf("ERROR: xz Multi-Threaded init failed\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
|
||||
string plural = "";
|
||||
if (threads > 1) {
|
||||
plural = "s";
|
||||
|
|
@ -9281,7 +9343,7 @@ void init_compress_otf() {
|
|||
int auto_detected_thread_count() {
|
||||
int threads = std::thread::hardware_concurrency();
|
||||
if (threads == 0) threads = 2;
|
||||
|
||||
|
||||
return threads;
|
||||
}
|
||||
|
||||
|
|
@ -9443,7 +9505,7 @@ void show_progress(float percent, bool use_backspaces, bool check_time) {
|
|||
old_lzma_progress_text_length = snprintf_ret;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (use_backspaces) {
|
||||
printf("%s", string(8,'\b').c_str()); // backspaces to remove output from %6.2f%
|
||||
}
|
||||
|
|
@ -9471,4 +9533,4 @@ void ctrl_c_handler(int sig) {
|
|||
(void) signal(SIGINT, SIG_DFL);
|
||||
|
||||
error(ERR_CTRL_C);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue