summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2013-07-11 13:12:43 +0100
committerCarl Hetherington <cth@carlh.net>2013-07-11 13:12:43 +0100
commitbb917533ad5beaded24ed56c7c4dc71d50e76263 (patch)
tree3b737fa8110c8113e8ae644568d307700c0eefb9 /src/lib
parent49deab5be257f3a11f5b053224f4a3218fad8da3 (diff)
Untested audio delay.
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/audio_decoder.cc8
-rw-r--r--src/lib/audio_decoder.h5
-rw-r--r--src/lib/ffmpeg_decoder.cc2
-rw-r--r--src/lib/sndfile_decoder.cc2
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)
{