summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2025-01-10 22:17:00 +0100
committerCarl Hetherington <cth@carlh.net>2025-01-12 02:05:06 +0100
commit5d9b8579950a4440b43a649c27fa36082144773d (patch)
tree97d30c04417b9b3e901c5cfc8fffed9d3bce8443
parent08e5e4e27d9ac58050f9ebe77a5679157c0ee891 (diff)
Put open captions into subtitles and closed subtitles into captions.
We could write them separately (libdcp supports this, AFAIK) but the Deluxe guidelines suggest not to use ClosedSubtitle or MainCaption.
-rw-r--r--src/lib/reel_writer.cc8
-rw-r--r--src/lib/writer.cc2
-rw-r--r--test/open_caption_test.cc46
-rw-r--r--test/wscript1
4 files changed, 57 insertions, 0 deletions
diff --git a/src/lib/reel_writer.cc b/src/lib/reel_writer.cc
index a66ac00a7..ec7fc9e39 100644
--- a/src/lib/reel_writer.cc
+++ b/src/lib/reel_writer.cc
@@ -900,9 +900,15 @@ ReelWriter::write(PlayerText subs, TextType type, optional<DCPTextTrack> track,
switch (type) {
case TextType::OPEN_SUBTITLE:
+ case TextType::OPEN_CAPTION:
+ /* We could create a separate MainCaption instead of merging these, but the Deluxe guidelines
+ * suggest not to use MainCaption.
+ */
asset = _subtitle_asset;
break;
case TextType::CLOSED_CAPTION:
+ case TextType::CLOSED_SUBTITLE:
+ /* Similarly it is advised by Deluxe not to use ClosedSubtitle */
DCPOMATIC_ASSERT (track);
asset = _closed_caption_assets[*track];
break;
@@ -916,9 +922,11 @@ ReelWriter::write(PlayerText subs, TextType type, optional<DCPTextTrack> track,
switch (type) {
case TextType::OPEN_SUBTITLE:
+ case TextType::OPEN_CAPTION:
_subtitle_asset = asset;
break;
case TextType::CLOSED_CAPTION:
+ case TextType::CLOSED_SUBTITLE:
DCPOMATIC_ASSERT (track);
_closed_caption_assets[*track] = asset;
break;
diff --git a/src/lib/writer.cc b/src/lib/writer.cc
index f1dceee6e..b1d21cae1 100644
--- a/src/lib/writer.cc
+++ b/src/lib/writer.cc
@@ -828,10 +828,12 @@ Writer::write (PlayerText text, TextType type, optional<DCPTextTrack> track, DCP
switch (type) {
case TextType::OPEN_SUBTITLE:
+ case TextType::OPEN_CAPTION:
reel = &_subtitle_reel;
_have_subtitles = true;
break;
case TextType::CLOSED_CAPTION:
+ case TextType::CLOSED_SUBTITLE:
DCPOMATIC_ASSERT (track);
DCPOMATIC_ASSERT (_caption_reels.find(*track) != _caption_reels.end());
reel = &_caption_reels[*track];
diff --git a/test/open_caption_test.cc b/test/open_caption_test.cc
new file mode 100644
index 000000000..06b08c151
--- /dev/null
+++ b/test/open_caption_test.cc
@@ -0,0 +1,46 @@
+/*
+ Copyright (C) 2025 Carl Hetherington <cth@carlh.net>
+
+ This file is part of DCP-o-matic.
+
+ DCP-o-matic is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ DCP-o-matic is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+
+
+#include "lib/content_factory.h"
+#include "lib/text_content.h"
+#include "test.h"
+#include <boost/test/unit_test.hpp>
+
+
+BOOST_AUTO_TEST_CASE(basic_open_caption_test)
+{
+ auto content = content_factory("test/data/15s.srt")[0];
+ auto film = new_test_film("basic_open_caption_test", { content });
+
+ content->text[0]->set_type(TextType::OPEN_CAPTION);
+
+ make_and_verify_dcp(
+ film,
+ {
+ dcp::VerificationNote::Code::MISSING_CPL_METADATA,
+ dcp::VerificationNote::Code::INVALID_SUBTITLE_FIRST_TEXT_TIME,
+ dcp::VerificationNote::Code::MISSING_SUBTITLE_LANGUAGE
+ }
+ );
+
+}
+
diff --git a/test/wscript b/test/wscript
index 1cbcab29f..8c02f8ebc 100644
--- a/test/wscript
+++ b/test/wscript
@@ -127,6 +127,7 @@ def build(bld):
map_cli_test.cc
mca_subdescriptors_test.cc
no_use_video_test.cc
+ open_caption_test.cc
optimise_stills_test.cc
overlap_video_test.cc
pixel_formats_test.cc