Allow more complete control over the libdcp/DCP-o-matic metadata written to various...
[dcpomatic.git] / src / lib / reel_writer.cc
index 49e09663ff1fed01d9caf5932eb90aeb6e63a158..3697fc7b147472992d1e00470ece76735994f637 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2012-2019 Carl Hetherington <cth@carlh.net>
+    Copyright (C) 2012-2020 Carl Hetherington <cth@carlh.net>
 
     This file is part of DCP-o-matic.
 
@@ -27,6 +27,7 @@
 #include "digester.h"
 #include "font.h"
 #include "compose.hpp"
+#include "config.h"
 #include "audio_buffers.h"
 #include "image.h"
 #include <dcp/mono_picture_asset.h>
@@ -65,14 +66,29 @@ using namespace dcpomatic;
 
 int const ReelWriter::_info_size = 48;
 
+static dcp::MXFMetadata
+mxf_metadata ()
+{
+       dcp::MXFMetadata meta;
+       Config* config = Config::instance();
+       if (!config->dcp_company_name().empty()) {
+               meta.company_name = config->dcp_company_name ();
+       }
+       if (!config->dcp_product_name().empty()) {
+               meta.product_name = config->dcp_product_name ();
+       }
+       if (!config->dcp_product_version().empty()) {
+               meta.product_version = config->dcp_product_version ();
+       }
+       return meta;
+}
+
 /** @param job Related job, or 0 */
 ReelWriter::ReelWriter (
        shared_ptr<const Film> film, DCPTimePeriod period, shared_ptr<Job> job, int reel_index, int reel_count, optional<string> content_summary
        )
        : _film (film)
        , _period (period)
-       , _last_written_video_frame (-1)
-       , _last_written_eyes (EYES_RIGHT)
        , _reel_index (reel_index)
        , _reel_count (reel_count)
        , _content_summary (content_summary)
@@ -115,6 +131,7 @@ ReelWriter::ReelWriter (
                }
 
                _picture_asset->set_size (_film->frame_size());
+               _picture_asset->set_metadata (mxf_metadata());
 
                if (_film->encrypted ()) {
                        _picture_asset->set_key (_film->key());
@@ -138,6 +155,8 @@ ReelWriter::ReelWriter (
                        new dcp::SoundAsset (dcp::Fraction (_film->video_frame_rate(), 1), _film->audio_frame_rate (), _film->audio_channels (), standard)
                        );
 
+               _sound_asset->set_metadata (mxf_metadata());
+
                if (_film->encrypted ()) {
                        _sound_asset->set_key (_film->key ());
                }
@@ -266,12 +285,10 @@ ReelWriter::write (optional<Data> encoded, Frame frame, Eyes eyes)
        dcp::FrameInfo fin = _picture_asset_writer->write (encoded->data().get (), encoded->size());
        write_frame_info (frame, eyes, fin);
        _last_written[eyes] = encoded;
-       _last_written_video_frame = frame;
-       _last_written_eyes = eyes;
 }
 
 void
-ReelWriter::fake_write (Frame frame, Eyes eyes, int size)
+ReelWriter::fake_write (int size)
 {
        if (!_picture_asset_writer) {
                /* We're not writing any data */
@@ -279,8 +296,6 @@ ReelWriter::fake_write (Frame frame, Eyes eyes, int size)
        }
 
        _picture_asset_writer->fake_write (size);
-       _last_written_video_frame = frame;
-       _last_written_eyes = eyes;
 }
 
 void
@@ -296,8 +311,6 @@ ReelWriter::repeat_write (Frame frame, Eyes eyes)
                _last_written[eyes]->size()
                );
        write_frame_info (frame, eyes, fin);
-       _last_written_video_frame = frame;
-       _last_written_eyes = eyes;
 }
 
 void
@@ -642,6 +655,7 @@ ReelWriter::write (PlayerText subs, TextType type, optional<DCPTextTrack> track,
                } else {
                        shared_ptr<dcp::SMPTESubtitleAsset> s (new dcp::SMPTESubtitleAsset ());
                        s->set_content_title_text (_film->name ());
+                       s->set_metadata (mxf_metadata());
                        if (type == TEXT_OPEN_SUBTITLE && !lang.empty()) {
                                s->set_language (lang);
                        } else {