Don't write multiple <LoadFont> tags to Interop subtitles (#1273).
[dcpomatic.git] / src / lib / dcp_encoder.cc
index 5ee6cca982a596b5bc1728c5390bf2c5409a28f1..f1e819083a1728ffbf603386e52f0b5b5253dfd4 100644 (file)
@@ -56,8 +56,6 @@ using boost::dynamic_pointer_cast;
  */
 DCPEncoder::DCPEncoder (shared_ptr<const Film> film, weak_ptr<Job> job)
        : Encoder (film, job)
-       , _film (film)
-       , _job (job)
        , _finishing (false)
        , _non_burnt_subtitles (false)
 {
@@ -96,7 +94,18 @@ DCPEncoder::go ()
        }
 
        if (_non_burnt_subtitles) {
-               _writer->write (_player->get_subtitle_fonts ());
+               list<shared_ptr<Font> > fonts = _player->get_subtitle_fonts ();
+
+               if (fonts.size() > 1 && _film->interop()) {
+                       /* Interop will ignore second and subsequent <LoadFont>s so don't even
+                          write them as they upset some validators.
+                       */
+                       shared_ptr<Font> first = fonts.front ();
+                       fonts.clear ();
+                       fonts.push_back (first);
+               }
+
+               _writer->write (fonts);
        }
 
        while (!_player->pass ()) {}
@@ -124,7 +133,7 @@ DCPEncoder::video (shared_ptr<PlayerVideo> data, DCPTime time)
 void
 DCPEncoder::audio (shared_ptr<AudioBuffers> data, DCPTime time)
 {
-       _writer->write (data);
+       _writer->write (data, time);
 
        shared_ptr<Job> job = _job.lock ();
        DCPOMATIC_ASSERT (job);