mirror of
https://github.com/iluvcapra/bwavfile.git
synced 2025-12-31 08:50:44 +00:00
Re-use the write buffer between calls to write_frames
This resulted in a ~10% speedup in test runs of the deinter example.
This commit is contained in:
@@ -25,6 +25,7 @@ where
|
|||||||
W: Write + Seek,
|
W: Write + Seek,
|
||||||
{
|
{
|
||||||
inner: WaveChunkWriter<W>,
|
inner: WaveChunkWriter<W>,
|
||||||
|
write_buffer: Vec<u8>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<W> AudioFrameWriter<W>
|
impl<W> AudioFrameWriter<W>
|
||||||
@@ -32,7 +33,10 @@ where
|
|||||||
W: Write + Seek,
|
W: Write + Seek,
|
||||||
{
|
{
|
||||||
fn new(inner: WaveChunkWriter<W>) -> Self {
|
fn new(inner: WaveChunkWriter<W>) -> Self {
|
||||||
AudioFrameWriter { inner }
|
AudioFrameWriter {
|
||||||
|
inner,
|
||||||
|
write_buffer: Vec::new(),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Write interleaved samples in `buffer`
|
/// Write interleaved samples in `buffer`
|
||||||
@@ -54,14 +58,11 @@ where
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut write_buffer = self
|
let frame_count = buffer.len() / channel_count;
|
||||||
.inner
|
let write_buffer_size = format.block_alignment as usize * frame_count;
|
||||||
.inner
|
self.write_buffer.resize(write_buffer_size, 0);
|
||||||
.format
|
|
||||||
.create_raw_buffer(buffer.len() / channel_count);
|
|
||||||
|
|
||||||
let into_bytes: &mut [u8] = &mut write_buffer;
|
let mut write_cursor = Cursor::new(&mut self.write_buffer);
|
||||||
let mut write_cursor = Cursor::new(into_bytes);
|
|
||||||
|
|
||||||
let common_format = format.common_format();
|
let common_format = format.common_format();
|
||||||
let bits_per_sample = format.bits_per_sample;
|
let bits_per_sample = format.bits_per_sample;
|
||||||
@@ -98,8 +99,8 @@ where
|
|||||||
),
|
),
|
||||||
}
|
}
|
||||||
|
|
||||||
self.inner.write_all(&write_buffer)?;
|
self.inner.write_all(&self.write_buffer)?;
|
||||||
Ok(write_buffer.len() as u64 / self.inner.inner.format.channel_count as u64)
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Finish writing audio frames and unwrap the inner `WaveWriter`.
|
/// Finish writing audio frames and unwrap the inner `WaveWriter`.
|
||||||
|
|||||||
Reference in New Issue
Block a user