summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2013-04-14 14:09:29 +0100
committerCarl Hetherington <cth@carlh.net>2013-04-14 14:09:29 +0100
commite234776046e3c735c85063e1c5a7691093a4a722 (patch)
tree573a9fafed8e04845baa8fa86535f5a0afc81673 /src
parent133afe16d6149effe39a061311d2832c30a77222 (diff)
parentf90e90cdec39c7959c26e8199ee2170cedb4f256 (diff)
Merge branch 'content-rework-take5' of ssh://houllier/home/carl/git/dvdomatic into content-rework-take5
Diffstat (limited to 'src')
-rw-r--r--src/lib/audio_mapping.cc2
-rw-r--r--src/lib/encoder.cc6
-rw-r--r--src/lib/job.cc14
-rw-r--r--src/lib/player.cc31
-rw-r--r--src/lib/player.h2
-rw-r--r--src/lib/playlist.cc2
-rw-r--r--src/lib/transcoder.cc16
7 files changed, 36 insertions, 37 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 a8e3547a1..3201e6ecb 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/job.cc b/src/lib/job.cc
index 2a4986f0d..812380594 100644
--- a/src/lib/job.cc
+++ b/src/lib/job.cc
@@ -68,11 +68,15 @@ Job::run_wrapper ()
set_state (FINISHED_ERROR);
string m = String::compose (_("An error occurred whilst handling the file %1."), boost::filesystem::path (e.filename()).leaf());
-
- boost::filesystem::space_info const s = boost::filesystem::space (e.filename());
- if (s.available < pow (1024, 3)) {
- m += N_("\n\n");
- m += _("The drive that the film is stored on is low in disc space. Free some more space and try again.");
+
+ try {
+ boost::filesystem::space_info const s = boost::filesystem::space (e.filename());
+ if (s.available < pow (1024, 3)) {
+ m += N_("\n\n");
+ m += _("The drive that the film is stored on is low in disc space. Free some more space and try again.");
+ }
+ } catch (...) {
+
}
set_error (e.what(), m);
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 dbfde09a6..9a55b8599 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;
};
diff --git a/src/lib/playlist.cc b/src/lib/playlist.cc
index 58086d02b..7fe4fb2a5 100644
--- a/src/lib/playlist.cc
+++ b/src/lib/playlist.cc
@@ -288,7 +288,7 @@ Playlist::video_digest () const
for (list<shared_ptr<const VideoContent> >::const_iterator i = _video.begin(); i != _video.end(); ++i) {
t += (*i)->digest ();
shared_ptr<const FFmpegContent> fc = dynamic_pointer_cast<const FFmpegContent> (*i);
- if (fc) {
+ if (fc && fc->subtitle_stream()) {
t += fc->subtitle_stream()->id;
}
}
diff --git a/src/lib/transcoder.cc b/src/lib/transcoder.cc
index e0e127d33..2a8ce5044 100644
--- a/src/lib/transcoder.cc
+++ b/src/lib/transcoder.cc
@@ -79,19 +79,13 @@ void
Transcoder::go ()
{
_encoder->process_begin ();
- try {
- while (1) {
- if (_player->pass ()) {
- break;
- }
- _player->set_progress (_job);
+ while (1) {
+ if (_player->pass ()) {
+ break;
}
-
- } catch (...) {
- _encoder->process_end ();
- throw;
+ _player->set_progress (_job);
}
-
+
if (_delay_line) {
_delay_line->process_end ();
}