mirror of
https://github.com/schnaader/precomp-cpp
synced 2026-08-23 00:23:04 -04:00
MP3 recompression ("-r") in memory for files up to 64 MB
- Helper functions renamed to fast_copy overrides - Helper functions added to precomp.h - Related: Issue #14
This commit is contained in:
parent
a75eb06711
commit
fefc6a41ea
2 changed files with 43 additions and 24 deletions
65
precomp.cpp
65
precomp.cpp
|
|
@ -5076,7 +5076,7 @@ while (fin_pos < fin_length) {
|
|||
|
||||
seek_64(fout, fsave_fout_pos);
|
||||
}
|
||||
} else if (headertype == 10) { // Mp3 recompression
|
||||
} else if (headertype == 10) { // MP3 recompression
|
||||
|
||||
if (DEBUG_MODE) {
|
||||
printf("Decompressed data - MP3\n");
|
||||
|
|
@ -5098,38 +5098,55 @@ while (fin_pos < fin_length) {
|
|||
printf("Recompressed Length: %i - Decompressed length: %i\n", recompressed_data_length, decompressed_data_length);
|
||||
}
|
||||
|
||||
remove(tempfile1);
|
||||
ftempout = tryOpen(tempfile1,"wb");
|
||||
|
||||
fast_copy(fin, ftempout, decompressed_data_length);
|
||||
|
||||
safe_fclose(&ftempout);
|
||||
|
||||
remove(tempfile2);
|
||||
char recompress_msg[256];
|
||||
unsigned char* mp3_mem_in = NULL;
|
||||
unsigned char* mp3_mem_out = NULL;
|
||||
unsigned int mp3_mem_out_size = -1;
|
||||
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];
|
||||
|
||||
{
|
||||
char msg[256];
|
||||
recompress_success = pmplib_convert_file2file(tempfile1, tempfile2, msg);
|
||||
if ((!recompress_success) && (DEBUG_MODE)) {
|
||||
printf ("packMP3 error: %s\n", msg);
|
||||
}
|
||||
fast_copy(fin, mp3_mem_in, decompressed_data_length);
|
||||
|
||||
pmplib_init_streams(mp3_mem_in, 1, decompressed_data_length, mp3_mem_out, 1);
|
||||
recompress_success = pmplib_convert_stream2mem(&mp3_mem_out, &mp3_mem_out_size, recompress_msg);
|
||||
} else {
|
||||
remove(tempfile1);
|
||||
ftempout = tryOpen(tempfile1,"wb");
|
||||
|
||||
fast_copy(fin, ftempout, decompressed_data_length);
|
||||
|
||||
safe_fclose(&ftempout);
|
||||
|
||||
remove(tempfile2);
|
||||
|
||||
recompress_success = pmplib_convert_file2file(tempfile1, tempfile2, recompress_msg);
|
||||
}
|
||||
|
||||
if (!recompress_success) {
|
||||
if (DEBUG_MODE) printf ("packMP3 error: %s\n", recompress_msg);
|
||||
printf("Error recompressing data!");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
frecomp = tryOpen(tempfile2,"rb");
|
||||
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 {
|
||||
frecomp = tryOpen(tempfile2,"rb");
|
||||
|
||||
fast_copy(frecomp, fout, recompressed_data_length);
|
||||
fast_copy(frecomp, fout, recompressed_data_length);
|
||||
|
||||
safe_fclose(&frecomp);
|
||||
safe_fclose(&frecomp);
|
||||
|
||||
remove(tempfile2);
|
||||
remove(tempfile1);
|
||||
remove(tempfile2);
|
||||
remove(tempfile1);
|
||||
}
|
||||
} else if (headertype == 254) { // brute mode recompression
|
||||
|
||||
if (DEBUG_MODE) {
|
||||
|
|
@ -5831,7 +5848,7 @@ void fast_copy(FILE* file1, FILE* file2, long long bytecount) {
|
|||
}
|
||||
}
|
||||
|
||||
void fast_copy_file_to_mem(FILE* file, unsigned char* mem, long long bytecount) {
|
||||
void fast_copy(FILE* file, unsigned char* mem, long long bytecount) {
|
||||
if (bytecount == 0) return;
|
||||
|
||||
long long i;
|
||||
|
|
@ -5849,7 +5866,7 @@ void fast_copy_file_to_mem(FILE* file, unsigned char* mem, long long bytecount)
|
|||
}
|
||||
}
|
||||
|
||||
void fast_copy_mem_to_file(unsigned char* mem, FILE* file, long long bytecount) {
|
||||
void fast_copy(unsigned char* mem, FILE* file, long long bytecount) {
|
||||
if (bytecount == 0) return;
|
||||
|
||||
long long i;
|
||||
|
|
@ -7303,7 +7320,7 @@ void try_decompression_mp3 (long long mp3_length) {
|
|||
if (in_memory) { // small stream => do everything in memory
|
||||
mp3_mem_in = new unsigned char[mp3_length];
|
||||
seek_64(fin, input_file_pos);
|
||||
fast_copy_file_to_mem(fin, mp3_mem_in, mp3_length);
|
||||
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);
|
||||
|
|
@ -7405,7 +7422,7 @@ void try_decompression_mp3 (long long mp3_length) {
|
|||
|
||||
// write compressed MP3
|
||||
if (in_memory) {
|
||||
fast_copy_mem_to_file(mp3_mem_out, fout, best_identical_bytes_decomp);
|
||||
fast_copy(mp3_mem_out, fout, best_identical_bytes_decomp);
|
||||
} else {
|
||||
write_decompressed_data(best_identical_bytes_decomp);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -59,6 +59,8 @@ void write_header();
|
|||
void read_header();
|
||||
void convert_header();
|
||||
void fast_copy(FILE* file1, FILE* file2, long long bytecount);
|
||||
void fast_copy(FILE* file, unsigned char* mem, long long bytecount);
|
||||
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, int final_byte = 0);
|
||||
size_t own_fread(void *ptr, size_t size, size_t count, FILE* stream);
|
||||
void seek_64(FILE* f, unsigned long long pos);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue