From: Carl Hetherington Date: Wed, 27 Oct 2021 21:23:26 +0000 (+0200) Subject: Add a new test for subtitle timing when changing frame rate. X-Git-Tag: v2.15.172~22 X-Git-Url: https://main.carlh.net/gitweb/?p=dcpomatic.git;a=commitdiff_plain;h=9d6feb056d3dfd3c1fef59b6340e77fb23830f54 Add a new test for subtitle timing when changing frame rate. --- diff --git a/test/data b/test/data index 9e3e504fd..a27d04046 160000 --- a/test/data +++ b/test/data @@ -1 +1 @@ -Subproject commit 9e3e504fdb8c254e2fef5f29159328ef1e673812 +Subproject commit a27d0404655bfb0a32cb0a8dfb4fce69d8118a21 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 + + 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 . + +*/ + + +#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 +#include +#include +#include +#include +#include + + +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