projects
/
dcpomatic.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Move resampling back into AudioDecoder and fix various screw-ups with audio in the...
[dcpomatic.git]
/
src
/
lib
/
audio_decoder.cc
diff --git
a/src/lib/audio_decoder.cc
b/src/lib/audio_decoder.cc
index 70f0effd9faa742bf5e744ab71d2dd8ff35e35b0..0ed3505cf2aa959c93c06e9c4d16528a5e36bb16 100644
(file)
--- a/
src/lib/audio_decoder.cc
+++ b/
src/lib/audio_decoder.cc
@@
-18,19
+18,44
@@
*/
#include "audio_decoder.h"
*/
#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;
using boost::optional;
using boost::shared_ptr;
-AudioDecoder::AudioDecoder (shared_ptr<Film> f, shared_ptr<const Options> 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
}
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 ();
}
}