#include "VidHeader.cpp" int main( int argc, char ** argv ){ if( argc < 2 ){ fprintf(stderr,"Usage: zlib_compress [output_file.zlib] [DELETE_INPUT]\n."); exit(1); } const char * in_filename = argv[1]; char * out_filename = NULL; if( argc > 2 ){ out_filename = new char[ strlen( argv[2] ) + 10]; strcpy( out_filename, argv[2] ); } else { out_filename = new char[ strlen( in_filename ) + 10 ]; sprintf( out_filename, "%s.zlib", in_filename ); } FILE * in_file = fopen(in_filename, "rb"); if( in_file == NULL ){ fprintf(stderr, "%s:%d Unable to open input file in 'rb' mode.\n%s\n", __FILE__, __LINE__, in_filename); exit(1); } FILE * out_file = fopen(out_filename, "wb"); if( in_file == NULL ){ fprintf(stderr,"%s:%d Unable to open output file in 'wb' mode.\n%s\n", __FILE__, __LINE__, out_filename); exit(1); } fseek(in_file, 0, SEEK_END); int in_file_size = ftell(in_file); fseek(in_file, 0, SEEK_SET); uchar * in_array = new uchar[in_file_size]; int read_size = fread(in_array, 1, in_file_size, in_file); fclose(in_file); ulong out_file_size = (int)(1.2 * compressBound(in_file_size)); //20% overhead estimated for multiple blocks uchar * out_array = new uchar[out_file_size]; //if( compress( out_array, &out_file_size, in_array, in_file_size ) != Z_OK ){ if( compress_MT( out_array, out_file_size, in_array, in_file_size ) != Z_OK ){ fprintf(stderr, "Compression error.\n"); exit(1); } fwrite(out_array, 1, out_file_size, out_file); fclose(out_file); if( ( argc > 2 && !strcmp( argv[2], "DELETE_INPUT" ) ) || ( argc > 3 && !strcmp( argv[3], "DELETE_INPUT" ) ) ) unlink(in_filename); delete [] out_filename; delete [] out_array; delete [] in_array; }