Index: /libmpc/branches/r2d/CMakeLists.txt
===================================================================
--- /libmpc/branches/r2d/CMakeLists.txt	(revision 161)
+++ /libmpc/branches/r2d/CMakeLists.txt	(revision 162)
@@ -1,4 +1,19 @@
-project(mppenc C)
-set(CMAKE_VERBOSE_MAKEFILE true)
-set(CMAKE_C_FLAGS "-O1 -fomit-frame-pointer -pipe") 
-add_subdirectory(src)
+CMAKE_MINIMUM_REQUIRED(VERSION 2.4)
+include(TestBigEndian)
+
+project(libmpc C)
+
+set(CMAKE_VERBOSE_MAKEFILE false)
+TEST_BIG_ENDIAN(WORDS_BIGENDIAN)
+
+if(NOT MSVC)
+set(CMAKE_C_FLAGS "-O2 -fomit-frame-pointer -pipe")
+endif(NOT MSVC)
+
+add_subdirectory(common)
+add_subdirectory(libmpcdec)
+add_subdirectory(libmpcpsy)
+add_subdirectory(libmpcenc)
+add_subdirectory(libwavformat)
+add_subdirectory(mpcdec)
+add_subdirectory(mppenc)
Index: /libmpc/branches/r2d/common/CMakeLists.txt
===================================================================
--- /libmpc/branches/r2d/common/CMakeLists.txt	(revision 162)
+++ /libmpc/branches/r2d/common/CMakeLists.txt	(revision 162)
@@ -0,0 +1,1 @@
+add_library(common_static STATIC crc32 huffman)
Index: /libmpc/branches/r2d/libmpcdec/CMakeLists.txt
===================================================================
--- /libmpc/branches/r2d/libmpcdec/CMakeLists.txt	(revision 162)
+++ /libmpc/branches/r2d/libmpcdec/CMakeLists.txt	(revision 162)
@@ -0,0 +1,5 @@
+include_directories(${libmpc_SOURCE_DIR}/include)
+include_directories(${libmpc_SOURCE_DIR}/common)
+link_directories(${libmpc_BINARY_DIR}/common)
+add_library(mpcdec_static STATIC huffman mpc_decoder mpc_reader streaminfo mpc_bits_reader mpc_demux requant synth_filter)
+target_link_libraries(mpcdec_static common_static)
Index: /libmpc/branches/r2d/libmpcenc/CMakeLists.txt
===================================================================
--- /libmpc/branches/r2d/libmpcenc/CMakeLists.txt	(revision 162)
+++ /libmpc/branches/r2d/libmpcenc/CMakeLists.txt	(revision 162)
@@ -0,0 +1,5 @@
+include_directories(${libmpc_SOURCE_DIR}/include)
+include_directories(${libmpc_SOURCE_DIR}/common)
+link_directories(${libmpc_BINARY_DIR}/common)
+add_library(mpcenc_static STATIC analy_filter bitstream encode_sv7 huffsv7 quant)
+target_link_libraries(mpcenc_static common_static)
Index: /libmpc/branches/r2d/libmpcpsy/CMakeLists.txt
===================================================================
--- /libmpc/branches/r2d/libmpcpsy/CMakeLists.txt	(revision 162)
+++ /libmpc/branches/r2d/libmpcpsy/CMakeLists.txt	(revision 162)
@@ -0,0 +1,5 @@
+include_directories(${libmpc_SOURCE_DIR}/include)
+include_directories(${libmpc_SOURCE_DIR}/common)
+link_directories(${libmpc_BINARY_DIR}/common)
+add_library(mpcpsy_static STATIC ans cvd fft4g fft_routines profile psy psy_tab) 
+target_link_libraries(mpcpsy_static common_static)
Index: /libmpc/branches/r2d/libwavformat/CMakeLists.txt
===================================================================
--- /libmpc/branches/r2d/libwavformat/CMakeLists.txt	(revision 162)
+++ /libmpc/branches/r2d/libwavformat/CMakeLists.txt	(revision 162)
@@ -0,0 +1,1 @@
+add_library(wavformat_static STATIC input output)
Index: /libmpc/branches/r2d/mpcdec/CMakeLists.txt
===================================================================
--- /libmpc/branches/r2d/mpcdec/CMakeLists.txt	(revision 162)
+++ /libmpc/branches/r2d/mpcdec/CMakeLists.txt	(revision 162)
@@ -0,0 +1,11 @@
+include_directories(${libmpc_SOURCE_DIR}/include)
+
+include_directories(${libmpc_SOURCE_DIR}/libwavformat)
+link_directories(${libmpc_BINARY_DIR}/libwavformat)
+include_directories(${libmpc_SOURCE_DIR}/libmpcdec)
+link_directories(${libmpc_BINARY_DIR}/libmpcdec)
+
+add_executable(mpcdec mpcdec.c)
+
+target_link_libraries(mpcdec wavformat_static)
+target_link_libraries(mpcdec mpcdec_static)
Index: /libmpc/branches/r2d/mpcdec/mpcdec.c
===================================================================
--- /libmpc/branches/r2d/mpcdec/mpcdec.c	(revision 161)
+++ /libmpc/branches/r2d/mpcdec/mpcdec.c	(revision 162)
@@ -63,9 +63,10 @@
 main(int argc, char **argv)
 {
-    mpc_reader reader; mpc_streaminfo si; mpc_decoder* decoder; mpc_status err;
+    mpc_reader reader; mpc_demux* demux; mpc_streaminfo si; mpc_decoder* decoder; mpc_status err;
     MPC_SAMPLE_FORMAT sample_buffer[MPC_DECODER_BUFFER_LENGTH];
     clock_t begin, end, sum; int total_samples; t_wav_output_file wav_output;
     mpc_bool_t is_wav_output;
 
+    printf("mpcdec - musepack (mpc) decoder sample application\n");
     if(3 < argc && argc < 2)
     {
@@ -77,9 +78,8 @@
     if(err < 0) return !MPC_STATUS_OK;
 
-    err = mpc_streaminfo_init(&si, &reader);
-    if(err < 0) return !MPC_STATUS_OK;
-
-    err = mpc_decoder_init(&decoder, &reader, &si);
-    if(err < 0) return !MPC_STATUS_OK;
+    demux = mpc_demux_init(&reader);
+    if(!demux) return !MPC_STATUS_OK;
+    mpc_demux_get_info(demux,  &si);
+    decoder = mpc_decoder_init(&si);
 
     is_wav_output = argc > 2;
@@ -92,5 +92,5 @@
         wavo_fc.m_user_data = fopen(argv[2], "wb");
         if(!wavo_fc.m_user_data) return !MPC_STATUS_OK;
-        err = waveformat_output_open(&wav_output, wavo_fc, si.channels, 16, 0, si.sample_freq, (t_wav_uint32) si.pcm_samples * 2);
+        err = waveformat_output_open(&wav_output, wavo_fc, si.channels, 16, 0, si.sample_freq, (t_wav_uint32) si.samples * 2);
         if(!err) return !MPC_STATUS_OK;
     }
@@ -99,17 +99,17 @@
     while(MPC_TRUE)
     {
-        mpc_uint32_t samples;
+        mpc_frame_info frame; mpc_uint32_t samples;
 
-        begin   = clock();
-        samples = mpc_decoder_decode(decoder, sample_buffer, 0, 0);
-        end     = clock();
+        frame.buffer = sample_buffer;
+        begin        = clock();
+        mpc_demux_decode(demux, &frame);
+        end          = clock();
+        if(frame.bits == -1) break;
 
-        if(samples <= 0) break;
-        if(!samples)     break;
-        total_samples += samples;
+        total_samples += frame.samples;
         sum           += end - begin;
 
         if(is_wav_output)
-            if(waveformat_output_process_float32(&wav_output, sample_buffer, samples*2) < 0)
+            if(waveformat_output_process_float32(&wav_output, sample_buffer, frame.samples*2) < 0)
                 break;
     }
@@ -124,4 +124,5 @@
 
     mpc_decoder_exit(decoder);
+    mpc_demux_exit(demux);
     mpc_reader_exit_stdio(&reader);
     if(is_wav_output)
Index: /libmpc/branches/r2d/mppenc/CMakeLists.txt
===================================================================
--- /libmpc/branches/r2d/mppenc/CMakeLists.txt	(revision 161)
+++ /libmpc/branches/r2d/mppenc/CMakeLists.txt	(revision 162)
@@ -1,3 +1,27 @@
 add_definitions(-DMPP_ENCODER -DFAST_MATH -DCVD_FASTLOG)
-add_executable(mppenc analy_filter encode_sv7 huffsv7 profile stderr winmsg ans fastmath keyboard psy tags bitstream fft4g mppenc psy_tab tools cvd fft_routines pipeopen quant wave_in)
+
+include_directories(${libmpc_SOURCE_DIR}/include)
+include_directories(${libmpc_SOURCE_DIR}/libmpcpsy)
+include_directories(${libmpc_SOURCE_DIR}/libmpcenc)
+
+link_directories(${libmpc_BINARY_DIR}/libmpcpsy)
+link_directories(${libmpc_BINARY_DIR}/libmpcenc)
+
+add_executable(mppenc keyboard mppenc pipeopen stderr tags wave_in winmsg)
+
+target_link_libraries(mppenc mpcpsy_static)
+target_link_libraries(mppenc mpcenc_static)
+
+if(WIN32)
+target_link_libraries(mppenc winmm)
+endif(WIN32)
+
+if(NOT MSVC)
 target_link_libraries(mppenc m)
+endif(NOT MSVC)
+
+if(CMAKE_SYSTEM_NAME STREQUAL OpenBSD)
+target_link_libraries(mppenc ossaudio)
+endif(CMAKE_SYSTEM_NAME STREQUAL OpenBSD)
+
+install(TARGETS mppenc RUNTIME DESTINATION bin)
Index: /libmpc/branches/r2d/mppenc/mppenc.c
===================================================================
--- /libmpc/branches/r2d/mppenc/mppenc.c	(revision 161)
+++ /libmpc/branches/r2d/mppenc/mppenc.c	(revision 162)
@@ -36,6 +36,6 @@
 int           APE_Version     = 2000;
 int           LowDelay        = 0;
-Bool_t        EnableTags      = FALSE;
-Bool_t        IsEndBeep       = FALSE;
+Bool_t        EnableTags      = MPC_FALSE;
+Bool_t        IsEndBeep       = MPC_FALSE;
 
 #define MODE_OVERWRITE          0
@@ -898,5 +898,5 @@
         }
         else if ( 0 == strcmp ( arg, "beep")  ) {
-            IsEndBeep = TRUE;
+            IsEndBeep = MPC_TRUE;
         }
         else if ( 0 == strcmp ( arg, "scale") ) {                                       // ScalingFactor
@@ -1043,5 +1043,5 @@
         }
         else if ( 0 == strcmp ( arg, "writetags") ) {
-            EnableTags = TRUE;
+            EnableTags = MPC_TRUE;
         }
         else if ( 0 == strcmp ( arg, "lowdelay") ) {
@@ -1633,12 +1633,12 @@
 	writeStreamInfo ( &e, m.Max_Band, m.MS_Channelmode > 0, SamplesInWAVE,
 					   m.SampleFreq, Wave.Channels > 2 ? 2 : Wave.Channels);
-	writeBlock(&e, "SI", TRUE);
+	writeBlock(&e, "SI", MPC_TRUE);
 	writeEncoderInfo(&e, m.MainQual, m.PNS > 0, MPPENC_MAJOR, MPPENC_MINOR,
 					  MPPENC_IMPLEMENT, MPPENC_BUILD);
-	writeBlock(&e, "EI", FALSE);
+	writeBlock(&e, "EI", MPC_FALSE);
 	e.seek_ptr = ftell(e.outputFile);
 	writeBits (&e, 0, 8);
 	writeBits (&e, 0, 32); // jump 40 bits for seek table pointer
-	writeBlock(&e, "SP", FALSE); // reserve space for seek pointer
+	writeBlock(&e, "SP", MPC_FALSE); // reserve space for seek pointer
 
 
@@ -1745,8 +1745,8 @@
 		e.seek_pos++;
 	}
-	writeBlock(&e, "AD", FALSE);
+	writeBlock(&e, "AD", MPC_FALSE);
 	writeSeekTable(&e);
-	writeBlock(&e, "ST", FALSE); // write seek table block
-	writeBlock(&e, "SE", FALSE); // write end of stream block
+	writeBlock(&e, "ST", MPC_FALSE); // write seek table block
+	writeBlock(&e, "SE", MPC_FALSE); // write end of stream block
     ShowProgress (&m, SamplesInWAVE, SamplesInWAVE, e.outputBits );
 
