Cleaned up the endianness conversion, making sure that 16-bit samples get
authorjm <jm@0101bb08-14d6-0310-b084-bc0e0c8e3800>
Sat, 28 Apr 2007 13:30:22 +0000 (13:30 +0000)
committerjm <jm@0101bb08-14d6-0310-b084-bc0e0c8e3800>
Sat, 28 Apr 2007 13:30:22 +0000 (13:30 +0000)
interpreted as signed ints after swapping bytes.

git-svn-id: http://svn.xiph.org/trunk/speex@12898 0101bb08-14d6-0310-b084-bc0e0c8e3800

src/wav_io.c
src/wav_io.h

index a68a91a..02931b1 100644 (file)
 #include <stdio.h>
 #include <string.h>
 #include "speex/speex_types.h"
-
-static spx_uint32_t le_int(spx_uint32_t i)
-{
-   spx_uint32_t ret=i;
-#ifdef WORDS_BIGENDIAN
-   ret =  i>>24;
-   ret += (i>>8)&0x0000ff00;
-   ret += (i<<8)&0x00ff0000;
-   ret += (i<<24);
-#endif
-   return ret;
-}
-
-unsigned short be_short(unsigned short s)
-{
-   unsigned short ret=s;
-#ifndef WORDS_BIGENDIAN
-   ret =  s>>8;
-   ret += s<<8;
-#endif
-   return ret;
-}
-
-unsigned short le_short(unsigned short s)
-{
-   unsigned short ret=s;
-#ifdef WORDS_BIGENDIAN
-   ret =  s>>8;
-   ret += s<<8;
-#endif
-   return ret;
-}
+#include "wav_io.h"
 
 
 int read_wav_header(FILE *file, int *rate, int *channels, int *format, spx_int32_t *size)
index fa5fe7a..ab04e1b 100644 (file)
 #include <stdio.h>
 #include "speex/speex_types.h"
 
-unsigned short be_short(unsigned short s);
-unsigned short le_short(unsigned short s);
-spx_uint32_t le_int(spx_uint32_t i);
+#ifdef WORDS_BIGENDIAN
+#define le_short(s) ((short) ((unsigned short) (s) << 8) | ((unsigned short) (s) >> 8))
+#define be_short(s) ((short) (s))
+#else
+#define le_short(s) ((short) (s))
+#define be_short(s) ((short) ((unsigned short) (s) << 8) | ((unsigned short) (s) >> 8))
+#endif 
+
+/** Convert little endian */
+static inline spx_int32_t le_int(spx_int32_t i)
+{
+#ifdef WORDS_BIGENDIAN
+   spx_uint32_t ui, ret;
+   ui = i;
+   ret =  ui>>24;
+   ret |= (ui>>8)&0x0000ff00;
+   ret |= (ui<<8)&0x00ff0000;
+   ret |= (ui<<24);
+   return ret;
+#else
+   return i;
+#endif
+}
 
 int read_wav_header(FILE *file, int *rate, int *channels, int *format, spx_int32_t *size);