diff options
| author | Carl Hetherington <cth@carlh.net> | 2013-07-11 13:12:43 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2013-07-11 13:12:43 +0100 |
| commit | bb917533ad5beaded24ed56c7c4dc71d50e76263 (patch) | |
| tree | 3b737fa8110c8113e8ae644568d307700c0eefb9 /src/lib | |
| parent | 49deab5be257f3a11f5b053224f4a3218fad8da3 (diff) | |
Untested audio delay.
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/audio_decoder.cc | 8 | ||||
| -rw-r--r-- | src/lib/audio_decoder.h | 5 | ||||
| -rw-r--r-- | src/lib/ffmpeg_decoder.cc | 2 | ||||
| -rw-r--r-- | src/lib/sndfile_decoder.cc | 2 |
4 files changed, 13 insertions, 4 deletions
diff --git a/src/lib/audio_decoder.cc b/src/lib/audio_decoder.cc index ade11cc32..2fe347cf2 100644 --- a/src/lib/audio_decoder.cc +++ b/src/lib/audio_decoder.cc @@ -31,15 +31,21 @@ using std::cout; using boost::optional; using boost::shared_ptr; -AudioDecoder::AudioDecoder (shared_ptr<const Film> f) +AudioDecoder::AudioDecoder (shared_ptr<const Film> f, shared_ptr<const AudioContent> c) : Decoder (f) , _audio_position (0) { + _delay_frames = c->audio_delay() * c->content_audio_frame_rate() * f->dcp_audio_frame_rate() / (c->output_audio_frame_rate() * 1000); } void AudioDecoder::audio (shared_ptr<const AudioBuffers> data, AudioContent::Frame frame) { + frame += _delay_frames; + Audio (data, frame); _audio_position = frame + data->frames (); + if (_audio_position < 0) { + _audio_position = 0; + } } diff --git a/src/lib/audio_decoder.h b/src/lib/audio_decoder.h index ddfb296c9..a7849b9cc 100644 --- a/src/lib/audio_decoder.h +++ b/src/lib/audio_decoder.h @@ -35,7 +35,7 @@ class AudioBuffers; class AudioDecoder : public virtual Decoder { public: - AudioDecoder (boost::shared_ptr<const Film>); + AudioDecoder (boost::shared_ptr<const Film>, boost::shared_ptr<const AudioContent>); /** Emitted when some audio data is ready */ boost::signals2::signal<void (boost::shared_ptr<const AudioBuffers>, AudioContent::Frame)> Audio; @@ -44,6 +44,9 @@ protected: void audio (boost::shared_ptr<const AudioBuffers>, AudioContent::Frame); AudioContent::Frame _audio_position; + +private: + AudioContent::Frame _delay_frames; }; #endif diff --git a/src/lib/ffmpeg_decoder.cc b/src/lib/ffmpeg_decoder.cc index fddb70294..b2eb1dbde 100644 --- a/src/lib/ffmpeg_decoder.cc +++ b/src/lib/ffmpeg_decoder.cc @@ -59,7 +59,7 @@ using libdcp::Size; FFmpegDecoder::FFmpegDecoder (shared_ptr<const Film> f, shared_ptr<const FFmpegContent> c, bool video, bool audio) : Decoder (f) , VideoDecoder (f) - , AudioDecoder (f) + , AudioDecoder (f, c) , SubtitleDecoder (f) , FFmpeg (c) , _subtitle_codec_context (0) diff --git a/src/lib/sndfile_decoder.cc b/src/lib/sndfile_decoder.cc index 80a6afd2b..b2ad45125 100644 --- a/src/lib/sndfile_decoder.cc +++ b/src/lib/sndfile_decoder.cc @@ -35,7 +35,7 @@ using boost::shared_ptr; SndfileDecoder::SndfileDecoder (shared_ptr<const Film> f, shared_ptr<const SndfileContent> c) : Decoder (f) - , AudioDecoder (f) + , AudioDecoder (f, c) , _sndfile_content (c) , _deinterleave_buffer (0) { |
