summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2013-04-14 00:48:27 +0100
committerCarl Hetherington <cth@carlh.net>2013-04-14 00:48:27 +0100
commit7fb622a18582f18fcc6cfe140a262fd6cc8cad88 (patch)
tree7d4a6d849cc276aada1df1d4bc16f97c7f25c0bb /src/lib
parent8c4b46f9fc316327e5e9e83e711dfa21bbde4935 (diff)
Fix mapping of audio in DCP.
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/audio_mapping.cc2
-rw-r--r--src/lib/encoder.cc6
-rw-r--r--src/lib/player.cc31
-rw-r--r--src/lib/player.h2
4 files changed, 21 insertions, 20 deletions
diff --git a/src/lib/audio_mapping.cc b/src/lib/audio_mapping.cc
index b85ea7314..2e8077565 100644
--- a/src/lib/audio_mapping.cc
+++ b/src/lib/audio_mapping.cc
@@ -41,7 +41,7 @@ int
AudioMapping::dcp_channels () const
{
for (list<pair<Channel, libdcp::Channel> >::const_iterator i = _content_to_dcp.begin(); i != _content_to_dcp.end(); ++i) {
- if (((int) i->second) > 2) {
+ if (((int) i->second) >= 2) {
return 6;
}
}
diff --git a/src/lib/encoder.cc b/src/lib/encoder.cc
index b897c8a31..d6a57ae6b 100644
--- a/src/lib/encoder.cc
+++ b/src/lib/encoder.cc
@@ -135,9 +135,9 @@ void
Encoder::process_end ()
{
#if HAVE_SWRESAMPLE
- if (_film->has_audio() && _film->audio_channels() && _swr_context) {
+ if (_film->has_audio() && _swr_context) {
- shared_ptr<AudioBuffers> out (new AudioBuffers (_film->audio_channels(), 256));
+ shared_ptr<AudioBuffers> out (new AudioBuffers (_film->audio_mapping().dcp_channels(), 256));
while (1) {
int const frames = swr_convert (_swr_context, (uint8_t **) out->data(), 256, 0, 0);
@@ -312,7 +312,7 @@ Encoder::process_audio (shared_ptr<AudioBuffers> data)
/* Compute the resampled frames count and add 32 for luck */
int const max_resampled_frames = ceil ((int64_t) data->frames() * _film->target_audio_sample_rate() / _film->audio_frame_rate()) + 32;
- shared_ptr<AudioBuffers> resampled (new AudioBuffers (_film->audio_channels(), max_resampled_frames));
+ shared_ptr<AudioBuffers> resampled (new AudioBuffers (_film->audio_mapping().dcp_channels(), max_resampled_frames));
/* Resample audio */
int const resampled_frames = swr_convert (
diff --git a/src/lib/player.cc b/src/lib/player.cc
index 92c2929ac..c77059b0a 100644
--- a/src/lib/player.cc
+++ b/src/lib/player.cc
@@ -92,8 +92,8 @@ Player::pass ()
}
}
- Audio (_sndfile_buffers);
- _sndfile_buffers.reset ();
+ Audio (_audio_buffers);
+ _audio_buffers.reset ();
}
return done;
@@ -126,22 +126,23 @@ Player::process_video (shared_ptr<Image> i, bool same, shared_ptr<Subtitle> s)
void
Player::process_audio (weak_ptr<const AudioContent> c, shared_ptr<AudioBuffers> b)
{
- if (_playlist->audio_from() == Playlist::AUDIO_SNDFILE) {
- AudioMapping mapping = _film->audio_mapping ();
- if (!_sndfile_buffers) {
- _sndfile_buffers.reset (new AudioBuffers (mapping.dcp_channels(), b->frames ()));
- _sndfile_buffers->make_silent ();
- }
+ AudioMapping mapping = _film->audio_mapping ();
+ if (!_audio_buffers) {
+ _audio_buffers.reset (new AudioBuffers (mapping.dcp_channels(), b->frames ()));
+ _audio_buffers->make_silent ();
+ }
- for (int i = 0; i < b->channels(); ++i) {
- list<libdcp::Channel> dcp = mapping.content_to_dcp (AudioMapping::Channel (c, i));
- for (list<libdcp::Channel>::iterator j = dcp.begin(); j != dcp.end(); ++j) {
- _sndfile_buffers->accumulate (b, i, static_cast<int> (*j));
- }
+ for (int i = 0; i < b->channels(); ++i) {
+ list<libdcp::Channel> dcp = mapping.content_to_dcp (AudioMapping::Channel (c, i));
+ for (list<libdcp::Channel>::iterator j = dcp.begin(); j != dcp.end(); ++j) {
+ _audio_buffers->accumulate (b, i, static_cast<int> (*j));
}
+ }
- } else {
- Audio (b);
+ if (_playlist->audio_from() == Playlist::AUDIO_FFMPEG) {
+ /* We can just emit this audio now as it will all be here */
+ Audio (_audio_buffers);
+ _audio_buffers.reset ();
}
}
diff --git a/src/lib/player.h b/src/lib/player.h
index 8a82ab298..7a99d6561 100644
--- a/src/lib/player.h
+++ b/src/lib/player.h
@@ -70,7 +70,7 @@ private:
std::list<boost::shared_ptr<VideoDecoder> >::iterator _video_decoder;
std::list<boost::shared_ptr<SndfileDecoder> > _sndfile_decoders;
- boost::shared_ptr<AudioBuffers> _sndfile_buffers;
+ boost::shared_ptr<AudioBuffers> _audio_buffers;
bool _video_sync;
};