From 736f9d8154080ea5837b31af623ef863eea1a7c5 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Wed, 4 Jan 2017 21:41:07 +0000 Subject: Fix non-frame-aligned trims when using trim-to-playhead. Reimplement Time::ceil and add a corresponding Time::floor with tests. ceil returns slightly different results to previously with non-integer frame rates. Then use floor to round the playhead position when trimming. --- test/util_test.cc | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) (limited to 'test') diff --git a/test/util_test.cc b/test/util_test.cc index c7bf9944d..334811cb7 100644 --- a/test/util_test.cc +++ b/test/util_test.cc @@ -65,7 +65,24 @@ BOOST_AUTO_TEST_CASE (dcptime_ceil_test) BOOST_CHECK_EQUAL (DCPTime(43).ceil(DCPTime::HZ / 42).get(), 84); /* Check that rounding up to non-integer frame rates works */ - BOOST_CHECK_EQUAL (DCPTime(45312).ceil(29.976).get(), 48045); + BOOST_CHECK_EQUAL (DCPTime(45312).ceil(29.976).get(), 48038); +} + +/* Straightforward test of DCPTime::floor */ +BOOST_AUTO_TEST_CASE (dcptime_floor_test) +{ + BOOST_CHECK_EQUAL (DCPTime(0).floor(DCPTime::HZ / 2).get(), 0); + BOOST_CHECK_EQUAL (DCPTime(1).floor(DCPTime::HZ / 2).get(), 0); + BOOST_CHECK_EQUAL (DCPTime(2).floor(DCPTime::HZ / 2).get(), 2); + BOOST_CHECK_EQUAL (DCPTime(3).floor(DCPTime::HZ / 2).get(), 2); + + BOOST_CHECK_EQUAL (DCPTime(0).floor(DCPTime::HZ / 42).get(), 0); + BOOST_CHECK_EQUAL (DCPTime(1).floor(DCPTime::HZ / 42).get(), 0); + BOOST_CHECK_EQUAL (DCPTime(42).floor(DCPTime::HZ / 42.0).get(), 42); + BOOST_CHECK_EQUAL (DCPTime(43).floor(DCPTime::HZ / 42.0).get(), 42); + + /* Check that rounding down to non-integer frame rates works */ + BOOST_CHECK_EQUAL (DCPTime(45312).floor(29.976).get(), 44836); } BOOST_AUTO_TEST_CASE (timecode_test) -- cgit v1.2.3