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>
49 using boost::shared_ptr;
51 /** Test dcp::order::Font::take_intersection */
52 BOOST_AUTO_TEST_CASE (take_intersection_test)
55 A._values["foo"] = "bar";
56 A._values["fred"] = "jim";
59 B._values["foo"] = "bar";
60 B._values["sheila"] = "baz";
62 A.take_intersection (B);
63 BOOST_REQUIRE_EQUAL (A._values.size(), 1);
64 BOOST_CHECK_EQUAL (A._values["foo"], "bar");
69 A._values["foo"] = "bar";
70 A._values["fred"] = "jim";
72 B._values["foo"] = "hello";
73 B._values["sheila"] = "baz";
75 A.take_intersection (B);
76 BOOST_CHECK_EQUAL (A._values.size(), 0);
79 /** Test dcp::order::Font::take_difference */
80 BOOST_AUTO_TEST_CASE (take_difference_test)
83 A._values["foo"] = "bar";
84 A._values["fred"] = "jim";
87 B._values["foo"] = "bar";
88 B._values["sheila"] = "baz";
90 A.take_difference (B);
91 BOOST_REQUIRE_EQUAL (A._values.size(), 1);
92 BOOST_CHECK_EQUAL (A._values["fred"], "jim");
95 /** Test dcp::order::Subtitle::pull_fonts */
96 BOOST_AUTO_TEST_CASE (pull_fonts_test1)
98 shared_ptr<dcp::order::Part> root (new dcp::order::Part (shared_ptr<dcp::order::Part> ()));
99 shared_ptr<dcp::order::Subtitle> sub1 (new dcp::order::Subtitle (root, dcp::Time(), dcp::Time(), dcp::Time(), dcp::Time()));
100 root->children.push_back (sub1);
101 shared_ptr<dcp::order::Text> text1 (new dcp::order::Text (sub1, dcp::HALIGN_CENTER, 0, dcp::VALIGN_TOP, 0, dcp::DIRECTION_LTR));
102 sub1->children.push_back (text1);
103 text1->font._values["font"] = "Inconsolata";
104 text1->font._values["size"] = "42";
106 dcp::SubtitleAsset::pull_fonts (root);
108 BOOST_REQUIRE_EQUAL (sub1->font._values.size(), 2);
109 BOOST_CHECK_EQUAL (sub1->font._values["font"], "Inconsolata");
110 BOOST_CHECK_EQUAL (sub1->font._values["size"], "42");
111 BOOST_CHECK_EQUAL (text1->font._values.size(), 0);
114 /** Test dcp::order::Subtitle::pull_fonts */
115 BOOST_AUTO_TEST_CASE (pull_fonts_test2)
117 shared_ptr<dcp::order::Part> root (new dcp::order::Part (shared_ptr<dcp::order::Part> ()));
118 shared_ptr<dcp::order::Subtitle> sub1 (new dcp::order::Subtitle (root, dcp::Time(), dcp::Time(), dcp::Time(), dcp::Time()));
119 root->children.push_back (sub1);
120 shared_ptr<dcp::order::Text> text1 (new dcp::order::Text (sub1, dcp::HALIGN_CENTER, 0, dcp::VALIGN_TOP, 0, dcp::DIRECTION_LTR));
121 sub1->children.push_back (text1);
122 text1->font._values["font"] = "Inconsolata";
123 text1->font._values["size"] = "42";
124 shared_ptr<dcp::order::Text> text2 (new dcp::order::Text (sub1, dcp::HALIGN_CENTER, 0, dcp::VALIGN_TOP, 0, dcp::DIRECTION_LTR));
125 sub1->children.push_back (text2);
126 text2->font._values["font"] = "Inconsolata";
127 text2->font._values["size"] = "48";
129 dcp::SubtitleAsset::pull_fonts (root);
131 BOOST_REQUIRE_EQUAL (sub1->font._values.size(), 1);
132 BOOST_CHECK_EQUAL (sub1->font._values["font"], "Inconsolata");
133 BOOST_REQUIRE_EQUAL (text1->font._values.size(), 1);
134 BOOST_CHECK_EQUAL (text1->font._values["size"], "42");
135 BOOST_REQUIRE_EQUAL (text2->font._values.size(), 1);
136 BOOST_CHECK_EQUAL (text2->font._values["size"], "48");
139 /** Test dcp::order::Subtitle::pull_fonts */
140 BOOST_AUTO_TEST_CASE (pull_fonts_test3)
142 shared_ptr<dcp::order::Part> root (new dcp::order::Part (shared_ptr<dcp::order::Part> ()));
143 shared_ptr<dcp::order::Subtitle> sub1 (new dcp::order::Subtitle (root, dcp::Time(), dcp::Time(), dcp::Time(), dcp::Time()));
144 root->children.push_back (sub1);
145 shared_ptr<dcp::order::Text> text1 (new dcp::order::Text (sub1, dcp::HALIGN_CENTER, 0, dcp::VALIGN_TOP, 0, dcp::DIRECTION_LTR));
146 sub1->children.push_back (text1);
147 dcp::order::Font font;
148 font._values["font"] = "Inconsolata";
149 font._values["size"] = "42";
150 shared_ptr<dcp::order::String> string1 (new dcp::order::String (text1, font, "Hello world"));
151 text1->children.push_back (string1);
153 dcp::SubtitleAsset::pull_fonts (root);
155 BOOST_REQUIRE_EQUAL (sub1->font._values.size(), 2);
156 BOOST_CHECK_EQUAL (sub1->font._values["font"], "Inconsolata");
157 BOOST_CHECK_EQUAL (sub1->font._values["size"], "42");
160 /** Write some subtitle content as Interop XML and check that it is right */
161 BOOST_AUTO_TEST_CASE (write_interop_subtitle_test)
163 dcp::InteropSubtitleAsset c;
164 c.set_reel_number ("1");
165 c.set_language ("EN");
166 c.set_movie_title ("Test");
169 shared_ptr<dcp::Subtitle> (
170 new dcp::SubtitleString (
175 dcp::Colour (255, 255, 255),
178 dcp::Time (0, 4, 9, 22, 24),
179 dcp::Time (0, 4, 11, 22, 24),
187 dcp::Colour (0, 0, 0),
188 dcp::Time (0, 0, 0, 0, 24),
189 dcp::Time (0, 0, 0, 0, 24)
195 shared_ptr<dcp::Subtitle> (
196 new dcp::SubtitleString (
197 boost::optional<string> (),
201 dcp::Colour (128, 0, 64),
204 dcp::Time (5, 41, 0, 21, 24),
205 dcp::Time (6, 12, 15, 21, 24),
213 dcp::Colour (1, 2, 3),
214 dcp::Time (1, 2, 3, 4, 24),
215 dcp::Time (5, 6, 7, 8, 24)
220 c._id = "a6c58cff-3e1e-4b38-acec-a42224475ef6";
223 "<DCSubtitle Version=\"1.0\">"
224 "<SubtitleID>a6c58cff-3e1e-4b38-acec-a42224475ef6</SubtitleID>"
225 "<MovieTitle>Test</MovieTitle>"
226 "<ReelNumber>1</ReelNumber>"
227 "<Language>EN</Language>"
228 "<Font AspectAdjust=\"1.0\" Color=\"FFFFFFFF\" Effect=\"none\" EffectColor=\"FF000000\" Id=\"Frutiger\" Italic=\"no\" Script=\"normal\" Size=\"48\" Underlined=\"no\" Weight=\"normal\">"
229 "<Subtitle SpotNumber=\"1\" TimeIn=\"00:04:09:229\" TimeOut=\"00:04:11:229\" FadeUpTime=\"0\" FadeDownTime=\"0\">"
230 "<Text VAlign=\"top\" VPosition=\"80\">Hello world</Text>"
233 "<Font AspectAdjust=\"1.0\" Color=\"FF800040\" Effect=\"border\" EffectColor=\"FF010203\" Italic=\"yes\" Script=\"normal\" Size=\"91\" Underlined=\"yes\" Weight=\"bold\">"
234 "<Subtitle SpotNumber=\"2\" TimeIn=\"05:41:00:219\" TimeOut=\"06:12:15:219\" FadeUpTime=\"930792\" FadeDownTime=\"4591834\">"
235 "<Text VAlign=\"bottom\" VPosition=\"40\">What's going on</Text>"
244 /** Write some subtitle content as Interop XML and check that it is right.
245 * This test includes some horizontal alignment.
247 BOOST_AUTO_TEST_CASE (write_interop_subtitle_test2)
249 dcp::InteropSubtitleAsset c;
250 c.set_reel_number ("1");
251 c.set_language ("EN");
252 c.set_movie_title ("Test");
255 shared_ptr<dcp::Subtitle> (
256 new dcp::SubtitleString (
261 dcp::Colour (255, 255, 255),
264 dcp::Time (0, 4, 9, 22, 24),
265 dcp::Time (0, 4, 11, 22, 24),
273 dcp::Colour (0, 0, 0),
274 dcp::Time (0, 0, 0, 0, 24),
275 dcp::Time (0, 0, 0, 0, 24)
281 shared_ptr<dcp::Subtitle> (
282 new dcp::SubtitleString (
283 boost::optional<string> (),
287 dcp::Colour (128, 0, 64),
290 dcp::Time (5, 41, 0, 21, 24),
291 dcp::Time (6, 12, 15, 21, 24),
299 dcp::Colour (1, 2, 3),
300 dcp::Time (1, 2, 3, 4, 24),
301 dcp::Time (5, 6, 7, 8, 24)
306 c._id = "a6c58cff-3e1e-4b38-acec-a42224475ef6";
309 "<DCSubtitle Version=\"1.0\">"
310 "<SubtitleID>a6c58cff-3e1e-4b38-acec-a42224475ef6</SubtitleID>"
311 "<MovieTitle>Test</MovieTitle>"
312 "<ReelNumber>1</ReelNumber>"
313 "<Language>EN</Language>"
314 "<Font AspectAdjust=\"1.0\" Color=\"FFFFFFFF\" Effect=\"none\" EffectColor=\"FF000000\" Id=\"Frutiger\" Italic=\"no\" Script=\"normal\" Size=\"48\" Underlined=\"no\" Weight=\"normal\">"
315 "<Subtitle SpotNumber=\"1\" TimeIn=\"00:04:09:229\" TimeOut=\"00:04:11:229\" FadeUpTime=\"0\" FadeDownTime=\"0\">"
316 "<Text HPosition=\"-20\" VAlign=\"top\" VPosition=\"80\">Hello world</Text>"
319 "<Font AspectAdjust=\"1.0\" Color=\"FF800040\" Effect=\"border\" EffectColor=\"FF010203\" Italic=\"yes\" Script=\"normal\" Size=\"91\" Underlined=\"yes\" Weight=\"bold\">"
320 "<Subtitle SpotNumber=\"2\" TimeIn=\"05:41:00:219\" TimeOut=\"06:12:15:219\" FadeUpTime=\"930792\" FadeDownTime=\"4591834\">"
321 "<Text HPosition=\"-20\" VAlign=\"bottom\" VPosition=\"40\">What's going on</Text>"
330 /* Write some subtitle content as Interop XML using bitmaps and check that it is right */
331 BOOST_AUTO_TEST_CASE (write_interop_subtitle_test3)
335 shared_ptr<dcp::InteropSubtitleAsset> c (new dcp::InteropSubtitleAsset());
336 c->set_reel_number ("1");
337 c->set_language ("EN");
338 c->set_movie_title ("Test");
341 shared_ptr<dcp::Subtitle> (
342 new dcp::SubtitleImage (
343 dcp::Data ("test/data/sub.png"),
344 dcp::Time (0, 4, 9, 22, 24),
345 dcp::Time (0, 4, 11, 22, 24),
350 dcp::Time (0, 0, 0, 0, 24),
351 dcp::Time (0, 0, 0, 0, 24)
356 c->_id = "a6c58cff-3e1e-4b38-acec-a42224475ef6";
357 boost::filesystem::remove_all ("build/test/write_interop_subtitle_test3");
358 boost::filesystem::create_directories ("build/test/write_interop_subtitle_test3");
359 c->write ("build/test/write_interop_subtitle_test3/subs.xml");
361 shared_ptr<dcp::Reel> reel (new dcp::Reel());
362 reel->add(shared_ptr<dcp::ReelSubtitleAsset>(new dcp::ReelSubtitleAsset(c, dcp::Fraction(24, 1), 6046, 0)));
364 string const issue_date = "2018-09-02T04:45:18+00:00";
365 string const issuer = "libdcp";
366 string const creator = "libdcp";
367 string const annotation_text = "Created by libdcp";
369 shared_ptr<dcp::CPL> cpl (new dcp::CPL ("My film", dcp::FEATURE));
371 cpl->set_issuer (issuer);
372 cpl->set_creator (creator);
373 cpl->set_issue_date (issue_date);
374 cpl->set_annotation_text (annotation_text);
375 dcp::ContentVersion cv = cpl->content_version ();
376 cv.label_text = "foo";
377 cpl->set_content_version (cv);
379 dcp::DCP dcp ("build/test/write_interop_subtitle_test3");
381 dcp.write_xml (dcp::INTEROP, issuer, creator, issue_date, annotation_text);
384 dcp::file_to_string("test/ref/write_interop_subtitle_test3/subs.xml"),
385 dcp::file_to_string("build/test/write_interop_subtitle_test3/subs.xml"),
388 check_file ("build/test/write_interop_subtitle_test3/d36f4bb3-c4fa-4a95-9915-6fec3110cd71.png", "test/data/sub.png");
391 dcp::file_to_string("test/ref/write_interop_subtitle_test3/ASSETMAP"),
392 dcp::file_to_string("build/test/write_interop_subtitle_test3/ASSETMAP"),
397 dcp::file_to_string("test/ref/write_interop_subtitle_test3/pkl.xml"),
398 dcp::file_to_string("build/test/write_interop_subtitle_test3/pkl_6a9e31a6-50a4-4ecb-8683-fa667848470a.xml"),
403 /* Write some subtitle content as SMPTE XML and check that it is right */
404 BOOST_AUTO_TEST_CASE (write_smpte_subtitle_test)
406 dcp::SMPTESubtitleAsset c;
407 c.set_reel_number (1);
408 c.set_language ("EN");
409 c.set_content_title_text ("Test");
410 c.set_issue_date (dcp::LocalTime ("2016-04-01T03:52:00+00:00"));
413 shared_ptr<dcp::Subtitle> (
414 new dcp::SubtitleString (
419 dcp::Colour (255, 255, 255),
422 dcp::Time (0, 4, 9, 22, 24),
423 dcp::Time (0, 4, 11, 22, 24),
431 dcp::Colour (0, 0, 0),
432 dcp::Time (0, 0, 0, 0, 24),
433 dcp::Time (0, 0, 0, 0, 24)
439 shared_ptr<dcp::Subtitle> (
440 new dcp::SubtitleString (
441 boost::optional<string> (),
445 dcp::Colour (128, 0, 64),
448 dcp::Time (5, 41, 0, 21, 24),
449 dcp::Time (6, 12, 15, 21, 24),
457 dcp::Colour (1, 2, 3),
458 dcp::Time (1, 2, 3, 4, 24),
459 dcp::Time (5, 6, 7, 8, 24)
464 c._xml_id = "a6c58cff-3e1e-4b38-acec-a42224475ef6";
467 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
468 "<dcst:SubtitleReel xmlns:dcst=\"http://www.smpte-ra.org/schemas/428-7/2010/DCST\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\">"
469 "<dcst:Id>urn:uuid:a6c58cff-3e1e-4b38-acec-a42224475ef6</dcst:Id>"
470 "<dcst:ContentTitleText>Test</dcst:ContentTitleText>"
471 "<dcst:IssueDate>2016-04-01T03:52:00.000+00:00</dcst:IssueDate>"
472 "<dcst:ReelNumber>1</dcst:ReelNumber>"
473 "<dcst:Language>EN</dcst:Language>"
474 "<dcst:EditRate>24 1</dcst:EditRate>"
475 "<dcst:TimeCodeRate>24</dcst:TimeCodeRate>"
476 "<dcst:SubtitleList>"
477 "<dcst:Font AspectAdjust=\"1.0\" Color=\"FFFFFFFF\" Effect=\"none\" EffectColor=\"FF000000\" ID=\"Frutiger\" Italic=\"no\" Script=\"normal\" Size=\"48\" Underline=\"no\" Weight=\"normal\">"
478 "<dcst:Subtitle SpotNumber=\"1\" TimeIn=\"00:04:09:22\" TimeOut=\"00:04:11:22\" FadeUpTime=\"00:00:00:00\" FadeDownTime=\"00:00:00:00\">"
479 "<dcst:Text Valign=\"top\" Vposition=\"80\">Hello world</dcst:Text>"
482 "<dcst:Font AspectAdjust=\"1.0\" Color=\"FF800040\" Effect=\"border\" EffectColor=\"FF010203\" Italic=\"yes\" Script=\"normal\" Size=\"91\" Underline=\"yes\" Weight=\"bold\">"
483 "<dcst:Subtitle SpotNumber=\"2\" TimeIn=\"05:41:00:21\" TimeOut=\"06:12:15:21\" FadeUpTime=\"01:02:03:04\" FadeDownTime=\"05:06:07:08\">"
484 "<dcst:Text Valign=\"bottom\" Vposition=\"40\" Direction=\"rtl\">What's going on</dcst:Text>"
487 "</dcst:SubtitleList>"
488 "</dcst:SubtitleReel>",
494 /* Write some subtitle content as SMPTE XML and check that it is right.
495 This includes in-line font changes.
497 BOOST_AUTO_TEST_CASE (write_smpte_subtitle_test2)
499 dcp::SMPTESubtitleAsset c;
500 c.set_reel_number (1);
501 c.set_language ("EN");
502 c.set_content_title_text ("Test");
503 c.set_issue_date (dcp::LocalTime ("2016-04-01T03:52:00+00:00"));
506 shared_ptr<dcp::Subtitle> (
507 new dcp::SubtitleString (
512 dcp::Colour (255, 255, 255),
515 dcp::Time (0, 0, 1, 0, 24),
516 dcp::Time (0, 0, 9, 0, 24),
524 dcp::Colour (0, 0, 0),
525 dcp::Time (0, 0, 0, 0, 24),
526 dcp::Time (0, 0, 0, 0, 24)
532 shared_ptr<dcp::Subtitle> (
533 new dcp::SubtitleString (
538 dcp::Colour (255, 255, 255),
541 dcp::Time (0, 0, 1, 0, 24),
542 dcp::Time (0, 0, 9, 0, 24),
550 dcp::Colour (0, 0, 0),
551 dcp::Time (0, 0, 0, 0, 24),
552 dcp::Time (0, 0, 0, 0, 24)
558 shared_ptr<dcp::Subtitle> (
559 new dcp::SubtitleString (
564 dcp::Colour (255, 255, 255),
567 dcp::Time (0, 0, 1, 0, 24),
568 dcp::Time (0, 0, 9, 0, 24),
576 dcp::Colour (0, 0, 0),
577 dcp::Time (0, 0, 0, 0, 24),
578 dcp::Time (0, 0, 0, 0, 24)
584 shared_ptr<dcp::Subtitle> (
585 new dcp::SubtitleString (
590 dcp::Colour (255, 255, 255),
593 dcp::Time (0, 0, 1, 0, 24),
594 dcp::Time (0, 0, 9, 0, 24),
602 dcp::Colour (0, 0, 0),
603 dcp::Time (0, 0, 0, 0, 24),
604 dcp::Time (0, 0, 0, 0, 24)
610 shared_ptr<dcp::Subtitle> (
611 new dcp::SubtitleString (
616 dcp::Colour (255, 255, 255),
619 dcp::Time (0, 0, 1, 0, 24),
620 dcp::Time (0, 0, 9, 0, 24),
628 dcp::Colour (0, 0, 0),
629 dcp::Time (0, 0, 0, 0, 24),
630 dcp::Time (0, 0, 0, 0, 24)
636 shared_ptr<dcp::Subtitle> (
637 new dcp::SubtitleString (
642 dcp::Colour (255, 255, 255),
645 dcp::Time (0, 0, 1, 0, 24),
646 dcp::Time (0, 0, 9, 0, 24),
654 dcp::Colour (0, 0, 0),
655 dcp::Time (0, 0, 0, 0, 24),
656 dcp::Time (0, 0, 0, 0, 24)
661 c._xml_id = "a6c58cff-3e1e-4b38-acec-a42224475ef6";
665 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
666 "<dcst:SubtitleReel xmlns:dcst=\"http://www.smpte-ra.org/schemas/428-7/2010/DCST\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\">"
667 "<dcst:Id>urn:uuid:a6c58cff-3e1e-4b38-acec-a42224475ef6</dcst:Id>"
668 "<dcst:ContentTitleText>Test</dcst:ContentTitleText>"
669 "<dcst:IssueDate>2016-04-01T03:52:00.000+00:00</dcst:IssueDate>"
670 "<dcst:ReelNumber>1</dcst:ReelNumber>"
671 "<dcst:Language>EN</dcst:Language>"
672 "<dcst:EditRate>24 1</dcst:EditRate>"
673 "<dcst:TimeCodeRate>24</dcst:TimeCodeRate>"
674 "<dcst:SubtitleList>"
675 "<dcst:Font AspectAdjust=\"1.0\" Color=\"FFFFFFFF\" Effect=\"none\" EffectColor=\"FF000000\" ID=\"Arial\" Script=\"normal\" Size=\"48\" Underline=\"no\" Weight=\"normal\">"
676 "<dcst:Subtitle SpotNumber=\"1\" TimeIn=\"00:00:01:00\" TimeOut=\"00:00:09:00\" FadeUpTime=\"00:00:00:00\" FadeDownTime=\"00:00:00:00\">"
677 "<dcst:Text Valign=\"top\" Vposition=\"80\">"
678 "<dcst:Font Italic=\"no\">Testing is </dcst:Font>"
679 "<dcst:Font Italic=\"yes\">really</dcst:Font>"
680 "<dcst:Font Italic=\"no\"> fun</dcst:Font>"
682 "<dcst:Text Valign=\"top\" Vposition=\"90\">"
683 "<dcst:Font Italic=\"no\">This is the </dcst:Font>"
684 "<dcst:Font Italic=\"yes\">second</dcst:Font>"
685 "<dcst:Font Italic=\"no\"> line</dcst:Font>"
689 "</dcst:SubtitleList>"
690 "</dcst:SubtitleReel>",
695 /* Write some subtitle content as SMPTE using bitmaps and check that it is right */
696 BOOST_AUTO_TEST_CASE (write_smpte_subtitle_test3)
698 dcp::SMPTESubtitleAsset c;
699 c.set_reel_number (1);
700 c.set_language ("EN");
701 c.set_content_title_text ("Test");
704 shared_ptr<dcp::Subtitle> (
705 new dcp::SubtitleImage (
706 dcp::Data ("test/data/sub.png"),
707 dcp::Time (0, 4, 9, 22, 24),
708 dcp::Time (0, 4, 11, 22, 24),
713 dcp::Time (0, 0, 0, 0, 24),
714 dcp::Time (0, 0, 0, 0, 24)
719 c._id = "a6c58cff-3e1e-4b38-acec-a42224475ef6";
721 boost::filesystem::create_directories ("build/test/write_smpte_subtitle_test3");
722 c.write ("build/test/write_smpte_subtitle_test3/subs.mxf");
724 /* XXX: check this result when we can read them back in again */