diff options
| author | Carl Hetherington <cth@carlh.net> | 2013-07-25 13:26:40 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2013-07-25 13:26:40 +0100 |
| commit | d9362bdd24f01e4c833e89d63ac3816f36eae36e (patch) | |
| tree | e1355acbfad222fb14ec386b14dcddce0b212bb5 /src/lib/audio_decoder.cc | |
| parent | fd970b185e9357522f5d12d62800df8769764729 (diff) | |
Move resampling back into AudioDecoder and fix various screw-ups with audio in the player.
Diffstat (limited to 'src/lib/audio_decoder.cc')
| -rw-r--r-- | src/lib/audio_decoder.cc | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/src/lib/audio_decoder.cc b/src/lib/audio_decoder.cc index 59c631632..0ed3505cf 100644 --- a/src/lib/audio_decoder.cc +++ b/src/lib/audio_decoder.cc @@ -21,6 +21,7 @@ #include "audio_buffers.h" #include "exceptions.h" #include "log.h" +#include "resampler.h" #include "i18n.h" @@ -31,16 +32,30 @@ using std::cout; using boost::optional; using boost::shared_ptr; -AudioDecoder::AudioDecoder (shared_ptr<const Film> f) - : Decoder (f) +AudioDecoder::AudioDecoder (shared_ptr<const Film> film, shared_ptr<const AudioContent> content) + : Decoder (film) , _audio_position (0) { - + if (content->content_audio_frame_rate() != content->output_audio_frame_rate()) { + _resampler.reset ( + new Resampler ( + content->content_audio_frame_rate(), + content->output_audio_frame_rate(), + content->audio_channels() + ) + ); + } } void AudioDecoder::audio (shared_ptr<const AudioBuffers> data, AudioContent::Frame frame) { - Audio (data, frame); + /* XXX: no-one's calling _resampler->flush() again */ + + if (_resampler) { + data = _resampler->run (data); + } + + Audio (data, _audio_position); _audio_position = frame + data->frames (); } |
