Fix trimming of ATMOS MXFs.
authorCarl Hetherington <cth@carlh.net>
Tue, 21 Dec 2021 20:01:16 +0000 (21:01 +0100)
committerCarl Hetherington <cth@carlh.net>
Tue, 21 Dec 2021 20:03:07 +0000 (21:03 +0100)
src/lib/player.cc
test/atmos_test.cc

index d35292a56d9d362ac79fd8c2d68e5ecb0b8ce4cb..f7b75babcdc3d8f2750900a4925878b3e3f96fda 100644 (file)
@@ -1406,12 +1406,22 @@ Player::playlist () const
 
 
 void
-Player::atmos (weak_ptr<Piece>, ContentAtmos data)
+Player::atmos (weak_ptr<Piece> 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);
 }
 
index ca55a13aeeedb1d64f8ba89bd738da7a1b041a9a..a364aa0eba3c7f5cadbdf9d357ab07f9053bb22c 100644 (file)
@@ -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 });
+}
+