summaryrefslogtreecommitdiff
path: root/src/lib/delay_line.cc
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2012-11-12 21:04:06 +0000
committerCarl Hetherington <cth@carlh.net>2012-11-12 21:04:06 +0000
commit17cea71c34ed6bdba67aac8614572c7511844c2a (patch)
tree41464576c5e2e6ab360789faf4b5fcc4358ee556 /src/lib/delay_line.cc
parent13b935067e892875ea9e76c3d63fcc11d2c429b0 (diff)
Untested; more movement of stuff out of decoder.
Diffstat (limited to 'src/lib/delay_line.cc')
-rw-r--r--src/lib/delay_line.cc32
1 files changed, 20 insertions, 12 deletions
diff --git a/src/lib/delay_line.cc b/src/lib/delay_line.cc
index e7cd8dc94..45d8e9d9d 100644
--- a/src/lib/delay_line.cc
+++ b/src/lib/delay_line.cc
@@ -30,28 +30,25 @@ using boost::shared_ptr;
/** @param channels Number of channels of audio.
* @param frames Delay in frames, +ve to move audio later.
*/
-DelayLine::DelayLine (int channels, int frames)
- : _negative_delay_remaining (0)
+DelayLine::DelayLine (Log* log, int channels, int frames)
+ : AudioProcessor (log)
+ , _negative_delay_remaining (0)
+ , _frames (frames)
{
- if (frames > 0) {
+ if (_frames > 0) {
/* We need a buffer to keep some data in */
- _buffers.reset (new AudioBuffers (channels, frames));
+ _buffers.reset (new AudioBuffers (channels, _frames));
_buffers->make_silent ();
- } else if (frames < 0) {
+ } else if (_frames < 0) {
/* We can do -ve delays just by chopping off
the start, so no buffer needed.
*/
- _negative_delay_remaining = -frames;
+ _negative_delay_remaining = -_frames;
}
}
-DelayLine::~DelayLine ()
-{
-
-}
-
void
-DelayLine::feed (shared_ptr<AudioBuffers> data)
+DelayLine::process_audio (shared_ptr<AudioBuffers> data)
{
if (_buffers) {
/* We have some buffers, so we are moving the audio later */
@@ -91,4 +88,15 @@ DelayLine::feed (shared_ptr<AudioBuffers> data)
_negative_delay_remaining -= to_do;
}
}
+
+ Audio (data);
+}
+
+void
+DelayLine::process_end ()
+{
+ if (_frames < 0) {
+ _buffers->make_silent ();
+ Audio (_buffers);
+ }
}