Index: /libmpc/branches/r2d/Makefile.am
===================================================================
--- /libmpc/branches/r2d/Makefile.am	(revision 137)
+++ /libmpc/branches/r2d/Makefile.am	(revision 138)
@@ -1,2 +1,2 @@
 AUTOMAKE_OPTIONS = foreign
-SUBDIRS = libwavformat libmpcpsy libmpcenc libmpcdec mppenc mpcdec
+SUBDIRS = common libwavformat libmpcpsy libmpcenc libmpcdec mppenc mpcdec
Index: /libmpc/branches/r2d/common/Makefile.am
===================================================================
--- /libmpc/branches/r2d/common/Makefile.am	(revision 138)
+++ /libmpc/branches/r2d/common/Makefile.am	(revision 138)
@@ -0,0 +1,4 @@
+INCLUDES = 
+METASOURCES = AUTO
+lib_LIBRARIES = libcommon.a
+libcommon_a_SOURCES = crc32.c
Index: /libmpc/branches/r2d/configure.in
===================================================================
--- /libmpc/branches/r2d/configure.in	(revision 137)
+++ /libmpc/branches/r2d/configure.in	(revision 138)
@@ -8,3 +8,3 @@
 AM_PROG_LIBTOOL
 
-AC_OUTPUT(Makefile libmpcenc/Makefile libmpcpsy/Makefile mppenc/Makefile libwavformat/Makefile libmpcdec/Makefile mpcdec/Makefile)
+AC_OUTPUT(Makefile libmpcenc/Makefile libmpcpsy/Makefile mppenc/Makefile libwavformat/Makefile libmpcdec/Makefile mpcdec/Makefile common/Makefile)
Index: /libmpc/branches/r2d/libmpc.kdevelop
===================================================================
--- /libmpc/branches/r2d/libmpc.kdevelop	(revision 137)
+++ /libmpc/branches/r2d/libmpc.kdevelop	(revision 138)
@@ -3,5 +3,5 @@
   <general>
     <author>Nicolas Botti</author>
-    <email/>
+    <email></email>
     <version>0.1</version>
     <projectmanagement>KDevAutoProject</projectmanagement>
@@ -14,20 +14,20 @@
     <projectdirectory>.</projectdirectory>
     <absoluteprojectpath>false</absoluteprojectpath>
-    <description/>
+    <description></description>
   </general>
   <kdevautoproject>
     <general>
-      <activetarget>libmpcpsy/libmpcpsy.a</activetarget>
+      <activetarget>libmpcdec/libmpcdec.la</activetarget>
       <useconfiguration>debug</useconfiguration>
     </general>
     <run>
-      <mainprogram>src/mppenc</mainprogram>
+      <mainprogram>/usr/bin/xmms</mainprogram>
       <terminal>true</terminal>
-      <directoryradio>executable</directoryradio>
+      <directoryradio>custom</directoryradio>
       <runarguments>
-        <mppenc/>
+        <mppenc></mppenc>
       </runarguments>
       <customdirectory>/</customdirectory>
-      <programargs/>
+      <programargs></programargs>
       <autocompile>true</autocompile>
       <envvars/>
@@ -184,5 +184,5 @@
     </codecompletion>
     <creategettersetter>
-      <prefixGet/>
+      <prefixGet></prefixGet>
       <prefixSet>set</prefixSet>
       <prefixVariable>m_,_</prefixVariable>
@@ -200,10 +200,10 @@
   <kdevdebugger>
     <general>
-      <programargs>--overwrite ~/mdv-startup.wav</programargs>
-      <gdbpath/>
+      <programargs>~/mdv-startup.mpc</programargs>
+      <gdbpath></gdbpath>
       <dbgshell>libtool</dbgshell>
-      <configGdbScript/>
-      <runShellScript/>
-      <runGdbScript/>
+      <configGdbScript></configGdbScript>
+      <runShellScript></runShellScript>
+      <runGdbScript></runGdbScript>
       <breakonloadinglibs>true</breakonloadinglibs>
       <separatetty>false</separatetty>
Index: /libmpc/branches/r2d/libmpcdec/Makefile.am
===================================================================
--- /libmpc/branches/r2d/libmpcdec/Makefile.am	(revision 137)
+++ /libmpc/branches/r2d/libmpcdec/Makefile.am	(revision 138)
@@ -10,2 +10,3 @@
 AM_CFLAGS = -DMPC_LITTLE_ENDIAN
 
+libmpcdec_la_LIBADD = $(top_builddir)/common/libcommon.a
Index: /libmpc/branches/r2d/libmpcdec/mpc_demux.c
===================================================================
--- /libmpc/branches/r2d/libmpcdec/mpc_demux.c	(revision 137)
+++ /libmpc/branches/r2d/libmpcdec/mpc_demux.c	(revision 138)
@@ -43,5 +43,7 @@
 
 // streaminfo.c
-mpc_status streaminfo_read_header_sv8(mpc_streaminfo* si, const mpc_bits_reader * r_in);
+mpc_status streaminfo_read_header_sv8(mpc_streaminfo* si,
+									  const mpc_bits_reader * r_in,
+									  mpc_size_t block_size);
 mpc_status streaminfo_read_header_sv7(mpc_streaminfo* si, mpc_bits_reader * r_in);
 void  streaminfo_encoder_info(mpc_streaminfo* si, const mpc_bits_reader * r_in);
@@ -134,7 +136,9 @@
 		while( memcmp(b.key, "AD", 2) != 0 ){ // scan all blocks until audio
 			mpc_demux_fill(d, 11 + b.size, 0);
-			if (memcmp(b.key, "SI", 2) == 0)
-				streaminfo_read_header_sv8(&d->si, &d->bits_reader);
-			else if (memcmp(b.key, "EI", 2) == 0)
+			if (memcmp(b.key, "SI", 2) == 0){
+				int ret = streaminfo_read_header_sv8(&d->si, &d->bits_reader, b.size);
+				if (ret != MPC_STATUS_OK)
+					return ret;
+			} else if (memcmp(b.key, "EI", 2) == 0)
 				streaminfo_encoder_info(&d->si, &d->bits_reader);
 			else if (memcmp(b.key, "RG", 2) == 0)
@@ -161,7 +165,11 @@
 		p_tmp->block_bits = 0;
 		// lire entÃªte
-		mpc_demux_header(p_tmp);
-		// initialisation decodeur
-		p_tmp->d = mpc_decoder_init(&p_tmp->si);
+		if (mpc_demux_header(p_tmp) == MPC_STATUS_OK) {
+			// initialisation decodeur
+			p_tmp->d = mpc_decoder_init(&p_tmp->si);
+		} else {
+			free(p_tmp);
+			p_tmp = 0;
+		}
 	}
 
Index: /libmpc/branches/r2d/libmpcdec/streaminfo.c
===================================================================
--- /libmpc/branches/r2d/libmpcdec/streaminfo.c	(revision 137)
+++ /libmpc/branches/r2d/libmpcdec/streaminfo.c	(revision 138)
@@ -39,4 +39,6 @@
 #include <stdio.h>
 #include "internal.h"
+
+unsigned long crc32(unsigned char *buf, int len);
 
 mpc_uint32_t mpc_bits_read(mpc_bits_reader * r, const unsigned int nb_bits);
@@ -139,11 +141,15 @@
 /// Reads streaminfo from SV8 header.
 mpc_status
-streaminfo_read_header_sv8(mpc_streaminfo* si, const mpc_bits_reader * r_in)
-{
-	mpc_uint32_t CRC;
+streaminfo_read_header_sv8(mpc_streaminfo* si, const mpc_bits_reader * r_in,
+						   mpc_size_t block_size)
+{
+	mpc_uint32_t CRC, CRC_tmp;
 	mpc_bits_reader r = *r_in;
 
-	// FIXME : add CRC check
 	CRC = mpc_bits_read(&r, 32);
+	CRC_tmp = crc32(r.buff + 1 - (r.count >> 3), block_size - 4);
+	if (CRC != CRC_tmp)
+		return MPC_STATUS_FILE;
+
 	si->stream_version = mpc_bits_read(&r, 8);
 	mpc_bits_get_size(&r, &si->samples);
Index: /libmpc/branches/r2d/libmpcenc/Makefile.am
===================================================================
--- /libmpc/branches/r2d/libmpcenc/Makefile.am	(revision 137)
+++ /libmpc/branches/r2d/libmpcenc/Makefile.am	(revision 138)
@@ -2,7 +2,8 @@
 METASOURCES = AUTO
 lib_LIBRARIES = libmpcenc.a
-libmpcenc_a_SOURCES = analy_filter.c bitstream.c encode_sv7.c huffsv7.c quant.c \
-	crc32.c
+libmpcenc_a_SOURCES = analy_filter.c bitstream.c encode_sv7.c huffsv7.c quant.c
 
 
 noinst_HEADERS = libmpcenc.h
+
+
Index: /libmpc/branches/r2d/mppenc/Makefile.am
===================================================================
--- /libmpc/branches/r2d/mppenc/Makefile.am	(revision 137)
+++ /libmpc/branches/r2d/mppenc/Makefile.am	(revision 138)
@@ -11,4 +11,4 @@
 	winmsg.c
 mppenc_LDADD = $(top_builddir)/libmpcpsy/libmpcpsy.a \
-	$(top_builddir)/libmpcenc/libmpcenc.a -lm
+	$(top_builddir)/libmpcenc/libmpcenc.a $(top_builddir)/common/libcommon.a -lm
 AM_CFLAGS = -DMPP_ENCODER=1 -DTRUE=1 -DFALSE=0
