diff options
| author | Carl Hetherington <cth@carlh.net> | 2021-10-27 23:23:26 +0200 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2021-10-27 23:48:20 +0200 |
| commit | 9d6feb056d3dfd3c1fef59b6340e77fb23830f54 (patch) | |
| tree | 844fd647d0a0e06b3efbf40663e31df60ecc383a | |
| parent | caff62a2b989d3cd4d51a3c24b6ba3438459c06c (diff) | |
Add a new test for subtitle timing when changing frame rate.
| m--------- | test/data | 0 | ||||
| -rw-r--r-- | test/subtitle_timing_test.cc | 70 | ||||
| -rw-r--r-- | test/wscript | 1 |
3 files changed, 71 insertions, 0 deletions
diff --git a/test/data b/test/data -Subproject 9e3e504fdb8c254e2fef5f29159328ef1e67381 +Subproject a27d0404655bfb0a32cb0a8dfb4fce69d8118a2 diff --git a/test/subtitle_timing_test.cc b/test/subtitle_timing_test.cc new file mode 100644 index 000000000..e8d4b07fe --- /dev/null +++ b/test/subtitle_timing_test.cc @@ -0,0 +1,70 @@ +/* + Copyright (C) 2021 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.h" +#include "lib/content_factory.h" +#include "lib/film.h" +#include "lib/text_content.h" +#include "lib/video_content.h" +#include "test.h" +#include <dcp/cpl.h> +#include <dcp/dcp.h> +#include <dcp/reel.h> +#include <dcp/reel_subtitle_asset.h> +#include <boost/test/unit_test.hpp> +#include <iostream> + + +BOOST_AUTO_TEST_CASE (test_subtitle_timing_with_frame_rate_change) +{ + using boost::filesystem::path; + + constexpr auto content_frame_rate = 29.976f; + const std::string name = "test_subtitle_timing_with_frame_rate_change"; + + auto picture = content_factory("test/data/flat_red.png").front(); + auto sub = content_factory("test/data/hour.srt").front(); + sub->text.front()->set_language(dcp::LanguageTag("en-GB")); + picture->set_video_frame_rate (content_frame_rate); + + auto film = new_test_film2 (name, { picture, sub }); + auto const dcp_frame_rate = film->video_frame_rate(); + + make_and_verify_dcp (film, {dcp::VerificationNote::Code::INVALID_SUBTITLE_FIRST_TEXT_TIME, dcp::VerificationNote::Code::INVALID_PICTURE_FRAME_RATE_FOR_2K }); + + dcp::DCP dcp(path("build/test") / name / film->dcp_name()); + dcp.read(); + BOOST_REQUIRE_EQUAL(dcp.cpls().size(), 1U); + auto cpl = dcp.cpls()[0]; + BOOST_REQUIRE_EQUAL(cpl->reels().size(), 1U); + auto reel = cpl->reels()[0]; + BOOST_REQUIRE(reel->main_subtitle()); + BOOST_REQUIRE(reel->main_subtitle()->asset()); + + auto subs = reel->main_subtitle()->asset()->subtitles(); + int index = 0; + for (auto i: subs) { + auto error = std::abs(i->in().as_seconds() - (index * content_frame_rate / dcp_frame_rate)); + BOOST_CHECK (error < (1.0f / dcp_frame_rate)); + ++index; + } +} + diff --git a/test/wscript b/test/wscript index a158ffca1..ff6895d9a 100644 --- a/test/wscript +++ b/test/wscript @@ -129,6 +129,7 @@ def build(bld): subtitle_metadata_test.cc subtitle_reel_test.cc subtitle_reel_number_test.cc + subtitle_timing_test.cc subtitle_trim_test.cc test.cc threed_test.cc |
