From 03ac5ddb97fdaf7c8c46bd3c012cec8f04e8eabd Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Tue, 21 Dec 2021 21:01:16 +0100 Subject: [PATCH] Fix trimming of ATMOS MXFs. --- src/lib/player.cc | 14 ++++++++++++-- test/atmos_test.cc | 15 +++++++++++++++ 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/src/lib/player.cc b/src/lib/player.cc index d35292a56..f7b75babc 100644 --- a/src/lib/player.cc +++ b/src/lib/player.cc @@ -1406,12 +1406,22 @@ Player::playlist () const void -Player::atmos (weak_ptr, ContentAtmos data) +Player::atmos (weak_ptr weak_piece, ContentAtmos data) { if (_suspended) { return; } - Atmos (data.data, DCPTime::from_frames(data.frame, _film->video_frame_rate()), data.metadata); + auto piece = weak_piece.lock (); + DCPOMATIC_ASSERT (piece); + + 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)); + if (dcp_time < piece->content->position() || dcp_time >= (piece->content->end(_film))) { + return; + } + + Atmos (data.data, dcp_time, data.metadata); } diff --git a/test/atmos_test.cc b/test/atmos_test.cc index ca55a13ae..a364aa0eb 100644 --- a/test/atmos_test.cc +++ b/test/atmos_test.cc @@ -90,3 +90,18 @@ BOOST_AUTO_TEST_CASE (atmos_encrypted_passthrough_test) cl.run (); } + +BOOST_AUTO_TEST_CASE (atmos_trim_test) +{ + Cleanup cl; + + auto ref = TestPaths::private_data() / "atmos_asset.mxf"; + auto content = content_factory (TestPaths::private_data() / "atmos_asset.mxf").front(); + auto film = new_test_film2 ("atmos_trim_test", {content}, &cl); + + content->set_trim_start (dcpomatic::ContentTime::from_seconds(1)); + + /* Just check that the encode runs; I'm not sure how to test the MXF */ + make_and_verify_dcp (film, { dcp::VerificationNote::Code::MISSING_CPL_METADATA }); +} + -- 2.30.2