*/
#include "audio_decoder.h"
-#include "stream.h"
+#include "audio_buffers.h"
+#include "exceptions.h"
+#include "log.h"
+#include "resampler.h"
+#include "i18n.h"
+
+using std::stringstream;
+using std::list;
+using std::pair;
+using std::cout;
using boost::optional;
using boost::shared_ptr;
-AudioDecoder::AudioDecoder (shared_ptr<Film> f, DecodeOptions o, Job* j)
- : Decoder (f, o, j)
+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::set_audio_stream (shared_ptr<AudioStream> s)
+AudioDecoder::audio (shared_ptr<const AudioBuffers> data, AudioContent::Frame frame)
{
- _audio_stream = s;
+ /* XXX: no-one's calling _resampler->flush() again */
+
+ if (_resampler) {
+ data = _resampler->run (data);
+ }
+
+ Audio (data, _audio_position);
+ _audio_position = frame + data->frames ();
}