Put in silence where there was none.
[dcpomatic.git] / src / lib / encoder.cc
index 6a99132fdfffc614233b4b8611fc37f768785438..ebe72b6cd8839073e3b934cbcde3141e74a12f64 100644 (file)
@@ -47,6 +47,7 @@ using std::stringstream;
 using std::vector;
 using std::list;
 using std::cout;
+using std::min;
 using std::make_pair;
 using namespace boost;
 
@@ -149,6 +150,20 @@ Encoder::process_end ()
        }
 #endif
 
+       if (_film->audio_channels() == 0 && _film->minimum_audio_channels() > 0) {
+               /* Put audio in where there is none at all */
+               int64_t af = video_frames_to_audio_frames (_video_frames_out, 48000, _film->dcp_frame_rate ());
+               while (af) {
+                       int64_t const this_time = min (af, 24000L);
+                       shared_ptr<AudioBuffers> out (new AudioBuffers (_film->minimum_audio_channels(), this_time));
+                       out->make_silent ();
+                       out->set_frames (this_time);
+                       write_audio (out);
+
+                       af -= this_time;
+               }
+       }
+
        boost::mutex::scoped_lock lock (_mutex);
 
        _film->log()->log (String::compose (N_("Clearing queue of %1"), _queue.size ()));