summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2021-04-12 22:18:47 +0200
committerCarl Hetherington <cth@carlh.net>2021-04-12 22:18:47 +0200
commitcc99556229bf35506c20377f4550665af6f5594a (patch)
treebef50bbc69a4ee9724a32d5ba8e854280451e969 /src/lib
parent43f83b3508829b9d773be69db4b010ac91f101b7 (diff)
Bump libdcp for some API improvements.
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/dcp_examiner.cc3
-rw-r--r--src/lib/film.cc5
-rw-r--r--src/lib/reel_writer.cc73
-rw-r--r--src/lib/types.cc3
-rw-r--r--src/lib/writer.cc4
5 files changed, 48 insertions, 40 deletions
diff --git a/src/lib/dcp_examiner.cc b/src/lib/dcp_examiner.cc
index ad2220fc0..b431cec26 100644
--- a/src/lib/dcp_examiner.cc
+++ b/src/lib/dcp_examiner.cc
@@ -277,8 +277,7 @@ DCPExaminer::DCPExaminer (shared_ptr<const DCPContent> content, bool tolerant)
_kdm_valid = false;
}
- DCPOMATIC_ASSERT (cpl->standard ());
- _standard = cpl->standard().get();
+ _standard = cpl->standard();
_three_d = !cpl->reels().empty() && cpl->reels().front()->main_picture() &&
dynamic_pointer_cast<dcp::StereoPictureAsset> (cpl->reels().front()->main_picture()->asset());
_ratings = cpl->ratings();
diff --git a/src/lib/film.cc b/src/lib/film.cc
index 50472bf41..53d91a378 100644
--- a/src/lib/film.cc
+++ b/src/lib/film.cc
@@ -65,6 +65,7 @@
#include <dcp/decrypted_kdm.h>
#include <dcp/raw_convert.h>
#include <dcp/reel_file_asset.h>
+#include <dcp/reel_encryptable_asset.h>
#include <dcp/reel_asset.h>
#include <libxml++/libxml++.h>
#include <boost/filesystem.hpp>
@@ -1664,9 +1665,9 @@ Film::make_kdm (
}
}
- map<shared_ptr<const dcp::ReelFileAsset>, dcp::Key> keys;
+ map<shared_ptr<const dcp::ReelEncryptableAsset>, dcp::Key> keys;
- for (auto i: cpl->reel_file_assets()) {
+ for (auto i: cpl->reel_encryptable_assets()) {
if (!i->key_id()) {
continue;
}
diff --git a/src/lib/reel_writer.cc b/src/lib/reel_writer.cc
index 2d88d7162..cd6a1a4b9 100644
--- a/src/lib/reel_writer.cc
+++ b/src/lib/reel_writer.cc
@@ -32,24 +32,26 @@
#include "image.h"
#include <dcp/atmos_asset.h>
#include <dcp/atmos_asset_writer.h>
+#include <dcp/certificate_chain.h>
+#include <dcp/cpl.h>
+#include <dcp/dcp.h>
+#include <dcp/interop_subtitle_asset.h>
#include <dcp/mono_picture_asset.h>
-#include <dcp/stereo_picture_asset.h>
-#include <dcp/sound_asset.h>
-#include <dcp/sound_asset_writer.h>
+#include <dcp/raw_convert.h>
#include <dcp/reel.h>
#include <dcp/reel_atmos_asset.h>
+#include <dcp/reel_interop_closed_caption_asset.h>
+#include <dcp/reel_interop_subtitle_asset.h>
+#include <dcp/reel_markers_asset.h>
#include <dcp/reel_mono_picture_asset.h>
-#include <dcp/reel_stereo_picture_asset.h>
+#include <dcp/reel_smpte_closed_caption_asset.h>
+#include <dcp/reel_smpte_subtitle_asset.h>
#include <dcp/reel_sound_asset.h>
-#include <dcp/reel_subtitle_asset.h>
-#include <dcp/reel_closed_caption_asset.h>
-#include <dcp/reel_markers_asset.h>
-#include <dcp/dcp.h>
-#include <dcp/cpl.h>
-#include <dcp/certificate_chain.h>
-#include <dcp/interop_subtitle_asset.h>
+#include <dcp/reel_stereo_picture_asset.h>
#include <dcp/smpte_subtitle_asset.h>
-#include <dcp/raw_convert.h>
+#include <dcp/sound_asset.h>
+#include <dcp/sound_asset_writer.h>
+#include <dcp/stereo_picture_asset.h>
#include <dcp/subtitle_image.h>
#include "i18n.h"
@@ -438,8 +440,8 @@ ReelWriter::finish (boost::filesystem::path output_dcp)
}
}
-template <class T>
-shared_ptr<T>
+template <class Interop, class SMPTE, class Result>
+shared_ptr<Result>
maybe_add_text (
shared_ptr<dcp::SubtitleAsset> asset,
int64_t picture_duration,
@@ -455,7 +457,7 @@ maybe_add_text (
{
Frame const period_duration = period.duration().frames_round(film->video_frame_rate());
- shared_ptr<T> reel_asset;
+ shared_ptr<Result> reel_asset;
if (asset) {
/* Add the font to the subtitle content */
@@ -463,33 +465,38 @@ maybe_add_text (
asset->add_font (j.id, j.data.get_value_or(default_font));
}
- if (dynamic_pointer_cast<dcp::InteropSubtitleAsset> (asset)) {
- auto directory = output_dcp / asset->id ();
+ if (auto interop = dynamic_pointer_cast<dcp::InteropSubtitleAsset>(asset)) {
+ auto directory = output_dcp / interop->id ();
boost::filesystem::create_directories (directory);
- asset->write (directory / ("sub_" + asset->id() + ".xml"));
- } else {
+ interop->write (directory / ("sub_" + interop->id() + ".xml"));
+ reel_asset = make_shared<Interop> (
+ interop,
+ dcp::Fraction(film->video_frame_rate(), 1),
+ picture_duration,
+ 0
+ );
+ } else if (auto smpte = dynamic_pointer_cast<dcp::SMPTESubtitleAsset>(asset)) {
/* All our assets should be the same length; use the picture asset length here
as a reference to set the subtitle one. We'll use the duration rather than
the intrinsic duration; we don't care if the picture asset has been trimmed, we're
just interested in its presentation length.
*/
- dynamic_pointer_cast<dcp::SMPTESubtitleAsset>(asset)->set_intrinsic_duration (picture_duration);
-
- asset->write (
+ smpte->set_intrinsic_duration(picture_duration);
+ smpte->write (
output_dcp / ("sub_" + asset->id() + ".mxf")
);
+ reel_asset = make_shared<SMPTE> (
+ smpte,
+ dcp::Fraction(film->video_frame_rate(), 1),
+ picture_duration,
+ 0
+ );
}
- reel_asset = make_shared<T> (
- asset,
- dcp::Fraction(film->video_frame_rate(), 1),
- picture_duration,
- 0
- );
} else {
/* We don't have a subtitle asset of our own; hopefully we have one to reference */
for (auto j: refs) {
- auto k = dynamic_pointer_cast<T> (j.asset);
+ auto k = dynamic_pointer_cast<Result> (j.asset);
if (k && j.period == period) {
reel_asset = k;
/* If we have a hash for this asset in the CPL, assume that it is correct */
@@ -622,7 +629,7 @@ ReelWriter::create_reel_text (
set<DCPTextTrack> ensure_closed_captions
) const
{
- auto subtitle = maybe_add_text<dcp::ReelSubtitleAsset> (
+ auto subtitle = maybe_add_text<dcp::ReelInteropSubtitleAsset, dcp::ReelSMPTESubtitleAsset, dcp::ReelSubtitleAsset> (
_subtitle_asset, duration, reel, refs, fonts, _default_font, film(), _period, output_dcp, _text_only
);
@@ -633,7 +640,7 @@ ReelWriter::create_reel_text (
}
} else if (ensure_subtitles) {
/* We had no subtitle asset, but we've been asked to make sure there is one */
- subtitle = maybe_add_text<dcp::ReelSubtitleAsset>(
+ subtitle = maybe_add_text<dcp::ReelInteropSubtitleAsset, dcp::ReelSMPTESubtitleAsset, dcp::ReelSubtitleAsset> (
empty_text_asset(TextType::OPEN_SUBTITLE, optional<DCPTextTrack>()),
duration,
reel,
@@ -648,7 +655,7 @@ ReelWriter::create_reel_text (
}
for (auto const& i: _closed_caption_assets) {
- auto a = maybe_add_text<dcp::ReelClosedCaptionAsset> (
+ auto a = maybe_add_text<dcp::ReelInteropClosedCaptionAsset, dcp::ReelSMPTEClosedCaptionAsset, dcp::ReelClosedCaptionAsset> (
i.second, duration, reel, refs, fonts, _default_font, film(), _period, output_dcp, _text_only
);
DCPOMATIC_ASSERT (a);
@@ -662,7 +669,7 @@ ReelWriter::create_reel_text (
/* Make empty tracks for anything we've been asked to ensure but that we haven't added */
for (auto i: ensure_closed_captions) {
- auto a = maybe_add_text<dcp::ReelClosedCaptionAsset> (
+ auto a = maybe_add_text<dcp::ReelInteropClosedCaptionAsset, dcp::ReelSMPTEClosedCaptionAsset, dcp::ReelClosedCaptionAsset> (
empty_text_asset(TextType::CLOSED_CAPTION, i), duration, reel, refs, fonts, _default_font, film(), _period, output_dcp, _text_only
);
DCPOMATIC_ASSERT (a);
diff --git a/src/lib/types.cc b/src/lib/types.cc
index b7632a984..dbbae3e6a 100644
--- a/src/lib/types.cc
+++ b/src/lib/types.cc
@@ -26,6 +26,7 @@
#include <dcp/cpl.h>
#include <dcp/dcp.h>
#include <dcp/reel_file_asset.h>
+#include <dcp/reel_encryptable_asset.h>
#include <dcp/reel_asset.h>
DCPOMATIC_DISABLE_WARNINGS
#include <libxml++/libxml++.h>
@@ -213,7 +214,7 @@ CPLSummary::CPLSummary (boost::filesystem::path p)
encrypted = false;
for (auto j: dcp.cpls()) {
- for (auto k: j->reel_file_assets()) {
+ for (auto k: j->reel_encryptable_assets()) {
if (k->key_id()) {
encrypted = true;
}
diff --git a/src/lib/writer.cc b/src/lib/writer.cc
index 0285255e0..81b77d5ce 100644
--- a/src/lib/writer.cc
+++ b/src/lib/writer.cc
@@ -555,7 +555,8 @@ Writer::finish (boost::filesystem::path output_dcp)
auto cpl = make_shared<dcp::CPL>(
film()->dcp_name(),
- film()->dcp_content_type()->libdcp_kind()
+ film()->dcp_content_type()->libdcp_kind(),
+ film()->interop() ? dcp::Standard::INTEROP : dcp::Standard::SMPTE
);
dcp.add (cpl);
@@ -676,7 +677,6 @@ Writer::finish (boost::filesystem::path output_dcp)
}
dcp.write_xml (
- film()->interop() ? dcp::Standard::INTEROP : dcp::Standard::SMPTE,
issuer,
creator,
dcp::LocalTime().as_string(),