summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2021-12-21 21:01:16 +0100
committerCarl Hetherington <cth@carlh.net>2021-12-21 21:01:16 +0100
commit7f889df4cac6c0cf08400f0212a0e74909f6c29f (patch)
tree7847734eb0cbf649da40de2764c5b0b2751648f7
parent95ba4aff616a9e0c6ca85e7a3c86a5606afa2e45 (diff)
Fix trimming of ATMOS MXFs.
-rw-r--r--src/lib/player.cc14
-rw-r--r--test/atmos_test.cc15
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<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);
}
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 });
+}
+