patch-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Patch-gnuradio] [PATCH] io: fixed FIXME, updated Doxy-blocks and fixed


From: Martin Braun
Subject: [Patch-gnuradio] [PATCH] io: fixed FIXME, updated Doxy-blocks and fixed a bug with big endianness machines and 8-bit WAVs
Date: Wed, 20 Jun 2012 15:32:16 +0200

---
 gnuradio-core/src/lib/io/gri_wavfile.cc |  119 ++++++-------------------------
 gnuradio-core/src/lib/io/gri_wavfile.h  |   27 +++----
 2 files changed, 33 insertions(+), 113 deletions(-)

diff --git a/gnuradio-core/src/lib/io/gri_wavfile.cc 
b/gnuradio-core/src/lib/io/gri_wavfile.cc
index e316a08..0f0660f 100644
--- a/gnuradio-core/src/lib/io/gri_wavfile.cc
+++ b/gnuradio-core/src/lib/io/gri_wavfile.cc
@@ -27,107 +27,29 @@
 #include <gri_wavfile.h>
 #include <cstring>
 #include <stdint.h>
+#include <gruel/inet.h>
 
 # define VALID_COMPRESSION_TYPE 0x0001
 
 // WAV files are always little-endian, so we need some byte switching macros
-
-// FIXME: Use libgruel versions
-
+// Basically, this is the opposite of htonx() and ntohx()
 #ifdef WORDS_BIGENDIAN
 
-#ifdef HAVE_BYTESWAP_H
-#include <byteswap.h>
-#else
-#warning Using non-portable code (likely wrong other than ILP32).
-
-static inline short int
-bswap_16 (unsigned short int x)
-{
-  return ((((x) >> 8) & 0xff) | (((x) & 0xff) << 8));
-}
-
-static inline unsigned int
-bswap_32 (unsigned int x)
-{
-  return ((((x) & 0xff000000) >> 24) | (((x) & 0x00ff0000) >>  8)      \
-         | (((x) & 0x0000ff00) <<  8) | (((x) & 0x000000ff) << 24));
-}
-#endif // HAVE_BYTESWAP_H
-
-static inline uint32_t
-host_to_wav(uint32_t x)
-{
-  return bswap_32(x);
-}
-
-static inline uint16_t
-host_to_wav(uint16_t x)
-{
-  return bswap_16(x);
-}
-
-static inline int16_t
-host_to_wav(int16_t x)
-{
-  return bswap_16(x);
-}
-
-static inline uint32_t
-wav_to_host(uint32_t x)
-{
-  return bswap_32(x);
-}
-
-static inline uint16_t
-wav_to_host(uint16_t x)
-{
-  return bswap_16(x);
-}
-
-static inline int16_t
-wav_to_host(int16_t x)
-{
-  return bswap_16(x);
-}
+static inline uint32_t host_to_wav(uint32_t x) { return bswap_32(x); }
+static inline uint16_t host_to_wav(uint16_t x) { return bswap_16(x); }
+static inline int16_t  host_to_wav(int16_t x)  { return bswap_16(x); }
+static inline uint32_t wav_to_host(uint32_t x) { return bswap_32(x); }
+static inline uint16_t wav_to_host(uint16_t x) { return bswap_16(x); }
+static inline int16_t  wav_to_host(int16_t x)  { return bswap_16(x); }
 
 #else
 
-static inline uint32_t
-host_to_wav(uint32_t x)
-{
-  return x;
-}
-
-static inline uint16_t
-host_to_wav(uint16_t x)
-{
-  return x;
-}
-
-static inline int16_t
-host_to_wav(int16_t x)
-{
-  return x;
-}
-
-static inline uint32_t
-wav_to_host(uint32_t x)
-{
-  return x;
-}
-
-static inline uint16_t
-wav_to_host(uint16_t x)
-{
-  return x;
-}
-
-static inline int16_t
-wav_to_host(int16_t x)
-{
-  return x;
-}
+static inline uint32_t host_to_wav(uint32_t x) { return x; }
+static inline uint16_t host_to_wav(uint16_t x) { return x; }
+static inline int16_t  host_to_wav(int16_t x)  { return x; }
+static inline uint32_t wav_to_host(uint32_t x) { return x; }
+static inline uint16_t wav_to_host(uint16_t x) { return x; }
+static inline int16_t  wav_to_host(int16_t x)  { return x; }
 
 #endif // WORDS_BIGENDIAN
 
@@ -225,12 +147,15 @@ gri_wavheader_parse(FILE *fp,
 short int
 gri_wav_read_sample(FILE *fp, int bytes_per_sample)
 {
-  int16_t buf = 0;
-  size_t fresult;
-
-  fresult = fread(&buf, bytes_per_sample, 1, fp);
+  int16_t       buf_16bit;
 
-  return (short) wav_to_host(buf);
+  if(!fread(&buf_16bit, bytes_per_sample, 1, fp)) {
+         return 0;
+  }
+  if (bytes_per_sample == 1) {
+    return (short) buf_16bit;
+  }
+  return (short) wav_to_host(buf_16bit);
 }
 
 
diff --git a/gnuradio-core/src/lib/io/gri_wavfile.h 
b/gnuradio-core/src/lib/io/gri_wavfile.h
index c757be2..0cca9a9 100644
--- a/gnuradio-core/src/lib/io/gri_wavfile.h
+++ b/gnuradio-core/src/lib/io/gri_wavfile.h
@@ -29,20 +29,15 @@
 /*!
  * \brief Read signal information from a given WAV file.
  *
- * \p fp File pointer to an opened, empty file.
- * \p sample_rate Stores the sample rate [S/s]
- * \p nchans      Number of channels
- * \p bytes_per_sample Bytes per sample, can either be 1 or 2 (corresponding to
- *         8 or 16 bit samples, respectively)
- * \p first_sample_pos Number of the first byte containing a sample. Use this
- *         with fseek() to jump from the end of the file to the first sample
- *         when in repeat mode.
- * \p samples_per_chan Number of samples per channel
- * \p normalize_fac The normalization factor with which you need to divide the
- *         integer values of the samples to get them within [-1;1]
- * \p normalize_shift The value by which the sample values need to be shifted
- *         after normalization (reason being, 8-bit WAV files store samples as
- *         unsigned char and 16-bit as signed short int)
+ * \param[in]  fp          File pointer to an opened, empty file.
+ * \param[out] sample_rate Stores the sample rate [S/s]
+ * \param[out] nchans      Number of channels
+ * \param[out] bytes_per_sample Bytes per sample, can either be 1 or 2 
(corresponding to
+ *                              8 or 16 bit samples, respectively)
+ * \param[out] first_sample_pos Number of the first byte containing a sample. 
Use this
+ *                              with fseek() to jump from the end of the file 
to the
+ *                              first sample when in repeat mode.
+ * \param[out] samples_per_chan Number of samples per channel
  * \return True on a successful read, false if the file could not be read or is
  *         not a valid WAV file.
  */
@@ -94,8 +89,8 @@ gri_wav_write_sample(FILE *fp, short int sample, int 
bytes_per_sample);
  * shouldn't happen), you  need to fseek() to the end of the file (or
  * whereever).
  *
- * \p fp File pointer to an open WAV file with a blank header
- * \p byte_count Length of all samples written to the file in bytes.
+ * \param[in] fp         File pointer to an open WAV file with a blank header
+ * \param[in] byte_count Length of all samples written to the file in bytes.
  */
 bool
 gri_wavheader_complete(FILE *fp, unsigned int byte_count);
-- 
1.7.9.5




reply via email to

[Prev in Thread] Current Thread [Next in Thread]