From 7ebe71c42192e1c130d6c73941a94568eae9bc91 Mon Sep 17 00:00:00 2001 From: Christian Schneider Date: Tue, 9 Apr 2019 15:07:27 +0200 Subject: [PATCH] Another fix for MP3 slowdown - Error message "inconsistent original bit" --- precomp.cpp | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/precomp.cpp b/precomp.cpp index b768739..ccaf8f7 100644 --- a/precomp.cpp +++ b/precomp.cpp @@ -288,6 +288,7 @@ long long suppress_mp3_type_until[16]; long long suppress_mp3_big_value_pairs_sum; long long suppress_mp3_non_zero_padbits_sum; long long suppress_mp3_inconsistent_emphasis_sum; +long long suppress_mp3_inconsistent_original_bit; long long mp3_parsing_cache_second_frame; long long mp3_parsing_cache_n; long long mp3_parsing_cache_mp3_length; @@ -643,6 +644,7 @@ int init(int argc, char* argv[]) { suppress_mp3_big_value_pairs_sum = -1; suppress_mp3_non_zero_padbits_sum = -1; suppress_mp3_inconsistent_emphasis_sum = -1; + suppress_mp3_inconsistent_original_bit = -1; mp3_parsing_cache_second_frame = -1; // init LZMA filters @@ -1332,6 +1334,7 @@ int init_comfort(int argc, char* argv[]) { suppress_mp3_big_value_pairs_sum = -1; suppress_mp3_non_zero_padbits_sum = -1; suppress_mp3_inconsistent_emphasis_sum = -1; + suppress_mp3_inconsistent_original_bit = -1; mp3_parsing_cache_second_frame = -1; // init LZMA filters @@ -4272,7 +4275,8 @@ bool compress_file(float min_percent, float max_percent) { // sums of position and length of last MP3 errors are suppressed to avoid slowdowns if ((suppress_mp3_big_value_pairs_sum != position_length_sum) && (suppress_mp3_non_zero_padbits_sum != position_length_sum) - && (suppress_mp3_inconsistent_emphasis_sum != position_length_sum)) { + && (suppress_mp3_inconsistent_emphasis_sum != position_length_sum) + && (suppress_mp3_inconsistent_original_bit != position_length_sum)) { try_decompression_mp3(mp3_length); } } else if (type > 0) { @@ -6746,6 +6750,11 @@ void try_decompression_mp3 (long long mp3_length) { if (DEBUG_MODE) { cout << "Ignoring following streams with position/length sum " << suppress_mp3_inconsistent_emphasis_sum << " to avoid slowdown" << endl; } + } else if ((!recompress_success) && (strncmp(recompress_msg, "inconsistent original bit", 25) == 0)) { + suppress_mp3_inconsistent_original_bit = saved_input_file_pos + mp3_length; + if (DEBUG_MODE) { + cout << "Ignoring following streams with position/length sum " << suppress_mp3_inconsistent_original_bit << " to avoid slowdown" << endl; + } } decompressed_streams_count++; @@ -7611,6 +7620,7 @@ void recursion_push() { recursion_stack_push(&suppress_mp3_big_value_pairs_sum, sizeof(suppress_mp3_big_value_pairs_sum)); recursion_stack_push(&suppress_mp3_non_zero_padbits_sum, sizeof(suppress_mp3_non_zero_padbits_sum)); recursion_stack_push(&suppress_mp3_inconsistent_emphasis_sum, sizeof(suppress_mp3_inconsistent_emphasis_sum)); + recursion_stack_push(&suppress_mp3_inconsistent_original_bit, sizeof(suppress_mp3_inconsistent_original_bit)); 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)); @@ -7632,6 +7642,7 @@ void recursion_pop() { recursion_stack_pop(&mp3_parsing_cache_mp3_length, sizeof(mp3_parsing_cache_mp3_length)); recursion_stack_pop(&mp3_parsing_cache_n, sizeof(mp3_parsing_cache_n)); recursion_stack_pop(&mp3_parsing_cache_second_frame, sizeof(mp3_parsing_cache_second_frame)); + recursion_stack_pop(&suppress_mp3_inconsistent_original_bit, sizeof(suppress_mp3_inconsistent_original_bit)); recursion_stack_pop(&suppress_mp3_inconsistent_emphasis_sum, sizeof(suppress_mp3_inconsistent_emphasis_sum)); recursion_stack_pop(&suppress_mp3_non_zero_padbits_sum, sizeof(suppress_mp3_non_zero_padbits_sum)); recursion_stack_pop(&suppress_mp3_big_value_pairs_sum, sizeof(suppress_mp3_big_value_pairs_sum)); @@ -7751,6 +7762,8 @@ recursion_result recursion_compress(long long compressed_bytes, long long decomp suppress_mp3_big_value_pairs_sum = -1; suppress_mp3_non_zero_padbits_sum = -1; suppress_mp3_inconsistent_emphasis_sum = -1; + suppress_mp3_inconsistent_original_bit = -1; + mp3_parsing_cache_second_frame = -1; // disable compression-on-the-fly in recursion - we don't want compressed compressed streams