summaryrefslogtreecommitdiff
path: root/src/lib/audio_decoder.cc
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2014-04-11 10:21:02 +0100
committerCarl Hetherington <cth@carlh.net>2014-04-11 10:21:02 +0100
commit0da6975960aab345a1a8b30e6a95659cc936a1da (patch)
tree3c25ba2011d9037f240ade39904a917f0deca035 /src/lib/audio_decoder.cc
parentc190bba821e60611bfeb59a54b73541fb529522a (diff)
Flush decoded_audio buffer on seek.
Diffstat (limited to 'src/lib/audio_decoder.cc')
-rw-r--r--src/lib/audio_decoder.cc12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/lib/audio_decoder.cc b/src/lib/audio_decoder.cc
index 6486d176a..17a534aa4 100644
--- a/src/lib/audio_decoder.cc
+++ b/src/lib/audio_decoder.cc
@@ -37,11 +37,18 @@ using boost::shared_ptr;
AudioDecoder::AudioDecoder (shared_ptr<const AudioContent> content)
: _audio_content (content)
- , _decoded_audio (shared_ptr<AudioBuffers> (new AudioBuffers (content->audio_channels(), 0)), 0)
{
if (content->output_audio_frame_rate() != content->content_audio_frame_rate() && content->audio_channels ()) {
_resampler.reset (new Resampler (content->content_audio_frame_rate(), content->output_audio_frame_rate(), content->audio_channels ()));
}
+
+ reset_decoded_audio ();
+}
+
+void
+AudioDecoder::reset_decoded_audio ()
+{
+ _decoded_audio = ContentAudio (shared_ptr<AudioBuffers> (new AudioBuffers (_audio_content->audio_channels(), 0)), 0);
}
shared_ptr<ContentAudio>
@@ -106,7 +113,7 @@ AudioDecoder::audio (shared_ptr<const AudioBuffers> data, ContentTime time)
_audio_position = time.frames (_audio_content->output_audio_frame_rate ());
}
- assert (_audio_position >= (_decoded_audio.frame + _decoded_audio.audio->frames()));
+ assert (_audio_position.get() >= (_decoded_audio.frame + _decoded_audio.audio->frames()));
/* Resize _decoded_audio to fit the new data */
int const new_size = _audio_position.get() + data->frames() - _decoded_audio.frame;
@@ -139,4 +146,5 @@ void
AudioDecoder::seek (ContentTime, bool)
{
_audio_position.reset ();
+ reset_decoded_audio ();
}