]> git.nihav.org Git - nihav.git/blobdiff - nihav-core/src/test/wavwriter.rs
core/frame: remove unneeded FrameFromPacket trait
[nihav.git] / nihav-core / src / test / wavwriter.rs
index 1cd9541754f662154c91a71248f6b1f0e20b266c..50b194945c1dfe535d8bdb14d32d0c572f22da43 100644 (file)
@@ -1,7 +1,9 @@
+//! Audio output in WAV format.
 use crate::io::byteio::*;
 use crate::frame::*;
 use std::io::SeekFrom;
 
+/// WAVE output writer.
 pub struct WavWriter<'a> {
     io: &'a mut ByteWriter<'a>,
     data_pos: u64,
@@ -46,9 +48,13 @@ macro_rules! write_data {
 }
 
 impl<'a> WavWriter<'a> {
+    /// Constructs a new `WavWriter` instance.
     pub fn new(io: &'a mut ByteWriter<'a>) -> Self {
-        WavWriter { io: io, data_pos: 0 }
+        WavWriter { io, data_pos: 0 }
     }
+    /// Writes audio format information to the file header.
+    ///
+    /// This function should be called exactly once before writing actual audio data.
     pub fn write_header(&mut self, ainfo: NAAudioInfo) -> ByteIOResult<()> {
         let bits = ainfo.get_format().get_bits() as usize;
 
@@ -59,16 +65,16 @@ impl<'a> WavWriter<'a> {
         self.io.write_buf(b"fmt ")?;
         self.io.write_u32le(16)?;
         self.io.write_u16le(0x0001)?; // PCM
-        self.io.write_u16le(ainfo.get_channels() as u16)?;
-        self.io.write_u32le(ainfo.get_sample_rate() as u32)?;
+        self.io.write_u16le(u16::from(ainfo.get_channels()))?;
+        self.io.write_u32le(ainfo.get_sample_rate())?;
 
         if bits < 16 {
-            self.io.write_u32le((ainfo.get_channels() as u32) * (ainfo.get_sample_rate() as u32))?;
-            self.io.write_u16le(ainfo.get_channels() as u16)?; // block align
+            self.io.write_u32le(u32::from(ainfo.get_channels()) * ainfo.get_sample_rate())?;
+            self.io.write_u16le(u16::from(ainfo.get_channels()))?; // block align
             self.io.write_u16le(8)?;
         } else {
-            self.io.write_u32le(2 * (ainfo.get_channels() as u32) * (ainfo.get_sample_rate() as u32))?;
-            self.io.write_u16le((2 * ainfo.get_channels()) as u16)?; // block align
+            self.io.write_u32le(2 * u32::from(ainfo.get_channels()) * ainfo.get_sample_rate())?;
+            self.io.write_u16le(u16::from(2 * ainfo.get_channels()))?; // block align
             self.io.write_u16le(16)?;
         }
 
@@ -78,6 +84,7 @@ impl<'a> WavWriter<'a> {
         self.data_pos = self.io.tell();
         Ok(())
     }
+    /// Writes audio data.
     pub fn write_frame(&mut self, abuf: NABufferType) -> ByteIOResult<()> {
         match abuf {
             NABufferType::AudioU8(ref buf) => {