diff --git a/doc/Changelog.html b/doc/Changelog.html index 6c8f7647..2249dd76 100644 --- a/doc/Changelog.html +++ b/doc/Changelog.html @@ -26,6 +26,7 @@ a:visited { color: #0000EE; }
  • Added Opus decoder option to output always at the native sample rate of 48.000 Hz
  • Updated Qt runtime libraries to v4.8.4 (2012-11-29), compiled with MSVC 11.0
  • Updated Opus encoder/decoder libraries to v1.1.x and Opus-Tools to v0.1.6 (2013-02-09) +
  • Updated Valdec decoder to v1.4.0a (2013-02-11), based on latest AC3Filter Tools
  • Updated SoX to to v14.4.1 (2012-02-09), compiled with ICL 13.0 and MSVC 10.0
  • Updated GnuPG to v1.4.13, compiled with GCC 4.7.2
  • Updated language files (big thank-you to all contributors !!!) diff --git a/etc/Patches/AC3Filter-valdec-UTF8+FlushProgress+NoDShow.V2.diff b/etc/Patches/AC3Filter-valdec-UTF8+FlushProgress+NoDShow.V2.diff new file mode 100644 index 00000000..6f1a812a --- /dev/null +++ b/etc/Patches/AC3Filter-valdec-UTF8+FlushProgress+NoDShow.V2.diff @@ -0,0 +1,1801 @@ + tools/Release/valdec.exe | Bin 5513728 -> 5512704 bytes + tools/valdec.cpp | 140 +++++++++++++++--------- + tools/valdec.sln | 17 +-- + tools/valdec.suo | Bin 11776 -> 31744 bytes + valib/3rdparty/faad/decoder.c | 14 +-- + valib/3rdparty/faad/drm_dec.c | 8 +- + valib/3rdparty/faad/filtbank.c | 10 +- + valib/3rdparty/faad/huffman.c | 10 +- + valib/3rdparty/faad/mdct.c | 4 +- + valib/3rdparty/faad/ps_dec.c | 42 +++---- + valib/3rdparty/faad/rvlc.c | 18 +-- + valib/3rdparty/faad/sbr_dec.c | 8 +- + valib/3rdparty/faad/sbr_fbt.c | 46 ++++---- + valib/3rdparty/faad/sbr_syntax.c | 38 +++---- + valib/3rdparty/faad/specrec.c | 36 +++--- + valib/3rdparty/faad/syntax.c | 54 ++++----- + valib/3rdparty/faad/tns.c | 4 +- + valib/3rdparty/libmpg123/icy2utf8.c | 2 +- + valib/3rdparty/libmpg123/optimize.c | 4 +- + valib/valib/auto_file.cpp | 3 +- + valib/valib/auto_file.h | 4 +- + valib/valib/log.cpp | 2 +- + valib/valib/sink/sink_dsound.cpp | 2 +- + valib/valib/version.h | 4 - + valib/valib/win32/unicode_support.c | 199 ++++++++++++++++++++++++++++++++++ + valib/valib/win32/unicode_support.cpp | 86 +++++++++++++++ + valib/valib/win32/unicode_support.h | 57 ++++++++++ + 27 files changed, 592 insertions(+), 220 deletions(-) + +diff --git a/tools/Release/valdec.exe b/tools/Release/valdec.exe +index 995954e..12b8e8f 100644 +Binary files a/tools/Release/valdec.exe and b/tools/Release/valdec.exe differ +diff --git a/tools/valdec.cpp b/tools/valdec.cpp +index 5582c8d..965e201 100644 +--- a/tools/valdec.cpp ++++ b/tools/valdec.cpp +@@ -23,6 +23,7 @@ + + // other + #include "win32/cpu.h" ++#include "win32/unicode_support.h" + #include "vargs.h" + + #include "valdec_usage.txt.h" +@@ -94,12 +95,12 @@ const enum_opt format_tbl[] = + { "7", FORMAT_PCMDOUBLE }, + }; + +-int valdec(int argc, const char *argv[]) ++int valdec(int argc, const char **argv) + { + using std::string; + if (argc < 2) + { +- printf(usage); ++ fprintf(stderr, usage); + return 1; + } + +@@ -179,7 +180,7 @@ int valdec(int argc, const char *argv[]) + { + if (parser) + { +- printf("-ac3 : ambiguous parser\n"); ++ fprintf(stderr, "-ac3 : ambiguous parser\n"); + return 1; + } + +@@ -192,7 +193,7 @@ int valdec(int argc, const char *argv[]) + { + if (parser) + { +- printf("-dts : ambiguous parser\n"); ++ fprintf(stderr, "-dts : ambiguous parser\n"); + return 1; + } + +@@ -205,7 +206,7 @@ int valdec(int argc, const char *argv[]) + { + if (parser) + { +- printf("-mpa : ambiguous parser\n"); ++ fprintf(stderr, "-mpa : ambiguous parser\n"); + return 1; + } + +@@ -223,7 +224,7 @@ int valdec(int argc, const char *argv[]) + int new_mask; + if (!arg_enum(argv[iarg], new_mask, mask_tbl, array_size(mask_tbl))) + { +- printf("-spk : unknown channel layout: %s\n", arg_text(argv[iarg])); ++ fprintf(stderr, "-spk : unknown channel layout: %s\n", arg_text(argv[iarg])); + return 1; + } + mask |= new_mask; +@@ -235,7 +236,7 @@ int valdec(int argc, const char *argv[]) + { + if (!arg_enum(argv[iarg], format, format_tbl, array_size(format_tbl))) + { +- printf("-fmt : unknown sample format: %s\n", arg_text(argv[iarg])); ++ fprintf(stderr, "-fmt : unknown sample format: %s\n", arg_text(argv[iarg])); + return 1; + } + continue; +@@ -257,7 +258,7 @@ int valdec(int argc, const char *argv[]) + { + if (sink) + { +- printf("-decode : ambiguous output mode\n"); ++ fprintf(stderr, "-decode : ambiguous output mode\n"); + return 1; + } + +@@ -273,7 +274,7 @@ int valdec(int argc, const char *argv[]) + { + if (sink) + { +- printf("-play : ambiguous output mode\n"); ++ fprintf(stderr, "-play : ambiguous output mode\n"); + return 1; + } + +@@ -289,12 +290,12 @@ int valdec(int argc, const char *argv[]) + { + if (sink) + { +- printf("-raw : ambiguous output mode\n"); ++ fprintf(stderr, "-raw : ambiguous output mode\n"); + return 1; + } + if (argc - iarg < 1) + { +- printf("-raw : specify a file name\n"); ++ fprintf(stderr, "-raw : specify a file name\n"); + return 1; + } + +@@ -311,12 +312,12 @@ int valdec(int argc, const char *argv[]) + { + if (sink) + { +- printf("-wav : ambiguous output mode\n"); ++ fprintf(stderr, "-wav : ambiguous output mode\n"); + return 1; + } + if (argc - iarg < 1) + { +- printf("-wav : specify a file name\n"); ++ fprintf(stderr, "-wav : specify a file name\n"); + return 1; + } + +@@ -333,7 +334,7 @@ int valdec(int argc, const char *argv[]) + { + if (sink) + { +- printf("-nothing : ambiguous output mode\n"); ++ fprintf(stderr, "-nothing : ambiguous output mode\n"); + return 1; + } + +@@ -541,7 +542,7 @@ int valdec(int argc, const char *argv[]) + } + if (have_delay) continue; + +- printf("Error: unknown option: %s\n", argv[iarg]); ++ fprintf(stderr, "Error: unknown option: %s\n", argv[iarg]); + return 1; + } + +@@ -554,13 +555,13 @@ int valdec(int argc, const char *argv[]) + + if (!file.open(input_filename, parser, 1000000)) + { +- printf("Error: Cannot open file '%s'\n", input_filename); ++ fprintf(stderr, "Error: Cannot open file '%s'\n", input_filename); + return 1; + } + + if (!file.stats() || !file.probe()) + { +- printf("Error: Cannot detect input file format\n", input_filename); ++ fprintf(stderr, "Error: Cannot detect input file format\n", input_filename); + return 1; + } + +@@ -570,8 +571,8 @@ int valdec(int argc, const char *argv[]) + + if (print_info) + { +- printf("%s\n", file.file_info().c_str()); +- printf("%s", file.stream_info().c_str()); ++ fprintf(stderr, "%s\n", file.file_info().c_str()); ++ fprintf(stderr, "%s", file.stream_info().c_str()); + } + + if (mode == mode_nothing) +@@ -592,14 +593,14 @@ int valdec(int argc, const char *argv[]) + Speakers user_spk(format, mask, sample_rate); + if (!dvd_graph.set_user(user_spk)) + { +- printf("Error: unsupported user format %s\n", user_spk.print()); ++ fprintf(stderr, "Error: unsupported user format %s\n", user_spk.print()); + return 1; + } + + Speakers in_spk = file.get_output(); + if (!dvd_graph.open(in_spk)) + { +- printf("Error: unsupported file format %s\n", in_spk.print()); ++ fprintf(stderr, "Error: unsupported file format %s\n", in_spk.print()); + return 1; + } + +@@ -633,7 +634,7 @@ int valdec(int argc, const char *argv[]) + case mode_raw: + if (!out_filename || !raw.open_file(out_filename)) + { +- printf("Error: failed to open output file '%s'\n", out_filename); ++ fprintf(stderr, "Error: failed to open output file '%s'\n", out_filename); + return 1; + } + break; +@@ -641,7 +642,7 @@ int valdec(int argc, const char *argv[]) + case mode_wav: + if (!out_filename || !wav.open_file(out_filename)) + { +- printf("Error: failed to open output file '%s'\n", out_filename); ++ fprintf(stderr, "Error: failed to open output file '%s'\n", out_filename); + return 1; + } + break; +@@ -649,7 +650,7 @@ int valdec(int argc, const char *argv[]) + case mode_play: + if (!dsound.open_dsound(0)) + { +- printf("Error: failed to init DirectSound\n"); ++ fprintf(stderr, "Error: failed to init DirectSound\n"); + return 1; + } + break; +@@ -681,7 +682,7 @@ int valdec(int argc, const char *argv[]) + + file.seek(0); + +- #define PRINT_STAT \ ++ #define PRINT_STAT do \ + { \ + if (control) \ + { \ +@@ -698,10 +699,16 @@ int valdec(int argc, const char *argv[]) + int(value2db(level)), \ + int(file.get_frames() / time), \ + cpu_current.usage() * 100); \ +- } ++ fflush(stderr); \ ++ } \ ++ while(0) + +- #define DROP_STAT \ +- fprintf(stderr, " \r"); ++ #define DROP_STAT do \ ++ { \ ++ fprintf(stderr, " \r"); \ ++ fflush(stderr); \ ++ } \ ++ while(0) + + while (file.get_chunk(chunk)) + { +@@ -714,7 +721,7 @@ int valdec(int argc, const char *argv[]) + PRINT_STAT; + + if (streams > 0 && print_info) +- printf("\n\n%s", file.stream_info().c_str()); ++ fprintf(stderr, "\n\n%s", file.stream_info().c_str()); + + streams++; + if (mode == mode_nothing) +@@ -729,11 +736,11 @@ int valdec(int argc, const char *argv[]) + if (sink->open(new_spk)) + { + DROP_STAT; +- printf("Opening audio output %s...\n", new_spk.print().c_str()); ++ fprintf(stderr, "Opening audio output %s...\n", new_spk.print().c_str()); + } + else + { +- printf("\nOutput format %s is unsupported\n", new_spk.print().c_str()); ++ fprintf(stderr, "\nOutput format %s is unsupported\n", new_spk.print().c_str()); + return 1; + } + } +@@ -760,11 +767,11 @@ int valdec(int argc, const char *argv[]) + if (sink->open(new_spk)) + { + DROP_STAT; +- printf("Opening audio output %s...\n", new_spk.print().c_str()); ++ fprintf(stderr, "Opening audio output %s...\n", new_spk.print().c_str()); + } + else + { +- printf("\nOutput format %s is unsupported\n", new_spk.print().c_str()); ++ fprintf(stderr, "\nOutput format %s is unsupported\n", new_spk.print().c_str()); + return 1; + } + } +@@ -783,13 +790,13 @@ int valdec(int argc, const char *argv[]) + // Final statistics + + PRINT_STAT; +- printf("\n---------------------------------------\n"); ++ fprintf(stderr, "\n---------------------------------------\n"); + if (streams > 1) +- printf("Streams found: %i\n", streams); +- printf("Frames: %i\n", file.get_frames()); +- printf("System time: %ims\n", int(cpu_total.get_system_time() * 1000)); +- printf("Process time: %ims\n", int(cpu_total.get_thread_time() * 1000 )); +- printf("Approx. %.2f%% realtime CPU usage\n", double(cpu_total.get_thread_time() * 100) / file.get_size(file.time)); ++ fprintf(stderr, "Streams found: %i\n", streams); ++ fprintf(stderr, "Frames: %i\n", file.get_frames()); ++ fprintf(stderr, "System time: %ims\n", int(cpu_total.get_system_time() * 1000)); ++ fprintf(stderr, "Process time: %ims\n", int(cpu_total.get_thread_time() * 1000 )); ++ fprintf(stderr, "Approx. %.2f%% realtime CPU usage\n", double(cpu_total.get_thread_time() * 100) / file.get_size(file.time)); + + ///////////////////////////////////////////////////////// + // Print levels histogram +@@ -806,27 +813,27 @@ int valdec(int argc, const char *argv[]) + max_level = dvd_graph.proc.get_max_level(); + dbpb = dvd_graph.proc.get_dbpb(); + +- printf("\nHistogram:\n"); +- printf("------------------------------------------------------------------------------\n"); ++ fprintf(stderr, "\nHistogram:\n"); ++ fprintf(stderr, "------------------------------------------------------------------------------\n"); + for (i = 0; i*dbpb < 100 && i < MAX_HISTOGRAM; i++) + { +- printf("%2idB: %4.1f ", i * dbpb, hist[i] * 100); ++ fprintf(stderr, "%2idB: %4.1f ", i * dbpb, hist[i] * 100); + for (j = 0; j < 67 && j < hist[i] * 67; j++) +- printf("*"); +- printf("\n"); ++ fprintf(stderr, "*"); ++ fprintf(stderr, "\n"); + } +- printf("------------------------------------------------------------------------------\n"); +- printf("max_level;%f\ndbpb;%i\nhistogram;", max_level, dbpb); ++ fprintf(stderr, "------------------------------------------------------------------------------\n"); ++ fprintf(stderr, "max_level;%f\ndbpb;%i\nhistogram;", max_level, dbpb); + for (i = 0; i < MAX_HISTOGRAM; i++) +- printf("%.4f;", hist[i]); +- printf("\n"); +- printf("------------------------------------------------------------------------------\n"); ++ fprintf(stderr, "%.4f;", hist[i]); ++ fprintf(stderr, "\n"); ++ fprintf(stderr, "------------------------------------------------------------------------------\n"); + } + + return 0; + } + +-int main(int argc, const char *argv[]) ++int valdec_main(int argc, const char **argv) + { + try + { +@@ -834,8 +841,39 @@ int main(int argc, const char *argv[]) + } + catch (ValibException &e) + { +- printf("Processing error: %s\n", boost::diagnostic_information(e).c_str()); ++ fprintf(stderr, "Processing error: %s\n", boost::diagnostic_information(e).c_str()); + return -1; + } + return 0; + } ++ ++int main(int argc, char *argv[]) ++{ ++ int argc_utf8; ++ char **argv_utf8; ++ int exit_code; ++ ++ __try ++ { ++ init_console_utf8(); ++ init_commandline_arguments_utf8(&argc_utf8, &argv_utf8); ++ } ++ __except(1) ++ { ++ __noop(); ++ } ++ ++ exit_code = valdec_main(argc_utf8, const_cast(argv_utf8)); ++ ++ __try ++ { ++ uninit_console_utf8(); ++ free_commandline_arguments_utf8(&argc_utf8, &argv_utf8); ++ } ++ __except(1) ++ { ++ __noop(); ++ } ++ ++ return exit_code; ++} +diff --git a/tools/valdec.sln b/tools/valdec.sln +index 22b4d5b..3e76282 100644 +--- a/tools/valdec.sln ++++ b/tools/valdec.sln +@@ -1,18 +1,13 @@ +  +-Microsoft Visual Studio Solution File, Format Version 10.00 +-# Visual Studio 2008 +-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "valdec", "valdec.vcproj", "{871889DF-6EF7-461F-AC1B-7DA682CB79A0}" +- ProjectSection(ProjectDependencies) = postProject +- {30FCD216-1CAD-48FD-BF4B-337572F7EC9C} = {30FCD216-1CAD-48FD-BF4B-337572F7EC9C} +- {11F10C24-A2EC-4514-AD78-85CF2FEF698D} = {11F10C24-A2EC-4514-AD78-85CF2FEF698D} +- {B8D9A742-1BED-4B8D-BC46-3D1669F3405E} = {B8D9A742-1BED-4B8D-BC46-3D1669F3405E} +- EndProjectSection ++Microsoft Visual Studio Solution File, Format Version 11.00 ++# Visual Studio 2010 ++Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "valdec", "valdec.vcxproj", "{871889DF-6EF7-461F-AC1B-7DA682CB79A0}" + EndProject +-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "valib", "..\valib\lib\valib.vcproj", "{30FCD216-1CAD-48FD-BF4B-337572F7EC9C}" ++Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "valib", "..\valib\lib\valib.vcxproj", "{30FCD216-1CAD-48FD-BF4B-337572F7EC9C}" + EndProject +-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mpa", "..\valib\lib\mpa.vcproj", "{11F10C24-A2EC-4514-AD78-85CF2FEF698D}" ++Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mpa", "..\valib\lib\mpa.vcxproj", "{11F10C24-A2EC-4514-AD78-85CF2FEF698D}" + EndProject +-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "aac", "..\valib\lib\aac.vcproj", "{B8D9A742-1BED-4B8D-BC46-3D1669F3405E}" ++Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "aac", "..\valib\lib\aac.vcxproj", "{B8D9A742-1BED-4B8D-BC46-3D1669F3405E}" + EndProject + Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution +diff --git a/tools/valdec.suo b/tools/valdec.suo +index 90eaeea..a9bc645 100644 +Binary files a/tools/valdec.suo and b/tools/valdec.suo differ +diff --git a/valib/3rdparty/faad/decoder.c b/valib/3rdparty/faad/decoder.c +index 85dd423..1dbc040 100644 +--- a/valib/3rdparty/faad/decoder.c ++++ b/valib/3rdparty/faad/decoder.c +@@ -512,11 +512,11 @@ void NEAACDECAPI NeAACDecClose(NeAACDecHandle hpDecoder) + return; + + #ifdef PROFILE +- printf("AAC decoder total: %I64d cycles\n", hDecoder->cycles); +- printf("requant: %I64d cycles\n", hDecoder->requant_cycles); +- printf("spectral_data: %I64d cycles\n", hDecoder->spectral_cycles); +- printf("scalefactors: %I64d cycles\n", hDecoder->scalefac_cycles); +- printf("output: %I64d cycles\n", hDecoder->output_cycles); ++ fprintf(stderr, "AAC decoder total: %I64d cycles\n", hDecoder->cycles); ++ fprintf(stderr, "requant: %I64d cycles\n", hDecoder->requant_cycles); ++ fprintf(stderr, "spectral_data: %I64d cycles\n", hDecoder->spectral_cycles); ++ fprintf(stderr, "scalefactors: %I64d cycles\n", hDecoder->scalefac_cycles); ++ fprintf(stderr, "output: %I64d cycles\n", hDecoder->output_cycles); + #endif + + for (i = 0; i < MAX_CHANNELS; i++) +@@ -852,7 +852,7 @@ static void* aac_frame_decode(NeAACDecStruct *hDecoder, + } + + #if 0 +- printf("%d\n", buffer_size*8); ++ fprintf(stderr, "%d\n", buffer_size*8); + #endif + + frame_len = hDecoder->frameLength; +@@ -901,7 +901,7 @@ static void* aac_frame_decode(NeAACDecStruct *hDecoder, + buf = faad_getbitbuffer(&ld, 32); + //temp = getdword((void*)buf); + temp = *((uint32_t*)buf); +- printf("0x%.8X\n", temp); ++ fprintf(stderr, "0x%.8X\n", temp); + free(buf); + } + faad_endbits(&ld); +diff --git a/valib/3rdparty/faad/drm_dec.c b/valib/3rdparty/faad/drm_dec.c +index 61cb818..0a72fce 100644 +--- a/valib/3rdparty/faad/drm_dec.c ++++ b/valib/3rdparty/faad/drm_dec.c +@@ -522,11 +522,11 @@ static int8_t huff_dec(bitfile *ld, drm_ps_huff_tab huff) + static int8_t sa_delta_clip(drm_ps_info *ps, int8_t i) + { + if (i < 0) { +- /* printf(" SAminclip %d", i); */ ++ /* fprintf(stderr, " SAminclip %d", i); */ + ps->sa_decode_error = 1; + return 0; + } else if (i > 7) { +- /* printf(" SAmaxclip %d", i); */ ++ /* fprintf(stderr, " SAmaxclip %d", i); */ + ps->sa_decode_error = 1; + return 7; + } else +@@ -536,11 +536,11 @@ static int8_t sa_delta_clip(drm_ps_info *ps, int8_t i) + static int8_t pan_delta_clip(drm_ps_info *ps, int8_t i) + { + if (i < -7) { +- /* printf(" PANminclip %d", i); */ ++ /* fprintf(stderr, " PANminclip %d", i); */ + ps->pan_decode_error = 1; + return -7; + } else if (i > 7) { +- /* printf(" PANmaxclip %d", i); */ ++ /* fprintf(stderr, " PANmaxclip %d", i); */ + ps->pan_decode_error = 1; + return 7; + } else +diff --git a/valib/3rdparty/faad/filtbank.c b/valib/3rdparty/faad/filtbank.c +index 1b1464b..8665c27 100644 +--- a/valib/3rdparty/faad/filtbank.c ++++ b/valib/3rdparty/faad/filtbank.c +@@ -97,7 +97,7 @@ void filter_bank_end(fb_info *fb) + if (fb != NULL) + { + #ifdef PROFILE +- printf("FB: %I64d cycles\n", fb->cycles); ++ fprintf(stderr, "FB: %I64d cycles\n", fb->cycles); + #endif + + faad_mdct_end(fb->mdct256); +@@ -203,12 +203,12 @@ void ifilter_bank(fb_info *fb, uint8_t window_sequence, uint8_t window_shape, + #if 0 + for (i = 0; i < 1024; i++) + { +- printf("%d\n", freq_in[i]); ++ fprintf(stderr, "%d\n", freq_in[i]); + } + #endif + + #if 0 +- printf("%d %d\n", window_sequence, window_shape); ++ fprintf(stderr, "%d %d\n", window_sequence, window_shape); + #endif + + switch (window_sequence) +@@ -319,8 +319,8 @@ void ifilter_bank(fb_info *fb, uint8_t window_sequence, uint8_t window_shape, + #if 0 + for (i = 0; i < 1024; i++) + { +- printf("%d\n", time_out[i]); +- //printf("0x%.8X\n", time_out[i]); ++ fprintf(stderr, "%d\n", time_out[i]); ++ //fprintf(stderr, "0x%.8X\n", time_out[i]); + } + #endif + +diff --git a/valib/3rdparty/faad/huffman.c b/valib/3rdparty/faad/huffman.c +index e2656c0..44b08f7 100644 +--- a/valib/3rdparty/faad/huffman.c ++++ b/valib/3rdparty/faad/huffman.c +@@ -67,7 +67,7 @@ int8_t huffman_scale_factor(bitfile *ld) + + if (offset > 240) + { +- /* printf("ERROR: offset into hcb_sf = %d >240!\n", offset); */ ++ /* fprintf(stderr, "ERROR: offset into hcb_sf = %d >240!\n", offset); */ + return -1; + } + } +@@ -179,7 +179,7 @@ static uint8_t huffman_2step_quad(uint8_t cb, bitfile *ld, int16_t *sp) + + if (offset > hcb_2_quad_table_size[cb]) + { +- /* printf("ERROR: offset into hcb_2_quad_table = %d >%d!\n", offset, ++ /* fprintf(stderr, "ERROR: offset into hcb_2_quad_table = %d >%d!\n", offset, + hcb_2_quad_table_size[cb]); */ + return 10; + } +@@ -222,7 +222,7 @@ static uint8_t huffman_2step_pair(uint8_t cb, bitfile *ld, int16_t *sp) + + if (offset > hcb_2_pair_table_size[cb]) + { +- /* printf("ERROR: offset into hcb_2_pair_table = %d >%d!\n", offset, ++ /* fprintf(stderr, "ERROR: offset into hcb_2_pair_table = %d >%d!\n", offset, + hcb_2_pair_table_size[cb]); */ + return 10; + } +@@ -254,7 +254,7 @@ static uint8_t huffman_binary_quad(uint8_t cb, bitfile *ld, int16_t *sp) + + if (offset > hcb_bin_table_size[cb]) + { +- /* printf("ERROR: offset into hcb_bin_table = %d >%d!\n", offset, ++ /* fprintf(stderr, "ERROR: offset into hcb_bin_table = %d >%d!\n", offset, + hcb_bin_table_size[cb]); */ + return 10; + } +@@ -288,7 +288,7 @@ static uint8_t huffman_binary_pair(uint8_t cb, bitfile *ld, int16_t *sp) + + if (offset > hcb_bin_table_size[cb]) + { +- /* printf("ERROR: offset into hcb_bin_table = %d >%d!\n", offset, ++ /* fprintf(stderr, "ERROR: offset into hcb_bin_table = %d >%d!\n", offset, + hcb_bin_table_size[cb]); */ + return 10; + } +diff --git a/valib/3rdparty/faad/mdct.c b/valib/3rdparty/faad/mdct.c +index 247691e..9756f84 100644 +--- a/valib/3rdparty/faad/mdct.c ++++ b/valib/3rdparty/faad/mdct.c +@@ -109,8 +109,8 @@ void faad_mdct_end(mdct_info *mdct) + if (mdct != NULL) + { + #ifdef PROFILE +- printf("MDCT[%.4d]: %I64d cycles\n", mdct->N, mdct->cycles); +- printf("CFFT[%.4d]: %I64d cycles\n", mdct->N/4, mdct->fft_cycles); ++ fprintf(stderr, "MDCT[%.4d]: %I64d cycles\n", mdct->N, mdct->cycles); ++ fprintf(stderr, "CFFT[%.4d]: %I64d cycles\n", mdct->N/4, mdct->fft_cycles); + #endif + + cfftu(mdct->cfft); +diff --git a/valib/3rdparty/faad/ps_dec.c b/valib/3rdparty/faad/ps_dec.c +index 6d9c7be..ec73230 100644 +--- a/valib/3rdparty/faad/ps_dec.c ++++ b/valib/3rdparty/faad/ps_dec.c +@@ -643,8 +643,8 @@ static void delta_decode(uint8_t enable, int8_t *index, int8_t *index_prev, + //int8_t tmp2; + //int8_t tmp = index[i]; + +- //printf("%d %d\n", index_prev[i*stride], index[i]); +- //printf("%d\n", index[i]); ++ //fprintf(stderr, "%d %d\n", index_prev[i*stride], index[i]); ++ //fprintf(stderr, "%d\n", index[i]); + + index[i] = index_prev[i*stride] + index[i]; + //tmp2 = index[i]; +@@ -654,7 +654,7 @@ static void delta_decode(uint8_t enable, int8_t *index, int8_t *index_prev, + //{ + // if (index[i] == 7) + // { +- // printf("%d %d %d\n", index_prev[i*stride], tmp, tmp2); ++ // fprintf(stderr, "%d %d %d\n", index_prev[i*stride], tmp, tmp2); + // } + //} + } +@@ -991,41 +991,41 @@ static void ps_data_decode(ps_info *ps) + #if 0 + for (env = 0; env < ps->num_env; env++) + { +- printf("iid[env:%d]:", env); ++ fprintf(stderr, "iid[env:%d]:", env); + for (bin = 0; bin < 34; bin++) + { +- printf(" %d", ps->iid_index[env][bin]); ++ fprintf(stderr, " %d", ps->iid_index[env][bin]); + } +- printf("\n"); ++ fprintf(stderr, "\n"); + } + for (env = 0; env < ps->num_env; env++) + { +- printf("icc[env:%d]:", env); ++ fprintf(stderr, "icc[env:%d]:", env); + for (bin = 0; bin < 34; bin++) + { +- printf(" %d", ps->icc_index[env][bin]); ++ fprintf(stderr, " %d", ps->icc_index[env][bin]); + } +- printf("\n"); ++ fprintf(stderr, "\n"); + } + for (env = 0; env < ps->num_env; env++) + { +- printf("ipd[env:%d]:", env); ++ fprintf(stderr, "ipd[env:%d]:", env); + for (bin = 0; bin < 17; bin++) + { +- printf(" %d", ps->ipd_index[env][bin]); ++ fprintf(stderr, " %d", ps->ipd_index[env][bin]); + } +- printf("\n"); ++ fprintf(stderr, "\n"); + } + for (env = 0; env < ps->num_env; env++) + { +- printf("opd[env:%d]:", env); ++ fprintf(stderr, "opd[env:%d]:", env); + for (bin = 0; bin < 17; bin++) + { +- printf(" %d", ps->opd_index[env][bin]); ++ fprintf(stderr, " %d", ps->opd_index[env][bin]); + } +- printf("\n"); ++ fprintf(stderr, "\n"); + } +- printf("\n"); ++ fprintf(stderr, "\n"); + #endif + } + +@@ -1109,9 +1109,9 @@ static void ps_decorrelate(ps_info *ps, qmf_t X_left[38][64], qmf_t X_right[38][ + for (bk = 0; bk < 34; bk++) + { + #ifdef FIXED_POINT +- printf("%d %d: %d\n", n, bk, P[n][bk] /*/(float)REAL_PRECISION*/); ++ fprintf(stderr, "%d %d: %d\n", n, bk, P[n][bk] /*/(float)REAL_PRECISION*/); + #else +- printf("%d %d: %f\n", n, bk, P[n][bk]/1024.0); ++ fprintf(stderr, "%d %d: %f\n", n, bk, P[n][bk]/1024.0); + #endif + } + } +@@ -1154,9 +1154,9 @@ static void ps_decorrelate(ps_info *ps, qmf_t X_left[38][64], qmf_t X_right[38][ + for (bk = 0; bk < 34; bk++) + { + #ifdef FIXED_POINT +- printf("%d %d: %f\n", n, bk, G_TransientRatio[n][bk]/(float)REAL_PRECISION); ++ fprintf(stderr, "%d %d: %f\n", n, bk, G_TransientRatio[n][bk]/(float)REAL_PRECISION); + #else +- printf("%d %d: %f\n", n, bk, G_TransientRatio[n][bk]); ++ fprintf(stderr, "%d %d: %f\n", n, bk, G_TransientRatio[n][bk]); + #endif + } + } +@@ -1506,7 +1506,7 @@ static void ps_mix_phase(ps_info *ps, qmf_t X_left[38][64], qmf_t X_right[38][64 + beta = alpha * ( c_1 - c_2 ) / sqrt(2.0); + */ + +- //printf("%d\n", ps->iid_index[env][bk]); ++ //fprintf(stderr, "%d\n", ps->iid_index[env][bk]); + + /* calculate the scalefactors c_1 and c_2 from the intensity differences */ + c_1 = sf_iid[no_iid_steps + ps->iid_index[env][bk]]; +diff --git a/valib/3rdparty/faad/rvlc.c b/valib/3rdparty/faad/rvlc.c +index 73619c6..9df7f2a 100644 +--- a/valib/3rdparty/faad/rvlc.c ++++ b/valib/3rdparty/faad/rvlc.c +@@ -179,7 +179,7 @@ static uint8_t rvlc_decode_sf_forward(ic_stream *ics, bitfile *ld_sf, bitfile *l + int16_t noise_energy = ics->global_gain - 90 - 256; + + #ifdef PRINT_RVLC +- printf("\nglobal_gain: %d\n", ics->global_gain); ++ fprintf(stderr, "\nglobal_gain: %d\n", ics->global_gain); + #endif + + for (g = 0; g < ics->num_window_groups; g++) +@@ -237,7 +237,7 @@ static uint8_t rvlc_decode_sf_forward(ic_stream *ics, bitfile *ld_sf, bitfile *l + break; + } + #ifdef PRINT_RVLC +- printf("%3d:%4d%4d\n", sfb, ics->sfb_cb[g][sfb], ++ fprintf(stderr, "%3d:%4d%4d\n", sfb, ics->sfb_cb[g][sfb], + ics->scale_factors[g][sfb]); + #endif + if (t == 99) +@@ -248,7 +248,7 @@ static uint8_t rvlc_decode_sf_forward(ic_stream *ics, bitfile *ld_sf, bitfile *l + } + } + #ifdef PRINT_RVLC +- printf("\n\n"); ++ fprintf(stderr, "\n\n"); + #endif + + return 0; +@@ -268,14 +268,14 @@ static uint8_t rvlc_decode_sf_reverse(ic_stream *ics, bitfile *ld_sf, bitfile *l + int16_t noise_energy = ics->rev_global_gain; + + #ifdef PRINT_RVLC +- printf("\nrev_global_gain: %d\n", ics->rev_global_gain); ++ fprintf(stderr, "\nrev_global_gain: %d\n", ics->rev_global_gain); + #endif + + if (intensity_used) + { + is_position = rvlc_huffman_sf(ld_sf, ld_esc, -1); + #ifdef PRINT_RVLC +- printf("is_position: %d\n", is_position); ++ fprintf(stderr, "is_position: %d\n", is_position); + #endif + } + +@@ -340,7 +340,7 @@ static uint8_t rvlc_decode_sf_reverse(ic_stream *ics, bitfile *ld_sf, bitfile *l + break; + } + #ifdef PRINT_RVLC +- printf("%3d:%4d%4d\n", sfb, ics->sfb_cb[g][sfb], ++ fprintf(stderr, "%3d:%4d%4d\n", sfb, ics->sfb_cb[g][sfb], + ics->scale_factors[g][sfb]); + #endif + if (t == 99) +@@ -352,7 +352,7 @@ static uint8_t rvlc_decode_sf_reverse(ic_stream *ics, bitfile *ld_sf, bitfile *l + } + + #ifdef PRINT_RVLC +- printf("\n\n"); ++ fprintf(stderr, "\n\n"); + #endif + + return 0; +@@ -483,7 +483,7 @@ static int8_t rvlc_huffman_sf(bitfile *ld_sf, bitfile *ld_esc, + return 99; + index += esc; + #ifdef PRINT_RVLC +- printf("esc: %d - ", esc); ++ fprintf(stderr, "esc: %d - ", esc); + #endif + } + if (index == -ESC_VAL) +@@ -493,7 +493,7 @@ static int8_t rvlc_huffman_sf(bitfile *ld_sf, bitfile *ld_esc, + return 99; + index -= esc; + #ifdef PRINT_RVLC +- printf("esc: %d - ", esc); ++ fprintf(stderr, "esc: %d - ", esc); + #endif + } + +diff --git a/valib/3rdparty/faad/sbr_dec.c b/valib/3rdparty/faad/sbr_dec.c +index 0705ddd..1aefdf0 100644 +--- a/valib/3rdparty/faad/sbr_dec.c ++++ b/valib/3rdparty/faad/sbr_dec.c +@@ -324,7 +324,7 @@ static uint8_t sbr_process_channel(sbr_info *sbr, real_t *channel_buf, qmf_t X[M + int i; + for (i = 0; i < 1024; i++) + { +- printf("%d\n", channel_buf[i]); ++ fprintf(stderr, "%d\n", channel_buf[i]); + } + } + #endif +@@ -516,11 +516,11 @@ uint8_t sbrDecodeCoupleFrame(sbr_info *sbr, real_t *left_chan, real_t *right_cha + int i; + for (i = 0; i < 2048; i++) + { +- printf("%d\n", left_chan[i]); ++ fprintf(stderr, "%d\n", left_chan[i]); + } + for (i = 0; i < 2048; i++) + { +- printf("%d\n", right_chan[i]); ++ fprintf(stderr, "%d\n", right_chan[i]); + } + } + #endif +@@ -587,7 +587,7 @@ uint8_t sbrDecodeSingleFrame(sbr_info *sbr, real_t *channel, + int i; + for (i = 0; i < 2048; i++) + { +- printf("%d\n", channel[i]); ++ fprintf(stderr, "%d\n", channel[i]); + } + } + #endif +diff --git a/valib/3rdparty/faad/sbr_fbt.c b/valib/3rdparty/faad/sbr_fbt.c +index 5919c7b..edd11eb 100644 +--- a/valib/3rdparty/faad/sbr_fbt.c ++++ b/valib/3rdparty/faad/sbr_fbt.c +@@ -245,12 +245,12 @@ uint8_t master_frequency_table_fs0(sbr_info *sbr, uint8_t k0, uint8_t k2, + sbr->N_master = (min(sbr->N_master, 64)); + + #if 0 +- printf("f_master[%d]: ", nrBands); ++ fprintf(stderr, "f_master[%d]: ", nrBands); + for (k = 0; k <= nrBands; k++) + { +- printf("%d ", sbr->f_master[k]); ++ fprintf(stderr, "%d ", sbr->f_master[k]); + } +- printf("\n"); ++ fprintf(stderr, "\n"); + #endif + + return 0; +@@ -492,12 +492,12 @@ uint8_t master_frequency_table(sbr_info *sbr, uint8_t k0, uint8_t k2, + } + + #if 0 +- printf("f_master[%d]: ", sbr->N_master); ++ fprintf(stderr, "f_master[%d]: ", sbr->N_master); + for (k = 0; k <= sbr->N_master; k++) + { +- printf("%d ", sbr->f_master[k]); ++ fprintf(stderr, "%d ", sbr->f_master[k]); + } +- printf("\n"); ++ fprintf(stderr, "\n"); + #endif + + return 0; +@@ -544,22 +544,22 @@ uint8_t derived_frequency_table(sbr_info *sbr, uint8_t bs_xover_band, + } + + #if 0 +- printf("bs_freq_scale: %d\n", sbr->bs_freq_scale); +- printf("bs_limiter_bands: %d\n", sbr->bs_limiter_bands); +- printf("f_table_res[HI_RES][%d]: ", sbr->N_high); ++ fprintf(stderr, "bs_freq_scale: %d\n", sbr->bs_freq_scale); ++ fprintf(stderr, "bs_limiter_bands: %d\n", sbr->bs_limiter_bands); ++ fprintf(stderr, "f_table_res[HI_RES][%d]: ", sbr->N_high); + for (k = 0; k <= sbr->N_high; k++) + { +- printf("%d ", sbr->f_table_res[HI_RES][k]); ++ fprintf(stderr, "%d ", sbr->f_table_res[HI_RES][k]); + } +- printf("\n"); ++ fprintf(stderr, "\n"); + #endif + #if 0 +- printf("f_table_res[LO_RES][%d]: ", sbr->N_low); ++ fprintf(stderr, "f_table_res[LO_RES][%d]: ", sbr->N_low); + for (k = 0; k <= sbr->N_low; k++) + { +- printf("%d ", sbr->f_table_res[LO_RES][k]); ++ fprintf(stderr, "%d ", sbr->f_table_res[LO_RES][k]); + } +- printf("\n"); ++ fprintf(stderr, "\n"); + #endif + + sbr->N_Q = 0; +@@ -603,12 +603,12 @@ uint8_t derived_frequency_table(sbr_info *sbr, uint8_t bs_xover_band, + } + + #if 0 +- printf("f_table_noise[%d]: ", sbr->N_Q); ++ fprintf(stderr, "f_table_noise[%d]: ", sbr->N_Q); + for (k = 0; k <= sbr->N_Q; k++) + { +- printf("%d ", sbr->f_table_noise[k] - sbr->kx); ++ fprintf(stderr, "%d ", sbr->f_table_noise[k] - sbr->kx); + } +- printf("\n"); ++ fprintf(stderr, "\n"); + #endif + + return 0; +@@ -639,12 +639,12 @@ void limiter_frequency_table(sbr_info *sbr) + sbr->N_L[0] = 1; + + #if 0 +- printf("f_table_lim[%d][%d]: ", 0, sbr->N_L[0]); ++ fprintf(stderr, "f_table_lim[%d][%d]: ", 0, sbr->N_L[0]); + for (k = 0; k <= sbr->N_L[0]; k++) + { +- printf("%d ", sbr->f_table_lim[0][k]); ++ fprintf(stderr, "%d ", sbr->f_table_lim[0][k]); + } +- printf("\n"); ++ fprintf(stderr, "\n"); + #endif + + for (s = 1; s < 4; s++) +@@ -751,12 +751,12 @@ restart: + } + + #if 0 +- printf("f_table_lim[%d][%d]: ", s, sbr->N_L[s]); ++ fprintf(stderr, "f_table_lim[%d][%d]: ", s, sbr->N_L[s]); + for (k = 0; k <= sbr->N_L[s]; k++) + { +- printf("%d ", sbr->f_table_lim[s][k]); ++ fprintf(stderr, "%d ", sbr->f_table_lim[s][k]); + } +- printf("\n"); ++ fprintf(stderr, "\n"); + #endif + } + } +diff --git a/valib/3rdparty/faad/sbr_syntax.c b/valib/3rdparty/faad/sbr_syntax.c +index 6c9b97c..44372ad 100644 +--- a/valib/3rdparty/faad/sbr_syntax.c ++++ b/valib/3rdparty/faad/sbr_syntax.c +@@ -68,12 +68,12 @@ static void sinusoidal_coding(bitfile *ld, sbr_info *sbr, uint8_t ch); + static void sbr_reset(sbr_info *sbr) + { + #if 0 +- printf("%d\n", sbr->bs_start_freq_prev); +- printf("%d\n", sbr->bs_stop_freq_prev); +- printf("%d\n", sbr->bs_freq_scale_prev); +- printf("%d\n", sbr->bs_alter_scale_prev); +- printf("%d\n", sbr->bs_xover_band_prev); +- printf("%d\n\n", sbr->bs_noise_bands_prev); ++ fprintf(stderr, "%d\n", sbr->bs_start_freq_prev); ++ fprintf(stderr, "%d\n", sbr->bs_stop_freq_prev); ++ fprintf(stderr, "%d\n", sbr->bs_freq_scale_prev); ++ fprintf(stderr, "%d\n", sbr->bs_alter_scale_prev); ++ fprintf(stderr, "%d\n", sbr->bs_xover_band_prev); ++ fprintf(stderr, "%d\n\n", sbr->bs_noise_bands_prev); + #endif + + /* if these are different from the previous frame: Reset = 1 */ +@@ -325,24 +325,24 @@ static void sbr_header(bitfile *ld, sbr_info *sbr) + + #if 0 + /* print the header to screen */ +- printf("bs_amp_res: %d\n", sbr->bs_amp_res); +- printf("bs_start_freq: %d\n", sbr->bs_start_freq); +- printf("bs_stop_freq: %d\n", sbr->bs_stop_freq); +- printf("bs_xover_band: %d\n", sbr->bs_xover_band); ++ fprintf(stderr, "bs_amp_res: %d\n", sbr->bs_amp_res); ++ fprintf(stderr, "bs_start_freq: %d\n", sbr->bs_start_freq); ++ fprintf(stderr, "bs_stop_freq: %d\n", sbr->bs_stop_freq); ++ fprintf(stderr, "bs_xover_band: %d\n", sbr->bs_xover_band); + if (bs_header_extra_1) + { +- printf("bs_freq_scale: %d\n", sbr->bs_freq_scale); +- printf("bs_alter_scale: %d\n", sbr->bs_alter_scale); +- printf("bs_noise_bands: %d\n", sbr->bs_noise_bands); ++ fprintf(stderr, "bs_freq_scale: %d\n", sbr->bs_freq_scale); ++ fprintf(stderr, "bs_alter_scale: %d\n", sbr->bs_alter_scale); ++ fprintf(stderr, "bs_noise_bands: %d\n", sbr->bs_noise_bands); + } + if (bs_header_extra_2) + { +- printf("bs_limiter_bands: %d\n", sbr->bs_limiter_bands); +- printf("bs_limiter_gains: %d\n", sbr->bs_limiter_gains); +- printf("bs_interpol_freq: %d\n", sbr->bs_interpol_freq); +- printf("bs_smoothing_mode: %d\n", sbr->bs_smoothing_mode); ++ fprintf(stderr, "bs_limiter_bands: %d\n", sbr->bs_limiter_bands); ++ fprintf(stderr, "bs_limiter_gains: %d\n", sbr->bs_limiter_gains); ++ fprintf(stderr, "bs_interpol_freq: %d\n", sbr->bs_interpol_freq); ++ fprintf(stderr, "bs_smoothing_mode: %d\n", sbr->bs_smoothing_mode); + } +- printf("\n"); ++ fprintf(stderr, "\n"); + #endif + } + +@@ -806,7 +806,7 @@ static uint8_t sbr_grid(bitfile *ld, sbr_info *sbr, uint8_t ch) + #if 0 + for (env = 0; env < bs_num_env; env++) + { +- printf("freq_res[ch:%d][env:%d]: %d\n", ch, env, sbr->f[ch][env]); ++ fprintf(stderr, "freq_res[ch:%d][env:%d]: %d\n", ch, env, sbr->f[ch][env]); + } + #endif + +diff --git a/valib/3rdparty/faad/specrec.c b/valib/3rdparty/faad/specrec.c +index 011b80b..e601d0c 100644 +--- a/valib/3rdparty/faad/specrec.c ++++ b/valib/3rdparty/faad/specrec.c +@@ -455,8 +455,8 @@ static INLINE real_t iquant(int16_t q, const real_t *tab, uint8_t *error) + { + //#define IQUANT_PRINT + #ifdef IQUANT_PRINT +- //printf("0x%.8X\n", sgn * tab[q]); +- printf("%d\n", sgn * tab[q]); ++ //fprintf(stderr, "0x%.8X\n", sgn * tab[q]); ++ fprintf(stderr, "%d\n", sgn * tab[q]); + #endif + return sgn * tab[q]; + } +@@ -656,14 +656,14 @@ static uint8_t quant_to_spec(NeAACDecStruct *hDecoder, + + //#define SCFS_PRINT + #ifdef SCFS_PRINT +- printf("%d\n", spec_data[gindex+(win*win_inc)+j+bin+0]); +- printf("%d\n", spec_data[gindex+(win*win_inc)+j+bin+1]); +- printf("%d\n", spec_data[gindex+(win*win_inc)+j+bin+2]); +- printf("%d\n", spec_data[gindex+(win*win_inc)+j+bin+3]); +- //printf("0x%.8X\n", spec_data[gindex+(win*win_inc)+j+bin+0]); +- //printf("0x%.8X\n", spec_data[gindex+(win*win_inc)+j+bin+1]); +- //printf("0x%.8X\n", spec_data[gindex+(win*win_inc)+j+bin+2]); +- //printf("0x%.8X\n", spec_data[gindex+(win*win_inc)+j+bin+3]); ++ fprintf(stderr, "%d\n", spec_data[gindex+(win*win_inc)+j+bin+0]); ++ fprintf(stderr, "%d\n", spec_data[gindex+(win*win_inc)+j+bin+1]); ++ fprintf(stderr, "%d\n", spec_data[gindex+(win*win_inc)+j+bin+2]); ++ fprintf(stderr, "%d\n", spec_data[gindex+(win*win_inc)+j+bin+3]); ++ //fprintf(stderr, "0x%.8X\n", spec_data[gindex+(win*win_inc)+j+bin+0]); ++ //fprintf(stderr, "0x%.8X\n", spec_data[gindex+(win*win_inc)+j+bin+1]); ++ //fprintf(stderr, "0x%.8X\n", spec_data[gindex+(win*win_inc)+j+bin+2]); ++ //fprintf(stderr, "0x%.8X\n", spec_data[gindex+(win*win_inc)+j+bin+3]); + #endif + #endif + +@@ -1152,13 +1152,13 @@ uint8_t reconstruct_channel_pair(NeAACDecStruct *hDecoder, ic_stream *ics1, ic_s + int i; + for (i = 0; i < 1024; i++) + { +- //printf("%d\n", spec_coef1[i]); +- printf("0x%.8X\n", spec_coef1[i]); ++ //fprintf(stderr, "%d\n", spec_coef1[i]); ++ fprintf(stderr, "0x%.8X\n", spec_coef1[i]); + } + for (i = 0; i < 1024; i++) + { +- //printf("%d\n", spec_coef2[i]); +- printf("0x%.8X\n", spec_coef2[i]); ++ //fprintf(stderr, "%d\n", spec_coef2[i]); ++ fprintf(stderr, "0x%.8X\n", spec_coef2[i]); + } + } + #endif +@@ -1171,13 +1171,13 @@ uint8_t reconstruct_channel_pair(NeAACDecStruct *hDecoder, ic_stream *ics1, ic_s + int i; + for (i = 0; i < 1024; i++) + { +- printf("%d\n", spec_coef1[i]); +- //printf("0x%.8X\n", spec_coef1[i]); ++ fprintf(stderr, "%d\n", spec_coef1[i]); ++ //fprintf(stderr, "0x%.8X\n", spec_coef1[i]); + } + for (i = 0; i < 1024; i++) + { +- printf("%d\n", spec_coef2[i]); +- //printf("0x%.8X\n", spec_coef2[i]); ++ fprintf(stderr, "%d\n", spec_coef2[i]); ++ //fprintf(stderr, "0x%.8X\n", spec_coef2[i]); + } + } + #endif +diff --git a/valib/3rdparty/faad/syntax.c b/valib/3rdparty/faad/syntax.c +index f8e808c..185b8d2 100644 +--- a/valib/3rdparty/faad/syntax.c ++++ b/valib/3rdparty/faad/syntax.c +@@ -903,12 +903,12 @@ static uint8_t pulse_data(ic_stream *ics, pulse_info *pul, bitfile *ld) + pul->pulse_offset[i] = (uint8_t)faad_getbits(ld, 5 + DEBUGVAR(1,58,"pulse_data(): pulse_offset")); + #if 0 +- printf("%d\n", pul->pulse_offset[i]); ++ fprintf(stderr, "%d\n", pul->pulse_offset[i]); + #endif + pul->pulse_amp[i] = (uint8_t)faad_getbits(ld, 4 + DEBUGVAR(1,59,"pulse_data(): pulse_amp")); + #if 0 +- printf("%d\n", pul->pulse_amp[i]); ++ fprintf(stderr, "%d\n", pul->pulse_amp[i]); + #endif + } + +@@ -1089,7 +1089,7 @@ static uint8_t fill_element(NeAACDecStruct *hDecoder, bitfile *ld, drc_info *drc + #if 0 + if (hDecoder->sbr[sbr_ele]->ret > 0) + { +- printf("%s\n", NeAACDecGetErrorMessage(hDecoder->sbr[sbr_ele]->ret)); ++ fprintf(stderr, "%s\n", NeAACDecGetErrorMessage(hDecoder->sbr[sbr_ele]->ret)); + } + #endif + +@@ -1661,8 +1661,8 @@ static uint8_t section_data(NeAACDecStruct *hDecoder, ic_stream *ics, bitfile *l + sect_esc_val = (1<max_sfb); +- printf(" sect top cb\n"); ++ fprintf(stderr, "\ntotal sfb %d\n", ics->max_sfb); ++ fprintf(stderr, " sect top cb\n"); + #endif + + for (g = 0; g < ics->num_window_groups; g++) +@@ -1697,7 +1697,7 @@ static uint8_t section_data(NeAACDecStruct *hDecoder, ic_stream *ics, bitfile *l + return 32; + + #if 0 +- printf("%d\n", ics->sect_cb[g][i]); ++ fprintf(stderr, "%d\n", ics->sect_cb[g][i]); + #endif + + #ifndef DRM +@@ -1744,10 +1744,10 @@ static uint8_t section_data(NeAACDecStruct *hDecoder, ic_stream *ics, bitfile *l + ics->sect_end[g][i] = k + sect_len; + + #if 0 +- printf("%d\n", ics->sect_start[g][i]); ++ fprintf(stderr, "%d\n", ics->sect_start[g][i]); + #endif + #if 0 +- printf("%d\n", ics->sect_end[g][i]); ++ fprintf(stderr, "%d\n", ics->sect_end[g][i]); + #endif + + if (ics->window_sequence == EIGHT_SHORT_SEQUENCE) +@@ -1767,12 +1767,12 @@ static uint8_t section_data(NeAACDecStruct *hDecoder, ic_stream *ics, bitfile *l + { + ics->sfb_cb[g][sfb] = ics->sect_cb[g][i]; + #if 0 +- printf("%d\n", ics->sfb_cb[g][sfb]); ++ fprintf(stderr, "%d\n", ics->sfb_cb[g][sfb]); + #endif + } + + #if 0 +- printf(" %6d %6d %6d\n", ++ fprintf(stderr, " %6d %6d %6d\n", + i, + ics->sect_end[g][i], + ics->sect_cb[g][i]); +@@ -1790,12 +1790,12 @@ static uint8_t section_data(NeAACDecStruct *hDecoder, ic_stream *ics, bitfile *l + return 32; + } + #if 0 +- printf("%d\n", ics->num_sec[g]); ++ fprintf(stderr, "%d\n", ics->num_sec[g]); + #endif + } + + #if 0 +- printf("\n"); ++ fprintf(stderr, "\n"); + #endif + + return 0; +@@ -1832,7 +1832,7 @@ static uint8_t decode_scale_factors(ic_stream *ics, bitfile *ld) + ics->scale_factors[g][sfb] = 0; + //#define SF_PRINT + #ifdef SF_PRINT +- printf("%d\n", ics->scale_factors[g][sfb]); ++ fprintf(stderr, "%d\n", ics->scale_factors[g][sfb]); + #endif + break; + case INTENSITY_HCB: /* intensity books */ +@@ -1843,7 +1843,7 @@ static uint8_t decode_scale_factors(ic_stream *ics, bitfile *ld) + is_position += (t - 60); + ics->scale_factors[g][sfb] = is_position; + #ifdef SF_PRINT +- printf("%d\n", ics->scale_factors[g][sfb]); ++ fprintf(stderr, "%d\n", ics->scale_factors[g][sfb]); + #endif + + break; +@@ -1863,7 +1863,7 @@ static uint8_t decode_scale_factors(ic_stream *ics, bitfile *ld) + noise_energy += t; + ics->scale_factors[g][sfb] = noise_energy; + #ifdef SF_PRINT +- printf("%d\n", ics->scale_factors[g][sfb]); ++ fprintf(stderr, "%d\n", ics->scale_factors[g][sfb]); + #endif + #else + /* PNS not allowed in DRM */ +@@ -1884,7 +1884,7 @@ static uint8_t decode_scale_factors(ic_stream *ics, bitfile *ld) + return 4; + ics->scale_factors[g][sfb] = scale_factor; + #ifdef SF_PRINT +- printf("%d\n", ics->scale_factors[g][sfb]); ++ fprintf(stderr, "%d\n", ics->scale_factors[g][sfb]); + #endif + + break; +@@ -1946,7 +1946,7 @@ static void tns_data(ic_stream *ics, tns_info *tns, bitfile *ld) + tns->n_filt[w] = (uint8_t)faad_getbits(ld, n_filt_bits + DEBUGVAR(1,74,"tns_data(): n_filt")); + #if 0 +- printf("%d\n", tns->n_filt[w]); ++ fprintf(stderr, "%d\n", tns->n_filt[w]); + #endif + + if (tns->n_filt[w]) +@@ -1959,7 +1959,7 @@ static void tns_data(ic_stream *ics, tns_info *tns, bitfile *ld) + start_coef_bits = 3; + } + #if 0 +- printf("%d\n", tns->coef_res[w]); ++ fprintf(stderr, "%d\n", tns->coef_res[w]); + #endif + } + +@@ -1968,24 +1968,24 @@ static void tns_data(ic_stream *ics, tns_info *tns, bitfile *ld) + tns->length[w][filt] = (uint8_t)faad_getbits(ld, length_bits + DEBUGVAR(1,76,"tns_data(): length")); + #if 0 +- printf("%d\n", tns->length[w][filt]); ++ fprintf(stderr, "%d\n", tns->length[w][filt]); + #endif + tns->order[w][filt] = (uint8_t)faad_getbits(ld, order_bits + DEBUGVAR(1,77,"tns_data(): order")); + #if 0 +- printf("%d\n", tns->order[w][filt]); ++ fprintf(stderr, "%d\n", tns->order[w][filt]); + #endif + if (tns->order[w][filt]) + { + tns->direction[w][filt] = faad_get1bit(ld + DEBUGVAR(1,78,"tns_data(): direction")); + #if 0 +- printf("%d\n", tns->direction[w][filt]); ++ fprintf(stderr, "%d\n", tns->direction[w][filt]); + #endif + tns->coef_compress[w][filt] = faad_get1bit(ld + DEBUGVAR(1,79,"tns_data(): coef_compress")); + #if 0 +- printf("%d\n", tns->coef_compress[w][filt]); ++ fprintf(stderr, "%d\n", tns->coef_compress[w][filt]); + #endif + + coef_bits = start_coef_bits - tns->coef_compress[w][filt]; +@@ -1994,7 +1994,7 @@ static void tns_data(ic_stream *ics, tns_info *tns, bitfile *ld) + tns->coef[w][filt][i] = (uint8_t)faad_getbits(ld, coef_bits + DEBUGVAR(1,80,"tns_data(): coef")); + #if 0 +- printf("%d\n", tns->coef[w][filt][i]); ++ fprintf(stderr, "%d\n", tns->coef[w][filt][i]); + #endif + } + } +@@ -2104,20 +2104,20 @@ static uint8_t spectral_data(NeAACDecStruct *hDecoder, ic_stream *ics, bitfile * + int j; + for (j = ics->sect_sfb_offset[g][ics->sect_start[g][i]]; j < ics->sect_sfb_offset[g][ics->sect_end[g][i]]; j++) + { +- printf("%d\n", 0); ++ fprintf(stderr, "%d\n", 0); + } + } + #endif + //#define SFBO_PRINT + #ifdef SFBO_PRINT +- printf("%d\n", ics->sect_sfb_offset[g][ics->sect_start[g][i]]); ++ fprintf(stderr, "%d\n", ics->sect_sfb_offset[g][ics->sect_start[g][i]]); + #endif + p += (ics->sect_sfb_offset[g][ics->sect_end[g][i]] - + ics->sect_sfb_offset[g][ics->sect_start[g][i]]); + break; + default: + #ifdef SFBO_PRINT +- printf("%d\n", ics->sect_sfb_offset[g][ics->sect_start[g][i]]); ++ fprintf(stderr, "%d\n", ics->sect_sfb_offset[g][ics->sect_start[g][i]]); + #endif + for (k = ics->sect_sfb_offset[g][ics->sect_start[g][i]]; + k < ics->sect_sfb_offset[g][ics->sect_end[g][i]]; k += inc) +@@ -2129,7 +2129,7 @@ static uint8_t spectral_data(NeAACDecStruct *hDecoder, ic_stream *ics, bitfile * + int j; + for (j = p; j < p+inc; j++) + { +- printf("%d\n", spectral_data[j]); ++ fprintf(stderr, "%d\n", spectral_data[j]); + } + } + #endif +diff --git a/valib/3rdparty/faad/tns.c b/valib/3rdparty/faad/tns.c +index 6118652..bcaf661 100644 +--- a/valib/3rdparty/faad/tns.c ++++ b/valib/3rdparty/faad/tns.c +@@ -265,8 +265,8 @@ static void tns_ar_filter(real_t *spectrum, uint16_t size, int8_t inc, real_t *l + + //#define TNS_PRINT + #ifdef TNS_PRINT +- //printf("%d\n", y); +- printf("0x%.8X\n", y); ++ //fprintf(stderr, "%d\n", y); ++ fprintf(stderr, "0x%.8X\n", y); + #endif + } + } +diff --git a/valib/3rdparty/libmpg123/icy2utf8.c b/valib/3rdparty/libmpg123/icy2utf8.c +index 4e72162..abba33b 100644 +--- a/valib/3rdparty/libmpg123/icy2utf8.c ++++ b/valib/3rdparty/libmpg123/icy2utf8.c +@@ -428,7 +428,7 @@ main(void) + return (1); + } + +- printf("Result is:\t\343\200\214%s\343\200\215\n" ++ fprintf(stderr, "Result is:\t\343\200\214%s\343\200\215\n" + "\t\t\343\200\214%s\343\200\215\n", t, t2); + + free(t); +diff --git a/valib/3rdparty/libmpg123/optimize.c b/valib/3rdparty/libmpg123/optimize.c +index d5aae4c..1d8e9cd 100644 +--- a/valib/3rdparty/libmpg123/optimize.c ++++ b/valib/3rdparty/libmpg123/optimize.c +@@ -893,8 +893,8 @@ void check_decoders(void ) + getcpuflags(&cpu_flags); + if(cpu_i586(cpu_flags)) + { +- /* not yet: if(cpu_sse2(cpu_flags)) printf(" SSE2"); +- if(cpu_sse3(cpu_flags)) printf(" SSE3"); */ ++ /* not yet: if(cpu_sse2(cpu_flags)) fprintf(stderr, " SSE2"); ++ if(cpu_sse3(cpu_flags)) fprintf(stderr, " SSE3"); */ + #ifdef OPT_SSE + if(cpu_sse(cpu_flags)) *(d++) = decname[sse]; + #endif +diff --git a/valib/valib/auto_file.cpp b/valib/valib/auto_file.cpp +index a07ef3b..9fe23e2 100644 +--- a/valib/valib/auto_file.cpp ++++ b/valib/valib/auto_file.cpp +@@ -1,5 +1,6 @@ + #include + #include "auto_file.h" ++#include "win32/unicode_support.h" + + #if defined(_MSC_VER) && (_MSC_VER >= 1400) + +@@ -39,7 +40,7 @@ bool + AutoFile::open(const char *filename, const char *mode) + { + if (f) close(); +- f = fopen(filename, mode); ++ f = fopen_utf8(filename, mode); + if (f) + { + filesize = bad_size; +diff --git a/valib/valib/auto_file.h b/valib/valib/auto_file.h +index 189d082..4f0d4eb 100644 +--- a/valib/valib/auto_file.h ++++ b/valib/valib/auto_file.h +@@ -51,7 +51,7 @@ + + \fn AutoFile::AutoFile(const char *filename, const char *mode = "rb") + \param filename File name to open +- \param mode Open mode (equivalent to the mode at fopen()). ++ \param mode Open mode (equivalent to the mode at fopen_utf8()). + + Create and open a file. In case of failure, is_open() reports false. + +@@ -67,7 +67,7 @@ + + \fn bool AutoFile::open(const char *filename, const char *mode = "rb") + \param filename File name to open +- \param mode Open mode (equivalent to the mode at fopen()). ++ \param mode Open mode (equivalent to the mode at fopen_utf8()). + \return Returns true on success and false otherwise. + + Open the file. +diff --git a/valib/valib/log.cpp b/valib/valib/log.cpp +index f087760..6638e5c 100644 +--- a/valib/valib/log.cpp ++++ b/valib/valib/log.cpp +@@ -261,7 +261,7 @@ Log::clear_status() + // erase status line (if it is) + if (istatus) + { +- printf(" \r"); ++ fprintf(stderr, " \r"); + istatus = 0; + } + } +diff --git a/valib/valib/sink/sink_dsound.cpp b/valib/valib/sink/sink_dsound.cpp +index f22104d..8d8fcf7 100644 +--- a/valib/valib/sink/sink_dsound.cpp ++++ b/valib/valib/sink/sink_dsound.cpp +@@ -47,7 +47,7 @@ DSoundSink::open_dsound(HWND _hwnd, int _buf_size_ms, int _preload_ms, LPCGUID _ + + // Open DirectSound + +- if FAILED(DirectSoundCreate(_device, &ds, 0)) ++ if (1); //FAILED(DirectSoundCreate(_device, &ds, 0)) + return false; + + if (!_hwnd) _hwnd = GetForegroundWindow(); +diff --git a/valib/valib/version.h b/valib/valib/version.h +index 1b119dd..e69de29 100644 +--- a/valib/valib/version.h ++++ b/valib/valib/version.h +@@ -1,4 +0,0 @@ +-#define VALIB_HG_REVISION 1675 +-#define VALIB_HG_LOCAL_MODIFICATIONS 1 +-#define VALIB_HG_CHANGESET "217ad09860f6eb4acc7b0e53cdcbe8b99df2ed56" +-#define VALIB_HG_CHANGESET_SHORT "217ad09860f6" +diff --git a/valib/valib/win32/unicode_support.c b/valib/valib/win32/unicode_support.c +new file mode 100644 +index 0000000..f2a0a9e +--- /dev/null ++++ b/valib/valib/win32/unicode_support.c +@@ -0,0 +1,199 @@ ++/* Copyright (c) 2004-2012 LoRd_MuldeR ++ File: unicode_support.c ++ ++ This file was originally part of a patch included with LameXP, ++ released under the same license as the original audio tools. ++ ++ Redistribution and use in source and binary forms, with or without ++ modification, are permitted provided that the following conditions ++ are met: ++ ++ - Redistributions of source code must retain the above copyright ++ notice, this list of conditions and the following disclaimer. ++ ++ - Redistributions in binary form must reproduce the above copyright ++ notice, this list of conditions and the following disclaimer in the ++ documentation and/or other materials provided with the distribution. ++ ++ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ++ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ++ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ++ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR ++ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ++ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, ++ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR ++ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ++ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING ++ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ++ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++*/ ++#if defined WIN32 || defined _WIN32 || defined WIN64 || defined _WIN64 ++ ++#include "unicode_support.h" ++ ++#include ++#include ++ ++static UINT g_old_output_cp = ((UINT)-1); ++ ++char *utf16_to_utf8(const wchar_t *input) ++{ ++ char *Buffer; ++ int BuffSize = 0, Result = 0; ++ ++ BuffSize = WideCharToMultiByte(CP_UTF8, 0, input, -1, NULL, 0, NULL, NULL); ++ Buffer = (char*) malloc(sizeof(char) * BuffSize); ++ if(Buffer) ++ { ++ Result = WideCharToMultiByte(CP_UTF8, 0, input, -1, Buffer, BuffSize, NULL, NULL); ++ } ++ ++ return ((Result > 0) && (Result <= BuffSize)) ? Buffer : NULL; ++} ++ ++char *utf16_to_ansi(const wchar_t *input) ++{ ++ char *Buffer; ++ int BuffSize = 0, Result = 0; ++ ++ BuffSize = WideCharToMultiByte(CP_ACP, 0, input, -1, NULL, 0, NULL, NULL); ++ Buffer = (char*) malloc(sizeof(char) * BuffSize); ++ if(Buffer) ++ { ++ Result = WideCharToMultiByte(CP_ACP, 0, input, -1, Buffer, BuffSize, NULL, NULL); ++ } ++ ++ return ((Result > 0) && (Result <= BuffSize)) ? Buffer : NULL; ++} ++ ++wchar_t *utf8_to_utf16(const char *input) ++{ ++ wchar_t *Buffer; ++ int BuffSize = 0, Result = 0; ++ ++ BuffSize = MultiByteToWideChar(CP_UTF8, 0, input, -1, NULL, 0); ++ Buffer = (wchar_t*) malloc(sizeof(wchar_t) * BuffSize); ++ if(Buffer) ++ { ++ Result = MultiByteToWideChar(CP_UTF8, 0, input, -1, Buffer, BuffSize); ++ } ++ ++ return ((Result > 0) && (Result <= BuffSize)) ? Buffer : NULL; ++} ++ ++void init_commandline_arguments_utf8(int *argc, char ***argv) ++{ ++ int i, nArgs; ++ LPWSTR *szArglist; ++ ++ szArglist = CommandLineToArgvW(GetCommandLineW(), &nArgs); ++ ++ if(NULL == szArglist) ++ { ++ fprintf(stderr, "\nFATAL: CommandLineToArgvW failed\n\n"); ++ exit(-1); ++ } ++ ++ *argv = (char**) malloc(sizeof(char*) * nArgs); ++ *argc = nArgs; ++ ++ if(NULL == *argv) ++ { ++ fprintf(stderr, "\nFATAL: Malloc failed\n\n"); ++ exit(-1); ++ } ++ ++ for(i = 0; i < nArgs; i++) ++ { ++ (*argv)[i] = utf16_to_utf8(szArglist[i]); ++ if(NULL == (*argv)[i]) ++ { ++ fprintf(stderr, "\nFATAL: utf16_to_utf8 failed\n\n"); ++ exit(-1); ++ } ++ } ++ ++ LocalFree(szArglist); ++} ++ ++void free_commandline_arguments_utf8(int *argc, char ***argv) ++{ ++ int i = 0; ++ ++ if(*argv != NULL) ++ { ++ for(i = 0; i < *argc; i++) ++ { ++ if((*argv)[i] != NULL) ++ { ++ free((*argv)[i]); ++ (*argv)[i] = NULL; ++ } ++ } ++ free(*argv); ++ *argv = NULL; ++ } ++} ++ ++FILE *fopen_utf8(const char *filename_utf8, const char *mode_utf8) ++{ ++ FILE *ret = NULL; ++ wchar_t *filename_utf16 = utf8_to_utf16(filename_utf8); ++ wchar_t *mode_utf16 = utf8_to_utf16(mode_utf8); ++ ++ if(filename_utf16 && mode_utf16) ++ { ++ FILE *fh = NULL; ++ int err = _wfopen_s(&fh, filename_utf16, mode_utf16); ++ if(err == 0) ret = fh; ++ } ++ ++ if(filename_utf16) free(filename_utf16); ++ if(mode_utf16) free(mode_utf16); ++ ++ return ret; ++} ++ ++int stat_utf8(const char *path_utf8, struct _stat *buf) ++{ ++ int ret = -1; ++ ++ wchar_t *path_utf16 = utf8_to_utf16(path_utf8); ++ if(path_utf16) ++ { ++ ret = _wstat(path_utf16, buf); ++ free(path_utf16); ++ } ++ ++ return ret; ++} ++ ++int unlink_utf8(const char *path_utf8) ++{ ++ int ret = -1; ++ ++ wchar_t *path_utf16 = utf8_to_utf16(path_utf8); ++ if(path_utf16) ++ { ++ ret = _wunlink(path_utf16); ++ free(path_utf16); ++ } ++ ++ return ret; ++} ++ ++void init_console_utf8(void) ++{ ++ g_old_output_cp = GetConsoleOutputCP(); ++ SetConsoleOutputCP(CP_UTF8); ++} ++ ++void uninit_console_utf8(void) ++{ ++ if(g_old_output_cp != ((UINT)-1)) ++ { ++ SetConsoleOutputCP(g_old_output_cp); ++ } ++} ++ ++#endif +\ No newline at end of file +diff --git a/valib/valib/win32/unicode_support.cpp b/valib/valib/win32/unicode_support.cpp +new file mode 100644 +index 0000000..13f89ba +--- /dev/null ++++ b/valib/valib/win32/unicode_support.cpp +@@ -0,0 +1,86 @@ ++#include "unicode_support.h" ++ ++#include ++ ++char *utf16_to_utf8(const wchar_t *input) ++{ ++ char *Buffer; ++ int BuffSize, Result; ++ ++ BuffSize = WideCharToMultiByte(CP_UTF8, 0, input, -1, NULL, 0, NULL, NULL); ++ Buffer = new char[BuffSize]; //(char*) malloc(sizeof(char) * BuffSize); ++ Result = WideCharToMultiByte(CP_UTF8, 0, input, -1, Buffer, BuffSize, NULL, NULL); ++ ++ return ((Result > 0) && (Result <= BuffSize)) ? Buffer : NULL; ++} ++ ++wchar_t *utf8_to_utf16(const char *input) ++{ ++ wchar_t *Buffer; ++ int BuffSize, Result; ++ ++ BuffSize = MultiByteToWideChar(CP_UTF8, 0, input, -1, NULL, 0); ++ Buffer = new wchar_t[BuffSize]; //(wchar_t*) malloc(sizeof(wchar_t) * BuffSize); ++ Result = MultiByteToWideChar(CP_UTF8, 0, input, -1, Buffer, BuffSize); ++ ++ return ((Result > 0) && (Result <= BuffSize)) ? Buffer : NULL; ++} ++ ++void init_commandline_arguments_utf8(int *argc, char ***argv) ++{ ++ int i, nArgs; ++ LPWSTR *szArglist; ++ ++ szArglist = CommandLineToArgvW(GetCommandLineW(), &nArgs); ++ ++ if(NULL == szArglist) ++ { ++ fprintf(stderr, "\nFATAL: CommandLineToArgvW failed\n\n"); ++ exit(-1); ++ } ++ ++ *argv = new char*[nArgs]; //malloc(sizeof(char*) * nArgs); ++ *argc = nArgs; ++ ++ for(i = 0; i < nArgs; i++) ++ { ++ (*argv)[i] = utf16_to_utf8(szArglist[i]); ++ } ++ ++ LocalFree(szArglist); ++} ++ ++void free_commandline_arguments_utf8(int *argc, char ***argv) ++{ ++ if(*argv != NULL) ++ { ++ for(int i = 0; i < *argc; i++) ++ { ++ if((*argv)[i] != NULL) ++ { ++ delete [] ((*argv)[i]); ++ (*argv)[i] = NULL; ++ } ++ } ++ delete [] (*argv); ++ *argv = NULL; ++ } ++} ++ ++FILE *fopen_utf8(const char *filename_utf8, const char *mode_utf8) ++{ ++ FILE *ret = NULL; ++ ++ wchar_t *filename_utf16 = utf8_to_utf16(filename_utf8); ++ wchar_t *mode_utf16 = utf8_to_utf16(mode_utf8); ++ ++ if(filename_utf16 && mode_utf16) ++ { ++ ret = _wfopen(filename_utf16, mode_utf16); ++ } ++ ++ if(filename_utf16) delete [] filename_utf16; ++ if(mode_utf16) delete [] mode_utf16; ++ ++ return ret; ++} +diff --git a/valib/valib/win32/unicode_support.h b/valib/valib/win32/unicode_support.h +new file mode 100644 +index 0000000..41c2783 +--- /dev/null ++++ b/valib/valib/win32/unicode_support.h +@@ -0,0 +1,57 @@ ++/* Copyright (c) 2004-2012 LoRd_MuldeR ++ File: unicode_support.h ++ ++ This file was originally part of a patch included with LameXP, ++ released under the same license as the original audio tools. ++ ++ Redistribution and use in source and binary forms, with or without ++ modification, are permitted provided that the following conditions ++ are met: ++ ++ - Redistributions of source code must retain the above copyright ++ notice, this list of conditions and the following disclaimer. ++ ++ - Redistributions in binary form must reproduce the above copyright ++ notice, this list of conditions and the following disclaimer in the ++ documentation and/or other materials provided with the distribution. ++ ++ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ++ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ++ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ++ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR ++ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ++ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, ++ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR ++ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ++ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING ++ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ++ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++*/ ++#ifndef UNICODE_SUPPORT_H_INCLUDED ++#define UNICODE_SUPPORT_H_INCLUDED ++ ++#include ++#include ++ ++#define WIN_UNICODE 1 ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++char *utf16_to_utf8(const wchar_t *input); ++char *utf16_to_ansi(const wchar_t *input); ++wchar_t *utf8_to_utf16(const char *input); ++void init_commandline_arguments_utf8(int *argc, char ***argv); ++void free_commandline_arguments_utf8(int *argc, char ***argv); ++FILE *fopen_utf8(const char *filename_utf8, const char *mode_utf8); ++int stat_utf8(const char *path_utf8, struct _stat *buf); ++int unlink_utf8(const char *path_utf8); ++void init_console_utf8(void); ++void uninit_console_utf8(void); ++ ++#ifdef __cplusplus ++} ++#endif ++ ++#endif +\ No newline at end of file diff --git a/etc/Patches/deprecated/!_Readme.txt b/etc/Patches/deprecated/!_Readme.txt new file mode 100644 index 00000000..4811018b --- /dev/null +++ b/etc/Patches/deprecated/!_Readme.txt @@ -0,0 +1,14 @@ +LameXP third-party patches +-------------------------- + +This directory contains the modifications (as Unified Diff's) that have been applied to third-party audio tools as part of the development of LameXP. + +Most of these modifications were required to fix Unicode support on the Windows platform and/or to properly flush the STDOUT for "real-time" progress updates. + +Other modifications were required to make the third-party audio tools compile+link properly in the build environment used in the development of LameXP. + +All patches provided here are Copyright (c) LoRd_MuldeR 2004-2013; each patch is released under the very same license as the original tool. + +Please note that the patches provided here have NOT been approved by the original developers of the third-party audio tools - use them at your own risk! + +They are distributed in the hope that they will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of FITNESS FOR A PARTICULAR PURPOSE. diff --git a/etc/Patches/AC3Filter-valdec-v0.31b-UTF8+STDOUT+Flush.V1.diff b/etc/Patches/deprecated/AC3Filter-valdec-v0.31b-UTF8+STDOUT+Flush.V1.diff similarity index 100% rename from etc/Patches/AC3Filter-valdec-v0.31b-UTF8+STDOUT+Flush.V1.diff rename to etc/Patches/deprecated/AC3Filter-valdec-v0.31b-UTF8+STDOUT+Flush.V1.diff diff --git a/res/tools/valdec.exe b/res/tools/valdec.exe index 87d0f213..a98c7c9c 100644 Binary files a/res/tools/valdec.exe and b/res/tools/valdec.exe differ diff --git a/src/Config.h b/src/Config.h index b166b959..0f522c43 100644 --- a/src/Config.h +++ b/src/Config.h @@ -29,8 +29,8 @@ #define VER_LAMEXP_MINOR_HI 0 #define VER_LAMEXP_MINOR_LO 7 #define VER_LAMEXP_TYPE Beta -#define VER_LAMEXP_PATCH 4 -#define VER_LAMEXP_BUILD 1240 +#define VER_LAMEXP_PATCH 5 +#define VER_LAMEXP_BUILD 1243 /////////////////////////////////////////////////////////////////////////////// // Tool versions (minimum expected versions!) diff --git a/src/Decoder_AC3.cpp b/src/Decoder_AC3.cpp index 6ce65f1c..d003aefe 100644 --- a/src/Decoder_AC3.cpp +++ b/src/Decoder_AC3.cpp @@ -57,7 +57,7 @@ bool AC3Decoder::decode(const QString &sourceFile, const QString &outputFile, vo bool bTimeout = false; bool bAborted = false; - QRegExp regExp("\\[(\\s*)(\\d+)\\.(\\d+)%\\]"); + QRegExp regExp("\\b(\\s*)(\\d+)\\.(\\d+)%(\\s+)Frames"); while(process.state() != QProcess::NotRunning) { @@ -121,6 +121,13 @@ bool AC3Decoder::isFormatSupported(const QString &containerType, const QString & return true; } } + if(containerType.compare("E-AC-3", Qt::CaseInsensitive) == 0) + { + if(formatType.compare("E-AC-3", Qt::CaseInsensitive) == 0) + { + return true; + } + } else if(containerType.compare("DTS", Qt::CaseInsensitive) == 0) { if(formatType.compare("DTS", Qt::CaseInsensitive) == 0) @@ -130,7 +137,7 @@ bool AC3Decoder::isFormatSupported(const QString &containerType, const QString & } else if(containerType.compare("Wave", Qt::CaseInsensitive) == 0) { - if(formatType.compare("AC-3", Qt::CaseInsensitive) == 0 || formatType.compare("DTS", Qt::CaseInsensitive) == 0) + if(formatType.compare("AC-3", Qt::CaseInsensitive) == 0 || formatType.compare("E-AC-3", Qt::CaseInsensitive) == 0 || formatType.compare("DTS", Qt::CaseInsensitive) == 0) { return true; } @@ -141,6 +148,6 @@ bool AC3Decoder::isFormatSupported(const QString &containerType, const QString & QStringList AC3Decoder::supportedTypes(void) { - return QStringList() << "AC-3 / ATSC A/52 (*.ac3 *.wav)" << "Digital Theater System (*.dts)"; + return QStringList() << "AC-3 / ATSC A/52 (*.ac3 *.eac3 *.wav)" << "Digital Theater System (*.dts)"; } diff --git a/src/Tools.h b/src/Tools.h index 57b5df0e..2c46420b 100644 --- a/src/Tools.h +++ b/src/Tools.h @@ -44,45 +44,46 @@ static const struct { - char *pcHash; - unsigned int uiCpuType; - char *pcName; - unsigned int uiVersion; + const char *pcHash; + const unsigned int uiCpuType; + const char *pcName; + const unsigned int uiVersion; + const char *pcVersTag; } g_lamexp_tools[] = { - {"4870d7abbc3995dc5ca82147ee33f28c3ee7dc1986fbb0131912effe10c1a209d3f983c5dffd963c31707a5ce39611b4", CPU_TYPE_X86_GEN, "aften.i386.exe", 8}, - {"fc4e38b11a0f52b68cca79aa2d71c02180b70eb0e592923dee4f0ccf766f1006642369b2178f6a61d1c2506446cc442d", CPU_TYPE_X86_SSE, "aften.sse2.exe", 8}, - {"d053d2a87f31a6a8107d9963b0b5f76c4c89083ee315064b86b3b88577659add167cd408bebfd188937b9314ad49ee41", CPU_TYPE_X64_ALL, "aften.x64.exe", 8}, - {"4558728999a05f12fe88566e8308cba0ada200814c2a1bfe2507f49faf8f3994b0d52a829148f5c6321d24faa2718439", CPU_TYPE_ALL_ALL, "avs2wav.exe", 13}, - {"07834b1b8ecac2f3db79ad048005eca3a284cb759e15d399eb1a560a403122e20db5f08e60319759b8463aeef2410d02", CPU_TYPE_ALL_ALL, "dcaenc.exe", 20120419}, - {"7c249f507b96967bedabdd7e631638807a7595ebff58eaaadf63530783d515eda9660bc2b1a0457fddae7e3eaef8a074", CPU_TYPE_ALL_ALL, "elevator.exe", UINT_MAX}, - {"bbc262cfe9c48633e5f1780d30347d7663075cfd7bdc76347cce3b1191d62f788d9b91bc63dffae2f66d1759d5849e92", CPU_TYPE_ALL_ALL, "faad.exe", 27}, - {"4f3a905b5b77ea49a7b302ab0a028ab115270e1b285caafbc35013ffc1de64bdec4488b561ef497c4befae952759a9dd", CPU_TYPE_ALL_ALL, "flac.exe", 121}, - {"52e213df29da215c59e82cd4fefb290aa2842280383fd59ffaa06cb2c58f1081b0dbd7b6e57f69fe3a872b6e7dd0c1cf", CPU_TYPE_ALL_ALL, "gpgv.exe", 1413}, - {"19c9dbe9089491c1f59ae48016d95d4336c4d3743577db4e782d8b59eca3b2bda6ed8f92f9004f88f434935b79e4974b", CPU_TYPE_ALL_ALL, "gpgv.gpg", UINT_MAX}, - {"53cfab3896a47d48f523315f475fa07856d468ad1aefcc8cce19c18cdf509e2f92840dab92a442995df36d941cb7a6ca", CPU_TYPE_ALL_GEN, "lame.i386.exe", 3995}, - {"9511e7ef2ad10de05386eedf7f14d637edab894a53dacd2f8f15c6f8ed582f12c25fb5bf88438e62c46b8eb92e7634b2", CPU_TYPE_ALL_SSE, "lame.sse2.exe", 3995}, - {"c844c21fc734465bb7e40f05b892d1ca93ca4746c493501c07c12a2413d66866a5f9a8091efe7de88bd4da9eb0939f66", CPU_TYPE_ALL_ALL, "mac.exe", 411}, - {"aeb7917151bf9ce4e30dbff78fcdd4b050b55a3721d8e0ce01092460dd1ed8f8f6e881fbab47953c0d692fcad4cbb2c4", CPU_TYPE_X86_ALL, "mediainfo.i386.exe", 761}, - {"acc4875b240979b0fad0cca0ad951b7eb10418c6a7db208ed25c3c9868fe9cd1cca1f10b12b72c026bfbd0837b63dcb8", CPU_TYPE_X64_ALL, "mediainfo.x64.exe", 761}, - {"7e6346a057634ff07b2e1f427035324f7f02100cc996425990f87f71d767fce4c7b101588c7d944ba49cb2d7e51c9bdb", CPU_TYPE_ALL_ALL, "mpcdec.exe", 475}, - {"bcd609cddf15c940035de4db774f0bfc5066d4633a8353becca72674a2b4f28b158d43faac9655ee15c50181079f1caa", CPU_TYPE_ALL_ALL, "mpg123.exe", 1144}, - {"75c39861ac82d7fc8392fbddff9f5b785e7abee29f8c1843706a9b225966e05ef4be2a160f98f389beaf5238c5de121c", CPU_TYPE_ALL_ALL, "oggdec.exe", UINT_MAX}, - {"8b68461f38410421be30cc895e94e63184daa6f2cb20eb110b66b376b48141838a09bc920efeb1c49de79dd0770ce41b", CPU_TYPE_X86_GEN, "oggenc2.i386.exe", 287603}, - {"20648f83cc637cada481143d48c437ced8423e9a0aae01dbce860cd97fb1ce4000e314f3a5395d1eafd8e154a8e74d08", CPU_TYPE_X86_SSE, "oggenc2.sse2.exe", 287603}, - {"e1da48055a57bae41d6a1a0dc08b86831c121e85c07aa60aae4196997b166a08cfb7265d9f0f289f445ad73bce28d81f", CPU_TYPE_X64_ALL, "oggenc2.x64.exe", 287603}, - {"e3524dc0a600d26a81dd17fe537ab367d9e6a045c8cab072b5dad35245b6369ac63cd76b7d4347cb541d4b7ea7e9b7fa", CPU_TYPE_ALL_ALL, "opusdec.exe", 20130209}, - {"7edf5bf3fe56d73d7b0ddfae5fea4b82b488d8fc5250b03eb3d1d8e5cdcb68dabe38b53ea2dca52794e062f2e6609168", CPU_TYPE_ALL_ALL, "opusenc.exe", 20130209}, - {"bdfa8dec142b6327a33af6bb314d7beb924588d1b73f2ef3f46b31fa6046fe2f4e64ca78b025b7eb9290a78320e2aa57", CPU_TYPE_ALL_ALL, "refalac.exe", 56}, - {"d041b60de6c5c6e77cbad84440db57bbeb021af59dd0f7bebd3ede047d9e2ddc2a0c14179472687ba91063743d23e337", CPU_TYPE_ALL_ALL, "shorten.exe", 361}, - {"cf988bfbb53e77a1dcaefbd5c08789abb4d67cc210723f1f8ba7850f17d34ebb7d0c426b67b963e7d2290a2744865244", CPU_TYPE_ALL_ALL, "sox.exe", 1441}, + {"4870d7abbc3995dc5ca82147ee33f28c3ee7dc1986fbb0131912effe10c1a209d3f983c5dffd963c31707a5ce39611b4", CPU_TYPE_X86_GEN, "aften.i386.exe", 8, ""}, + {"fc4e38b11a0f52b68cca79aa2d71c02180b70eb0e592923dee4f0ccf766f1006642369b2178f6a61d1c2506446cc442d", CPU_TYPE_X86_SSE, "aften.sse2.exe", 8, ""}, + {"d053d2a87f31a6a8107d9963b0b5f76c4c89083ee315064b86b3b88577659add167cd408bebfd188937b9314ad49ee41", CPU_TYPE_X64_ALL, "aften.x64.exe", 8, ""}, + {"4558728999a05f12fe88566e8308cba0ada200814c2a1bfe2507f49faf8f3994b0d52a829148f5c6321d24faa2718439", CPU_TYPE_ALL_ALL, "avs2wav.exe", 13, ""}, + {"07834b1b8ecac2f3db79ad048005eca3a284cb759e15d399eb1a560a403122e20db5f08e60319759b8463aeef2410d02", CPU_TYPE_ALL_ALL, "dcaenc.exe", 20120419, ""}, + {"7c249f507b96967bedabdd7e631638807a7595ebff58eaaadf63530783d515eda9660bc2b1a0457fddae7e3eaef8a074", CPU_TYPE_ALL_ALL, "elevator.exe", UINT_MAX, ""}, + {"bbc262cfe9c48633e5f1780d30347d7663075cfd7bdc76347cce3b1191d62f788d9b91bc63dffae2f66d1759d5849e92", CPU_TYPE_ALL_ALL, "faad.exe", 27, ""}, + {"4f3a905b5b77ea49a7b302ab0a028ab115270e1b285caafbc35013ffc1de64bdec4488b561ef497c4befae952759a9dd", CPU_TYPE_ALL_ALL, "flac.exe", 121, ""}, + {"52e213df29da215c59e82cd4fefb290aa2842280383fd59ffaa06cb2c58f1081b0dbd7b6e57f69fe3a872b6e7dd0c1cf", CPU_TYPE_ALL_ALL, "gpgv.exe", 1413, ""}, + {"19c9dbe9089491c1f59ae48016d95d4336c4d3743577db4e782d8b59eca3b2bda6ed8f92f9004f88f434935b79e4974b", CPU_TYPE_ALL_ALL, "gpgv.gpg", UINT_MAX, ""}, + {"53cfab3896a47d48f523315f475fa07856d468ad1aefcc8cce19c18cdf509e2f92840dab92a442995df36d941cb7a6ca", CPU_TYPE_ALL_GEN, "lame.i386.exe", 3995, "Final"}, + {"9511e7ef2ad10de05386eedf7f14d637edab894a53dacd2f8f15c6f8ed582f12c25fb5bf88438e62c46b8eb92e7634b2", CPU_TYPE_ALL_SSE, "lame.sse2.exe", 3995, "Final"}, + {"c844c21fc734465bb7e40f05b892d1ca93ca4746c493501c07c12a2413d66866a5f9a8091efe7de88bd4da9eb0939f66", CPU_TYPE_ALL_ALL, "mac.exe", 411, ""}, + {"aeb7917151bf9ce4e30dbff78fcdd4b050b55a3721d8e0ce01092460dd1ed8f8f6e881fbab47953c0d692fcad4cbb2c4", CPU_TYPE_X86_ALL, "mediainfo.i386.exe", 761, ""}, + {"acc4875b240979b0fad0cca0ad951b7eb10418c6a7db208ed25c3c9868fe9cd1cca1f10b12b72c026bfbd0837b63dcb8", CPU_TYPE_X64_ALL, "mediainfo.x64.exe", 761, ""}, + {"7e6346a057634ff07b2e1f427035324f7f02100cc996425990f87f71d767fce4c7b101588c7d944ba49cb2d7e51c9bdb", CPU_TYPE_ALL_ALL, "mpcdec.exe", 475, ""}, + {"bcd609cddf15c940035de4db774f0bfc5066d4633a8353becca72674a2b4f28b158d43faac9655ee15c50181079f1caa", CPU_TYPE_ALL_ALL, "mpg123.exe", 1144, ""}, + {"75c39861ac82d7fc8392fbddff9f5b785e7abee29f8c1843706a9b225966e05ef4be2a160f98f389beaf5238c5de121c", CPU_TYPE_ALL_ALL, "oggdec.exe", UINT_MAX, ""}, + {"8b68461f38410421be30cc895e94e63184daa6f2cb20eb110b66b376b48141838a09bc920efeb1c49de79dd0770ce41b", CPU_TYPE_X86_GEN, "oggenc2.i386.exe", 287603, "Beta"}, + {"20648f83cc637cada481143d48c437ced8423e9a0aae01dbce860cd97fb1ce4000e314f3a5395d1eafd8e154a8e74d08", CPU_TYPE_X86_SSE, "oggenc2.sse2.exe", 287603, "Beta"}, + {"e1da48055a57bae41d6a1a0dc08b86831c121e85c07aa60aae4196997b166a08cfb7265d9f0f289f445ad73bce28d81f", CPU_TYPE_X64_ALL, "oggenc2.x64.exe", 287603, "Beta"}, + {"e3524dc0a600d26a81dd17fe537ab367d9e6a045c8cab072b5dad35245b6369ac63cd76b7d4347cb541d4b7ea7e9b7fa", CPU_TYPE_ALL_ALL, "opusdec.exe", 20130209, ""}, + {"7edf5bf3fe56d73d7b0ddfae5fea4b82b488d8fc5250b03eb3d1d8e5cdcb68dabe38b53ea2dca52794e062f2e6609168", CPU_TYPE_ALL_ALL, "opusenc.exe", 20130209, ""}, + {"bdfa8dec142b6327a33af6bb314d7beb924588d1b73f2ef3f46b31fa6046fe2f4e64ca78b025b7eb9290a78320e2aa57", CPU_TYPE_ALL_ALL, "refalac.exe", 56, ""}, + {"d041b60de6c5c6e77cbad84440db57bbeb021af59dd0f7bebd3ede047d9e2ddc2a0c14179472687ba91063743d23e337", CPU_TYPE_ALL_ALL, "shorten.exe", 361, ""}, + {"cf988bfbb53e77a1dcaefbd5c08789abb4d67cc210723f1f8ba7850f17d34ebb7d0c426b67b963e7d2290a2744865244", CPU_TYPE_ALL_ALL, "sox.exe", 1441, ""}, {"5a4261e1b41a59d1a5bc92e1d2766422a67454d77e06ea29af392811b7b4704e0f3e494ab9cb6375ce9e39257867c5ed", CPU_TYPE_ALL_ALL, "speexdec.exe", 12}, - {"a83628880da0b7519ec368a74a92da5a5099d8d46aa0583131f92d7321f47c9e16a1841b2a3fb8ffcca7205ef4b1bb0a", CPU_TYPE_ALL_ALL, "tta.exe", 21}, - {"c07bbd790e2a9d8b694b44e33d47ee86740306049c8ca6dc0d7ecc73e6b18ad6cd77ad1d5865e4b4928cd8260be37e1d", CPU_TYPE_ALL_ALL, "valdec.exe", 31}, - {"c472d443846fec57b2568c6e690736703497abc22245f08fb0e609189fd1c7aa2d670a7f42d5e05de6d7371de39dcf1a", CPU_TYPE_ALL_ALL, "wget.exe", 1114}, - {"572b9448bf4a338ecb9727951fdfcc5a219cc69896695cc96b9f6b083690e339910e41558968264a38992e45f2be152c", CPU_TYPE_ALL_ALL, "wma2wav.exe", 20111001}, - {"71777dfebed90b86bbfe6b03a0f16f47d4a9cdca46fe319f7ca9ab88ab1fa7b9a3647b5aeb1d2b36299850fce79bf063", CPU_TYPE_ALL_ALL, "wupdate.exe", 20130203}, - {"b0a564e842f2cda6b67fdd09aaa66294c775bb3eb419debf311fe54eb76ea468e99917dc3ad8ed4734fcdb59034a13cb", CPU_TYPE_ALL_ALL, "wvunpack.exe", 4601}, - {NULL, NULL, NULL, NULL} + {"a83628880da0b7519ec368a74a92da5a5099d8d46aa0583131f92d7321f47c9e16a1841b2a3fb8ffcca7205ef4b1bb0a", CPU_TYPE_ALL_ALL, "tta.exe", 21, ""}, + {"958d469c49a5bf833bcbcb14be24aaafdf21f34190b1e286a5edbb610bcd341b4e93540d39a7d5d998081bc9418061b6", CPU_TYPE_ALL_ALL, "valdec.exe", 140, "a"}, + {"c472d443846fec57b2568c6e690736703497abc22245f08fb0e609189fd1c7aa2d670a7f42d5e05de6d7371de39dcf1a", CPU_TYPE_ALL_ALL, "wget.exe", 1114, ""}, + {"572b9448bf4a338ecb9727951fdfcc5a219cc69896695cc96b9f6b083690e339910e41558968264a38992e45f2be152c", CPU_TYPE_ALL_ALL, "wma2wav.exe", 20111001, ""}, + {"71777dfebed90b86bbfe6b03a0f16f47d4a9cdca46fe319f7ca9ab88ab1fa7b9a3647b5aeb1d2b36299850fce79bf063", CPU_TYPE_ALL_ALL, "wupdate.exe", 20130203, ""}, + {"b0a564e842f2cda6b67fdd09aaa66294c775bb3eb419debf311fe54eb76ea468e99917dc3ad8ed4734fcdb59034a13cb", CPU_TYPE_ALL_ALL, "wvunpack.exe", 4601, ""}, + {NULL, NULL, NULL, NULL, NULL} };