2 Copyright (C) 2015-2019 Carl Hetherington <cth@carlh.net>
4 This file is part of libdcp.
6 libdcp is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
11 libdcp is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with libdcp. If not, see <http://www.gnu.org/licenses/>.
19 In addition, as a special exception, the copyright holders give
20 permission to link the code of portions of this program with the
21 OpenSSL library under certain conditions as described in each
22 individual source file, and distribute linked combinations
25 You must obey the GNU General Public License in all respects
26 for all of the code used other than OpenSSL. If you modify
27 file(s) with this exception, you may extend this exception to your
28 version of the file(s), but you are not obligated to do so. If you
29 do not wish to do so, delete this exception statement from your
30 version. If you delete this exception statement from all source
31 files in the program, then also delete it here.
34 #include "interop_subtitle_asset.h"
35 #include "smpte_subtitle_asset.h"
36 #include "subtitle_string.h"
37 #include "subtitle_image.h"
38 #include "subtitle_asset_internal.h"
39 #include "reel_subtitle_asset.h"
45 #include <boost/test/unit_test.hpp>
48 using std::shared_ptr;
50 using boost::optional;
52 /** Test dcp::order::Font::take_intersection */
53 BOOST_AUTO_TEST_CASE (take_intersection_test)
56 A._values["foo"] = "bar";
57 A._values["fred"] = "jim";
60 B._values["foo"] = "bar";
61 B._values["sheila"] = "baz";
63 A.take_intersection (B);
64 BOOST_REQUIRE_EQUAL (A._values.size(), 1);
65 BOOST_CHECK_EQUAL (A._values["foo"], "bar");
70 A._values["foo"] = "bar";
71 A._values["fred"] = "jim";
73 B._values["foo"] = "hello";
74 B._values["sheila"] = "baz";
76 A.take_intersection (B);
77 BOOST_CHECK_EQUAL (A._values.size(), 0);
80 /** Test dcp::order::Font::take_difference */
81 BOOST_AUTO_TEST_CASE (take_difference_test)
84 A._values["foo"] = "bar";
85 A._values["fred"] = "jim";
88 B._values["foo"] = "bar";
89 B._values["sheila"] = "baz";
91 A.take_difference (B);
92 BOOST_REQUIRE_EQUAL (A._values.size(), 1);
93 BOOST_CHECK_EQUAL (A._values["fred"], "jim");
96 /** Test dcp::order::Subtitle::pull_fonts */
97 BOOST_AUTO_TEST_CASE (pull_fonts_test1)
99 shared_ptr<dcp::order::Part> root (new dcp::order::Part (shared_ptr<dcp::order::Part> ()));
100 shared_ptr<dcp::order::Subtitle> sub1 (new dcp::order::Subtitle (root, dcp::Time(), dcp::Time(), dcp::Time(), dcp::Time()));
101 root->children.push_back (sub1);
102 shared_ptr<dcp::order::Text> text1 (new dcp::order::Text (sub1, dcp::HALIGN_CENTER, 0, dcp::VALIGN_TOP, 0, dcp::DIRECTION_LTR));
103 sub1->children.push_back (text1);
104 text1->font._values["font"] = "Inconsolata";
105 text1->font._values["size"] = "42";
107 dcp::SubtitleAsset::pull_fonts (root);
109 BOOST_REQUIRE_EQUAL (sub1->font._values.size(), 2);
110 BOOST_CHECK_EQUAL (sub1->font._values["font"], "Inconsolata");
111 BOOST_CHECK_EQUAL (sub1->font._values["size"], "42");
112 BOOST_CHECK_EQUAL (text1->font._values.size(), 0);
115 /** Test dcp::order::Subtitle::pull_fonts */
116 BOOST_AUTO_TEST_CASE (pull_fonts_test2)
118 shared_ptr<dcp::order::Part> root (new dcp::order::Part (shared_ptr<dcp::order::Part> ()));
119 shared_ptr<dcp::order::Subtitle> sub1 (new dcp::order::Subtitle (root, dcp::Time(), dcp::Time(), dcp::Time(), dcp::Time()));
120 root->children.push_back (sub1);
121 shared_ptr<dcp::order::Text> text1 (new dcp::order::Text (sub1, dcp::HALIGN_CENTER, 0, dcp::VALIGN_TOP, 0, dcp::DIRECTION_LTR));
122 sub1->children.push_back (text1);
123 text1->font._values["font"] = "Inconsolata";
124 text1->font._values["size"] = "42";
125 shared_ptr<dcp::order::Text> text2 (new dcp::order::Text (sub1, dcp::HALIGN_CENTER, 0, dcp::VALIGN_TOP, 0, dcp::DIRECTION_LTR));
126 sub1->children.push_back (text2);
127 text2->font._values["font"] = "Inconsolata";
128 text2->font._values["size"] = "48";
130 dcp::SubtitleAsset::pull_fonts (root);
132 BOOST_REQUIRE_EQUAL (sub1->font._values.size(), 1);
133 BOOST_CHECK_EQUAL (sub1->font._values["font"], "Inconsolata");
134 BOOST_REQUIRE_EQUAL (text1->font._values.size(), 1);
135 BOOST_CHECK_EQUAL (text1->font._values["size"], "42");
136 BOOST_REQUIRE_EQUAL (text2->font._values.size(), 1);
137 BOOST_CHECK_EQUAL (text2->font._values["size"], "48");
140 /** Test dcp::order::Subtitle::pull_fonts */
141 BOOST_AUTO_TEST_CASE (pull_fonts_test3)
143 shared_ptr<dcp::order::Part> root (new dcp::order::Part (shared_ptr<dcp::order::Part> ()));
144 shared_ptr<dcp::order::Subtitle> sub1 (new dcp::order::Subtitle (root, dcp::Time(), dcp::Time(), dcp::Time(), dcp::Time()));
145 root->children.push_back (sub1);
146 shared_ptr<dcp::order::Text> text1 (new dcp::order::Text (sub1, dcp::HALIGN_CENTER, 0, dcp::VALIGN_TOP, 0, dcp::DIRECTION_LTR));
147 sub1->children.push_back (text1);
148 dcp::order::Font font;
149 font._values["font"] = "Inconsolata";
150 font._values["size"] = "42";
151 shared_ptr<dcp::order::String> string1 (new dcp::order::String (text1, font, "Hello world"));
152 text1->children.push_back (string1);
154 dcp::SubtitleAsset::pull_fonts (root);
156 BOOST_REQUIRE_EQUAL (sub1->font._values.size(), 2);
157 BOOST_CHECK_EQUAL (sub1->font._values["font"], "Inconsolata");
158 BOOST_CHECK_EQUAL (sub1->font._values["size"], "42");
161 /** Write some subtitle content as Interop XML and check that it is right */
162 BOOST_AUTO_TEST_CASE (write_interop_subtitle_test)
164 dcp::InteropSubtitleAsset c;
165 c.set_reel_number ("1");
166 c.set_language ("EN");
167 c.set_movie_title ("Test");
170 shared_ptr<dcp::Subtitle> (
171 new dcp::SubtitleString (
176 dcp::Colour (255, 255, 255),
179 dcp::Time (0, 4, 9, 22, 24),
180 dcp::Time (0, 4, 11, 22, 24),
188 dcp::Colour (0, 0, 0),
189 dcp::Time (0, 0, 0, 0, 24),
190 dcp::Time (0, 0, 0, 0, 24)
196 shared_ptr<dcp::Subtitle> (
197 new dcp::SubtitleString (
198 boost::optional<string> (),
202 dcp::Colour (128, 0, 64),
205 dcp::Time (5, 41, 0, 21, 24),
206 dcp::Time (6, 12, 15, 21, 24),
214 dcp::Colour (1, 2, 3),
215 dcp::Time (1, 2, 3, 4, 24),
216 dcp::Time (5, 6, 7, 8, 24)
221 c._id = "a6c58cff-3e1e-4b38-acec-a42224475ef6";
224 "<DCSubtitle Version=\"1.0\">"
225 "<SubtitleID>a6c58cff-3e1e-4b38-acec-a42224475ef6</SubtitleID>"
226 "<MovieTitle>Test</MovieTitle>"
227 "<ReelNumber>1</ReelNumber>"
228 "<Language>EN</Language>"
229 "<Font AspectAdjust=\"1.0\" Color=\"FFFFFFFF\" Effect=\"none\" EffectColor=\"FF000000\" Id=\"Frutiger\" Italic=\"no\" Script=\"normal\" Size=\"48\" Underlined=\"no\" Weight=\"normal\">"
230 "<Subtitle SpotNumber=\"1\" TimeIn=\"00:04:09:229\" TimeOut=\"00:04:11:229\" FadeUpTime=\"0\" FadeDownTime=\"0\">"
231 "<Text VAlign=\"top\" VPosition=\"80\">Hello world</Text>"
234 "<Font AspectAdjust=\"1.0\" Color=\"FF800040\" Effect=\"border\" EffectColor=\"FF010203\" Italic=\"yes\" Script=\"normal\" Size=\"91\" Underlined=\"yes\" Weight=\"bold\">"
235 "<Subtitle SpotNumber=\"2\" TimeIn=\"05:41:00:219\" TimeOut=\"06:12:15:219\" FadeUpTime=\"930792\" FadeDownTime=\"4591834\">"
236 "<Text VAlign=\"bottom\" VPosition=\"40\">What's going on</Text>"
245 /** Write some subtitle content as Interop XML and check that it is right.
246 * This test includes some horizontal alignment.
248 BOOST_AUTO_TEST_CASE (write_interop_subtitle_test2)
250 dcp::InteropSubtitleAsset c;
251 c.set_reel_number ("1");
252 c.set_language ("EN");
253 c.set_movie_title ("Test");
256 shared_ptr<dcp::Subtitle> (
257 new dcp::SubtitleString (
262 dcp::Colour (255, 255, 255),
265 dcp::Time (0, 4, 9, 22, 24),
266 dcp::Time (0, 4, 11, 22, 24),
274 dcp::Colour (0, 0, 0),
275 dcp::Time (0, 0, 0, 0, 24),
276 dcp::Time (0, 0, 0, 0, 24)
282 shared_ptr<dcp::Subtitle> (
283 new dcp::SubtitleString (
284 boost::optional<string> (),
288 dcp::Colour (128, 0, 64),
291 dcp::Time (5, 41, 0, 21, 24),
292 dcp::Time (6, 12, 15, 21, 24),
300 dcp::Colour (1, 2, 3),
301 dcp::Time (1, 2, 3, 4, 24),
302 dcp::Time (5, 6, 7, 8, 24)
307 c._id = "a6c58cff-3e1e-4b38-acec-a42224475ef6";
310 "<DCSubtitle Version=\"1.0\">"
311 "<SubtitleID>a6c58cff-3e1e-4b38-acec-a42224475ef6</SubtitleID>"
312 "<MovieTitle>Test</MovieTitle>"
313 "<ReelNumber>1</ReelNumber>"
314 "<Language>EN</Language>"
315 "<Font AspectAdjust=\"1.0\" Color=\"FFFFFFFF\" Effect=\"none\" EffectColor=\"FF000000\" Id=\"Frutiger\" Italic=\"no\" Script=\"normal\" Size=\"48\" Underlined=\"no\" Weight=\"normal\">"
316 "<Subtitle SpotNumber=\"1\" TimeIn=\"00:04:09:229\" TimeOut=\"00:04:11:229\" FadeUpTime=\"0\" FadeDownTime=\"0\">"
317 "<Text HPosition=\"-20\" VAlign=\"top\" VPosition=\"80\">Hello world</Text>"
320 "<Font AspectAdjust=\"1.0\" Color=\"FF800040\" Effect=\"border\" EffectColor=\"FF010203\" Italic=\"yes\" Script=\"normal\" Size=\"91\" Underlined=\"yes\" Weight=\"bold\">"
321 "<Subtitle SpotNumber=\"2\" TimeIn=\"05:41:00:219\" TimeOut=\"06:12:15:219\" FadeUpTime=\"930792\" FadeDownTime=\"4591834\">"
322 "<Text HPosition=\"-20\" VAlign=\"bottom\" VPosition=\"40\">What's going on</Text>"
331 /* Write some subtitle content as Interop XML using bitmaps and check that it is right */
332 BOOST_AUTO_TEST_CASE (write_interop_subtitle_test3)
336 shared_ptr<dcp::InteropSubtitleAsset> c (new dcp::InteropSubtitleAsset());
337 c->set_reel_number ("1");
338 c->set_language ("EN");
339 c->set_movie_title ("Test");
342 shared_ptr<dcp::Subtitle> (
343 new dcp::SubtitleImage (
344 dcp::ArrayData ("test/data/sub.png"),
345 dcp::Time (0, 4, 9, 22, 24),
346 dcp::Time (0, 4, 11, 22, 24),
351 dcp::Time (0, 0, 0, 0, 24),
352 dcp::Time (0, 0, 0, 0, 24)
357 c->_id = "a6c58cff-3e1e-4b38-acec-a42224475ef6";
358 boost::filesystem::remove_all ("build/test/write_interop_subtitle_test3");
359 boost::filesystem::create_directories ("build/test/write_interop_subtitle_test3");
360 c->write ("build/test/write_interop_subtitle_test3/subs.xml");
362 shared_ptr<dcp::Reel> reel (new dcp::Reel());
363 reel->add(shared_ptr<dcp::ReelSubtitleAsset>(new dcp::ReelSubtitleAsset(c, dcp::Fraction(24, 1), 6046, 0)));
365 string const issue_date = "2018-09-02T04:45:18+00:00";
366 string const issuer = "libdcp";
367 string const creator = "libdcp";
368 string const annotation_text = "Created by libdcp";
370 shared_ptr<dcp::CPL> cpl (new dcp::CPL ("My film", dcp::FEATURE));
372 cpl->set_issuer (issuer);
373 cpl->set_creator (creator);
374 cpl->set_issue_date (issue_date);
375 cpl->set_annotation_text (annotation_text);
376 optional<dcp::ContentVersion> cv = cpl->content_version();
378 cv->label_text = "foo";
379 cpl->set_content_version (*cv);
381 dcp::DCP dcp ("build/test/write_interop_subtitle_test3");
383 dcp.write_xml (dcp::INTEROP, issuer, creator, issue_date, annotation_text);
386 dcp::file_to_string("test/ref/write_interop_subtitle_test3/subs.xml"),
387 dcp::file_to_string("build/test/write_interop_subtitle_test3/subs.xml"),
390 check_file ("build/test/write_interop_subtitle_test3/d36f4bb3-c4fa-4a95-9915-6fec3110cd71.png", "test/data/sub.png");
393 dcp::file_to_string("test/ref/write_interop_subtitle_test3/ASSETMAP"),
394 dcp::file_to_string("build/test/write_interop_subtitle_test3/ASSETMAP"),
399 dcp::file_to_string("test/ref/write_interop_subtitle_test3/pkl.xml"),
400 dcp::file_to_string("build/test/write_interop_subtitle_test3/pkl_6a9e31a6-50a4-4ecb-8683-fa667848470a.xml"),
405 /* Write some subtitle content as SMPTE XML and check that it is right */
406 BOOST_AUTO_TEST_CASE (write_smpte_subtitle_test)
408 dcp::SMPTESubtitleAsset c;
409 c.set_reel_number (1);
410 c.set_language (dcp::LanguageTag("en"));
411 c.set_content_title_text ("Test");
412 c.set_issue_date (dcp::LocalTime ("2016-04-01T03:52:00+00:00"));
415 shared_ptr<dcp::Subtitle> (
416 new dcp::SubtitleString (
421 dcp::Colour (255, 255, 255),
424 dcp::Time (0, 4, 9, 22, 24),
425 dcp::Time (0, 4, 11, 22, 24),
433 dcp::Colour (0, 0, 0),
434 dcp::Time (0, 0, 0, 0, 24),
435 dcp::Time (0, 0, 0, 0, 24)
441 shared_ptr<dcp::Subtitle> (
442 new dcp::SubtitleString (
443 boost::optional<string> (),
447 dcp::Colour (128, 0, 64),
450 dcp::Time (5, 41, 0, 21, 24),
451 dcp::Time (6, 12, 15, 21, 24),
459 dcp::Colour (1, 2, 3),
460 dcp::Time (1, 2, 3, 4, 24),
461 dcp::Time (5, 6, 7, 8, 24)
466 c._xml_id = "a6c58cff-3e1e-4b38-acec-a42224475ef6";
469 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
470 "<dcst:SubtitleReel xmlns:dcst=\"http://www.smpte-ra.org/schemas/428-7/2010/DCST\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\">"
471 "<dcst:Id>urn:uuid:a6c58cff-3e1e-4b38-acec-a42224475ef6</dcst:Id>"
472 "<dcst:ContentTitleText>Test</dcst:ContentTitleText>"
473 "<dcst:IssueDate>2016-04-01T03:52:00.000+00:00</dcst:IssueDate>"
474 "<dcst:ReelNumber>1</dcst:ReelNumber>"
475 "<dcst:Language>en</dcst:Language>"
476 "<dcst:EditRate>24 1</dcst:EditRate>"
477 "<dcst:TimeCodeRate>24</dcst:TimeCodeRate>"
478 "<dcst:SubtitleList>"
479 "<dcst:Font AspectAdjust=\"1.0\" Color=\"FFFFFFFF\" Effect=\"none\" EffectColor=\"FF000000\" ID=\"Frutiger\" Italic=\"no\" Script=\"normal\" Size=\"48\" Underline=\"no\" Weight=\"normal\">"
480 "<dcst:Subtitle SpotNumber=\"1\" TimeIn=\"00:04:09:22\" TimeOut=\"00:04:11:22\" FadeUpTime=\"00:00:00:00\" FadeDownTime=\"00:00:00:00\">"
481 "<dcst:Text Valign=\"top\" Vposition=\"80\">Hello world</dcst:Text>"
484 "<dcst:Font AspectAdjust=\"1.0\" Color=\"FF800040\" Effect=\"border\" EffectColor=\"FF010203\" Italic=\"yes\" Script=\"normal\" Size=\"91\" Underline=\"yes\" Weight=\"bold\">"
485 "<dcst:Subtitle SpotNumber=\"2\" TimeIn=\"05:41:00:21\" TimeOut=\"06:12:15:21\" FadeUpTime=\"01:02:03:04\" FadeDownTime=\"05:06:07:08\">"
486 "<dcst:Text Valign=\"bottom\" Vposition=\"40\" Direction=\"rtl\">What's going on</dcst:Text>"
489 "</dcst:SubtitleList>"
490 "</dcst:SubtitleReel>",
496 /* Write some subtitle content as SMPTE XML and check that it is right.
497 This includes in-line font changes.
499 BOOST_AUTO_TEST_CASE (write_smpte_subtitle_test2)
501 dcp::SMPTESubtitleAsset c;
502 c.set_reel_number (1);
503 c.set_language (dcp::LanguageTag("en"));
504 c.set_content_title_text ("Test");
505 c.set_issue_date (dcp::LocalTime ("2016-04-01T03:52:00+00:00"));
508 shared_ptr<dcp::Subtitle> (
509 new dcp::SubtitleString (
514 dcp::Colour (255, 255, 255),
517 dcp::Time (0, 0, 1, 0, 24),
518 dcp::Time (0, 0, 9, 0, 24),
526 dcp::Colour (0, 0, 0),
527 dcp::Time (0, 0, 0, 0, 24),
528 dcp::Time (0, 0, 0, 0, 24)
534 shared_ptr<dcp::Subtitle> (
535 new dcp::SubtitleString (
540 dcp::Colour (255, 255, 255),
543 dcp::Time (0, 0, 1, 0, 24),
544 dcp::Time (0, 0, 9, 0, 24),
552 dcp::Colour (0, 0, 0),
553 dcp::Time (0, 0, 0, 0, 24),
554 dcp::Time (0, 0, 0, 0, 24)
560 shared_ptr<dcp::Subtitle> (
561 new dcp::SubtitleString (
566 dcp::Colour (255, 255, 255),
569 dcp::Time (0, 0, 1, 0, 24),
570 dcp::Time (0, 0, 9, 0, 24),
578 dcp::Colour (0, 0, 0),
579 dcp::Time (0, 0, 0, 0, 24),
580 dcp::Time (0, 0, 0, 0, 24)
586 shared_ptr<dcp::Subtitle> (
587 new dcp::SubtitleString (
592 dcp::Colour (255, 255, 255),
595 dcp::Time (0, 0, 1, 0, 24),
596 dcp::Time (0, 0, 9, 0, 24),
604 dcp::Colour (0, 0, 0),
605 dcp::Time (0, 0, 0, 0, 24),
606 dcp::Time (0, 0, 0, 0, 24)
612 shared_ptr<dcp::Subtitle> (
613 new dcp::SubtitleString (
618 dcp::Colour (255, 255, 255),
621 dcp::Time (0, 0, 1, 0, 24),
622 dcp::Time (0, 0, 9, 0, 24),
630 dcp::Colour (0, 0, 0),
631 dcp::Time (0, 0, 0, 0, 24),
632 dcp::Time (0, 0, 0, 0, 24)
638 shared_ptr<dcp::Subtitle> (
639 new dcp::SubtitleString (
644 dcp::Colour (255, 255, 255),
647 dcp::Time (0, 0, 1, 0, 24),
648 dcp::Time (0, 0, 9, 0, 24),
656 dcp::Colour (0, 0, 0),
657 dcp::Time (0, 0, 0, 0, 24),
658 dcp::Time (0, 0, 0, 0, 24)
663 c._xml_id = "a6c58cff-3e1e-4b38-acec-a42224475ef6";
667 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
668 "<dcst:SubtitleReel xmlns:dcst=\"http://www.smpte-ra.org/schemas/428-7/2010/DCST\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\">"
669 "<dcst:Id>urn:uuid:a6c58cff-3e1e-4b38-acec-a42224475ef6</dcst:Id>"
670 "<dcst:ContentTitleText>Test</dcst:ContentTitleText>"
671 "<dcst:IssueDate>2016-04-01T03:52:00.000+00:00</dcst:IssueDate>"
672 "<dcst:ReelNumber>1</dcst:ReelNumber>"
673 "<dcst:Language>en</dcst:Language>"
674 "<dcst:EditRate>24 1</dcst:EditRate>"
675 "<dcst:TimeCodeRate>24</dcst:TimeCodeRate>"
676 "<dcst:SubtitleList>"
677 "<dcst:Font AspectAdjust=\"1.0\" Color=\"FFFFFFFF\" Effect=\"none\" EffectColor=\"FF000000\" ID=\"Arial\" Script=\"normal\" Size=\"48\" Underline=\"no\" Weight=\"normal\">"
678 "<dcst:Subtitle SpotNumber=\"1\" TimeIn=\"00:00:01:00\" TimeOut=\"00:00:09:00\" FadeUpTime=\"00:00:00:00\" FadeDownTime=\"00:00:00:00\">"
679 "<dcst:Text Valign=\"top\" Vposition=\"80\">"
680 "<dcst:Font Italic=\"no\">Testing is </dcst:Font>"
681 "<dcst:Font Italic=\"yes\">really</dcst:Font>"
682 "<dcst:Font Italic=\"no\"> fun</dcst:Font>"
684 "<dcst:Text Valign=\"top\" Vposition=\"90\">"
685 "<dcst:Font Italic=\"no\">This is the </dcst:Font>"
686 "<dcst:Font Italic=\"yes\">second</dcst:Font>"
687 "<dcst:Font Italic=\"no\"> line</dcst:Font>"
691 "</dcst:SubtitleList>"
692 "</dcst:SubtitleReel>",
697 /* Write some subtitle content as SMPTE using bitmaps and check that it is right */
698 BOOST_AUTO_TEST_CASE (write_smpte_subtitle_test3)
700 dcp::SMPTESubtitleAsset c;
701 c.set_reel_number (1);
702 c.set_language (dcp::LanguageTag("en"));
703 c.set_content_title_text ("Test");
706 shared_ptr<dcp::Subtitle> (
707 new dcp::SubtitleImage (
708 dcp::ArrayData ("test/data/sub.png"),
709 dcp::Time (0, 4, 9, 22, 24),
710 dcp::Time (0, 4, 11, 22, 24),
715 dcp::Time (0, 0, 0, 0, 24),
716 dcp::Time (0, 0, 0, 0, 24)
721 c._id = "a6c58cff-3e1e-4b38-acec-a42224475ef6";
723 boost::filesystem::create_directories ("build/test/write_smpte_subtitle_test3");
724 c.write ("build/test/write_smpte_subtitle_test3/subs.mxf");
726 /* XXX: check this result when we can read them back in again */