Merge branch 'content-rework-take5' of /home/carl/git/dvdomatic into content-rework...
authorCarl Hetherington <cth@carlh.net>
Sat, 13 Apr 2013 23:48:34 +0000 (00:48 +0100)
committerCarl Hetherington <cth@carlh.net>
Sat, 13 Apr 2013 23:48:34 +0000 (00:48 +0100)
src/lib/audio_mapping.cc
src/lib/encoder.cc
src/lib/job.cc
src/lib/player.cc
src/lib/player.h
src/lib/playlist.cc
src/lib/transcoder.cc

index b85ea731402046347a58738be6d5bb550df7fdd3..2e807756566ec31a068437b99ec7038117f75880 100644 (file)
@@ -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;
                }
        }
index a8e3547a1bbfc0202d75457cc97cc15ff979a749..3201e6ecb5bd689cd04a4b81013c17a466791357 100644 (file)
@@ -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 (
index 2a4986f0ddc23cd18c0998a890aac70fc6a28680..812380594ec0ea247661951d93909773fbce2201 100644 (file)
@@ -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);
index 92c2929acacc18e6cf29f1565b08ca76aa3074c4..c77059b0ab546ce5fdb503fa12b6becce155e3e1 100644 (file)
@@ -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 ();
        }
 }
 
index dbfde09a671980a3bdd99ea33a99bef4b5203bbb..9a55b8599a4031dce55af54e202e060af32dda45 100644 (file)
@@ -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;
 };
index 58086d02b67cd3e57b3526d878829f71196f8fb9..7fe4fb2a5496c00cb83562eb606f426461a0b011 100644 (file)
@@ -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;
                }
        }
index e0e127d33b565da5133dd45069c4e9b49838726a..2a8ce50448c1ed31dc778767d702561e71d63522 100644 (file)
@@ -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 ();
        }