update WAV writer for interleaved audio support
[nihav-tool.git] / src / wavwriter.rs
index 2296f6f456f1d5753f1d68b69f9eab69a8224b1f..fbf825d88e79046a4f0dd01349472fb2175b92d0 100644 (file)
@@ -1,7 +1,7 @@
-extern crate nihav;
+extern crate nihav_core;
 
-use nihav::io::byteio::*;
-use nihav::frame::*;
+use nihav_core::io::byteio::*;
+use nihav_core::frame::*;
 use std::fs::File;
 use std::io::SeekFrom;
 
@@ -37,11 +37,19 @@ macro_rules! write_data {
         let nch = ainfo.get_channels() as usize;
         let mut offs: Vec<usize> = Vec::with_capacity(nch);
         for ch in 0..nch { offs.push($buf.get_offset(ch)); }
+        let is_planar = $buf.get_step() == 1;
         let data = $buf.get_data();
 
-        for i in 0..len {
-            for ch in 0..nch {
-                let sample = data[offs[ch] + i];
+        if is_planar {
+            for i in 0..len {
+                for ch in 0..nch {
+                    let sample = data[offs[ch] + i];
+                    $write($wr, sample)?;
+                }
+            }
+        } else {
+            for i in 0..len*nch {
+                let sample = data[i];
                 $write($wr, sample)?;
             }
         }
@@ -49,7 +57,7 @@ macro_rules! write_data {
 }
 
 impl<'a> WavWriter<'a> {
-    pub fn new(name: &String) -> Self {
+    pub fn new(name: &str) -> Self {
         let file = File::create(name).unwrap();
         let fw   = Box::new(FileWriter::new_write(file));
         let io   = ByteWriter::new(Box::leak(fw));