Split DCP panel up into general (at the top) then video/audio tabs.
[dcpomatic.git] / src / lib / writer.cc
index b1dbca0e0053f4fdda45881cba4db4e4aaaba1fc..c594a64464729e4ae33287deb06c64f457f234f4 100644 (file)
@@ -30,6 +30,7 @@
 #include <dcp/reel_subtitle_asset.h>
 #include <dcp/dcp.h>
 #include <dcp/cpl.h>
+#include <dcp/signer.h>
 #include "writer.h"
 #include "compose.hpp"
 #include "film.h"
@@ -124,6 +125,11 @@ Writer::Writer (shared_ptr<const Film> f, weak_ptr<Job> j)
                _sound_mxf_writer = _sound_mxf->start_write (_film->directory() / _film->audio_mxf_filename(), _film->interop() ? dcp::INTEROP : dcp::SMPTE);
        }
 
+       /* Check that the signer is OK if we need one */
+       if (_film->is_signed() && !Config::instance()->signer()->valid ()) {
+               throw InvalidSignerError ();
+       }
+
        _thread = new boost::thread (boost::bind (&Writer::thread, this));
 
        job->sub (_("Encoding image data"));
@@ -456,7 +462,15 @@ Writer::finish ()
 
        if (_subtitle_content) {
                _subtitle_content->write_xml (_film->dir (_film->dcp_name ()) / _film->subtitle_xml_filename ());
-               reel->add (shared_ptr<dcp::ReelSubtitleAsset> (new dcp::ReelSubtitleAsset (_subtitle_content, 0)));
+               reel->add (shared_ptr<dcp::ReelSubtitleAsset> (
+                                  new dcp::ReelSubtitleAsset (
+                                          _subtitle_content,
+                                          dcp::Fraction (_film->video_frame_rate(), 1),
+                                          _picture_mxf->intrinsic_duration (),
+                                          0
+                                          )
+                                  ));
+               
                dcp.add (_subtitle_content);
        }
        
@@ -476,7 +490,16 @@ Writer::finish ()
        dcp::XMLMetadata meta = Config::instance()->dcp_metadata ();
        meta.set_issue_date_now ();
 
-       dcp.write_xml (_film->interop () ? dcp::INTEROP : dcp::SMPTE, meta, _film->is_signed() ? make_signer () : shared_ptr<const dcp::Signer> ());
+       shared_ptr<const dcp::Signer> signer;
+       if (_film->is_signed ()) {
+               signer = Config::instance()->signer ();
+               /* We did check earlier, but check again here to be on the safe side */
+               if (!signer->valid ()) {
+                       throw InvalidSignerError ();
+               }
+       }
+
+       dcp.write_xml (_film->interop () ? dcp::INTEROP : dcp::SMPTE, meta, signer);
 
        LOG_GENERAL (
                N_("Wrote %1 FULL, %2 FAKE, %3 pushed to disk"), _full_written, _fake_written, _pushed_to_disk
@@ -581,9 +604,13 @@ Writer::can_fake_write (int frame) const
 void
 Writer::write (PlayerSubtitles subs)
 {
+       if (subs.text.empty ()) {
+               return;
+       }
+       
        if (!_subtitle_content) {
                _subtitle_content.reset (
-                       new dcp::SubtitleContent (dcp::Fraction (_film->video_frame_rate(), 1), _film->name(), _film->isdcf_metadata().subtitle_language)
+                       new dcp::SubtitleContent (_film->name(), _film->isdcf_metadata().subtitle_language)
                        );
        }