From: Carl Hetherington Date: Sat, 13 Apr 2013 23:48:34 +0000 (+0100) Subject: Merge branch 'content-rework-take5' of /home/carl/git/dvdomatic into content-rework... X-Git-Tag: v2.0.48~1337^2~440^2 X-Git-Url: https://main.carlh.net/gitweb/?p=dcpomatic.git;a=commitdiff_plain;h=f90e90cdec39c7959c26e8199ee2170cedb4f256;hp=7ee21d16c01b90c22192cd10f118419881fe504e Merge branch 'content-rework-take5' of /home/carl/git/dvdomatic into content-rework-take5 --- 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 >::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 out (new AudioBuffers (_film->audio_channels(), 256)); + shared_ptr 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 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 resampled (new AudioBuffers (_film->audio_channels(), max_resampled_frames)); + shared_ptr 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 i, bool same, shared_ptr s) void Player::process_audio (weak_ptr c, shared_ptr 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 dcp = mapping.content_to_dcp (AudioMapping::Channel (c, i)); - for (list::iterator j = dcp.begin(); j != dcp.end(); ++j) { - _sndfile_buffers->accumulate (b, i, static_cast (*j)); - } + for (int i = 0; i < b->channels(); ++i) { + list dcp = mapping.content_to_dcp (AudioMapping::Channel (c, i)); + for (list::iterator j = dcp.begin(); j != dcp.end(); ++j) { + _audio_buffers->accumulate (b, i, static_cast (*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 >::iterator _video_decoder; std::list > _sndfile_decoders; - boost::shared_ptr _sndfile_buffers; + boost::shared_ptr _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 >::const_iterator i = _video.begin(); i != _video.end(); ++i) { t += (*i)->digest (); shared_ptr fc = dynamic_pointer_cast (*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 (); }