diff options
| -rw-r--r-- | src/lib/player.cc | 2 | ||||
| -rw-r--r-- | test/atmos_test.cc | 33 |
2 files changed, 34 insertions, 1 deletions
diff --git a/src/lib/player.cc b/src/lib/player.cc index 12a1b39cd..dadf2c73e 100644 --- a/src/lib/player.cc +++ b/src/lib/player.cc @@ -1617,7 +1617,7 @@ Player::atmos(weak_ptr<Piece> weak_piece, ContentAtmos data) auto const vfr = film->video_frame_rate(); - DCPTime const dcp_time = DCPTime::from_frames(data.frame, vfr) - DCPTime(piece->content->trim_start(), FrameRateChange(vfr, vfr)); + DCPTime const dcp_time = content_time_to_dcp(piece, ContentTime::from_frames(data.frame, vfr)); if (dcp_time < piece->content->position() || dcp_time >= (piece->content->end(film))) { return; } diff --git a/test/atmos_test.cc b/test/atmos_test.cc index 776cc9310..63da157b5 100644 --- a/test/atmos_test.cc +++ b/test/atmos_test.cc @@ -148,3 +148,36 @@ BOOST_AUTO_TEST_CASE(atmos_replace_test) check(vf, 1); } + +BOOST_AUTO_TEST_CASE(atmos_multi_reel_test) +{ + vector<shared_ptr<Content>> picture; + vector<shared_ptr<Content>> atmos; + vector<shared_ptr<Content>> all; + for (int i = 0; i < 3; ++i) { + picture.push_back(content_factory("test/data/flat_red.png")[0]); + all.push_back(picture.back()); + atmos.push_back(content_factory("test/data/atmos_0.mxf")[0]); + all.push_back(atmos.back()); + } + + auto film = new_test_film("atmos_multi_reel_test", all); + for (auto i = 0; i < 3; ++i) { + picture[i]->set_position(film, dcpomatic::DCPTime::from_seconds(i * 10)); + atmos[i]->set_position(film, dcpomatic::DCPTime::from_seconds(i * 10)); + } + + make_and_verify_dcp(film); + + dcp::DCP dcp(film->dir(film->dcp_name())); + dcp.read(); + auto cpls = dcp.cpls(); + BOOST_REQUIRE_EQUAL(cpls.size(), 1U); + auto reels = cpls[0]->reels(); + BOOST_REQUIRE_EQUAL(reels.size(), 3U); + + for (int i = 0; i < 3; ++i) { + BOOST_CHECK(reels[i]->atmos()); + } +} + |
