More function moves and build fixes; now builds.
authorCarl Hetherington <cth@carlh.net>
Tue, 23 Jun 2020 22:26:43 +0000 (00:26 +0200)
committerCarl Hetherington <cth@carlh.net>
Tue, 1 Dec 2020 15:43:36 +0000 (16:43 +0100)
src/lib/piece.cc
src/lib/piece.h
src/lib/player.cc
src/lib/player_video.cc
src/lib/player_video.h
test/client_server_test.cc
test/dcp_decoder_test.cc
test/time_calculation_test.cc

index 9fcf40834bb1669f735d0508dc3f4faa4fb0faba..879bf71c55a587310c59dd28233345a07770b336 100644 (file)
 */
 
 
+#include "audio_content.h"
 #include "audio_stream.h"
 #include "content.h"
+#include "dcp_content.h"
+#include "decoder.h"
 #include "piece.h"
+#include "text_content.h"
+#include "video_content.h"
 #include <boost/foreach.hpp>
 
 
 using std::copy;
 using std::list;
+using std::map;
+using boost::dynamic_pointer_cast;
+using boost::optional;
 using boost::shared_ptr;
+using namespace dcpomatic;
 
 
 Piece::Piece (shared_ptr<Content> c, shared_ptr<Decoder> d, FrameRateChange f)
@@ -102,7 +111,7 @@ DCPTime
 Piece::resampled_audio_to_dcp (shared_ptr<const Film> film, Frame f) const
 {
        /* See comment in dcp_to_content_video */
-       return DCPTime::from_frames(f, film->audio_frame_rate()) - DCPTime(_content[0]->trim_start(), frc) + position();
+       return DCPTime::from_frames(f, film->audio_frame_rate()) - DCPTime(_content[0]->trim_start(), _frc) + position();
 }
 
 
@@ -110,7 +119,7 @@ ContentTime
 Piece::dcp_to_content_time (shared_ptr<const Film> film, DCPTime t) const
 {
        DCPTime s = t - position();
-       s = min (_content[0]->length_after_trim(_film), s);
+       s = min (_content[0]->length_after_trim(film), s);
        return max (ContentTime(), ContentTime(s, _frc) + _content[0]->trim_start());
 }
 
@@ -157,12 +166,12 @@ Piece::position (shared_ptr<const Film> film)
 bool
 Piece::has_text () const
 {
-       return !_decoder[0].text.empty();
+       return !_decoder[0]->text.empty();
 }
 
 
 void
-Piece::pass () const
+Piece::pass ()
 {
        _done = _decoder[0]->pass();
 }
@@ -181,3 +190,86 @@ Piece::video_use () const
 {
        return _content[0]->video && _content[0]->video->use();
 }
+
+
+Crop
+Piece::video_crop () const
+{
+       return _content[0]->video->crop();
+}
+
+
+optional<double>
+Piece::video_fade (boost::shared_ptr<const Film> film, Frame frame) const
+{
+       return _content[0]->video->fade(film, frame);
+}
+
+
+optional<ColourConversion>
+Piece::video_colour_conversion () const
+{
+       return _content[0]->video->colour_conversion();
+}
+
+
+VideoRange
+Piece::video_range () const
+{
+       return _content[0]->video->range();
+}
+
+
+dcp::Size
+Piece::video_scaled_size (dcp::Size container_size) const
+{
+       return _content[0]->video->scaled_size(container_size);
+}
+
+
+int
+Piece::audio_resampled_frame_rate (shared_ptr<const Film> film) const
+{
+       return _content[0]->audio->resampled_frame_rate(film);
+}
+
+
+double
+Piece::audio_gain () const
+{
+       return _content[0]->audio->gain();
+}
+
+
+void
+Piece::seek (shared_ptr<const Film> film, DCPTime time, bool accurate)
+{
+       if (time < position()) {
+               /* Before; seek to the start of the content.  Even if this request is for an inaccurate seek
+                  we must seek this (following) content accurately, otherwise when we come to the end of the current
+                  content we may not start right at the beginning of the next, causing a gap (if the next content has
+                  been trimmed to a point between keyframes, or something).
+                  */
+               _decoder[0]->seek (dcp_to_content_time(film, position()), true);
+               _done = false;
+       } else if (position() <= time && time < end(film)) {
+               /* During; seek to position */
+               _decoder[0]->seek (dcp_to_content_time(film, time), accurate);
+               _done = false;
+       } else {
+               /* After; this piece is done */
+               _done = true;
+       }
+}
+
+
+optional<DCPTime>
+Piece::content_time_to_dcp (shared_ptr<Content> content, ContentTime t) const
+{
+       if (content != _content[0]) {
+               return optional<DCPTime>();
+       }
+
+       return content_time_to_dcp (t);
+}
+
index 845b7fbdca5279dae4d6197f12b0545f2da55132..ad9c939a49c997f7c35edf3a0edb3f3d2a7c9a95 100644 (file)
 #ifndef DCPOMATIC_PIECE_H
 #define DCPOMATIC_PIECE_H
 
+
 #include "audio_stream.h"
-#include "dcpomatic_font.h"
+#include "colour_conversion.h"
+#include "font.h"
 #include "dcpomatic_time.h"
 #include "frame_rate_change.h"
 #include "types.h"
 
+
 class Content;
 class Decoder;
+struct check_reuse_old_data_test;
+
 
 class Piece
 {
@@ -42,6 +47,7 @@ public:
        bool reference_audio () const;
 
        void pass ();
+       void seek (boost::shared_ptr<const Film> film, dcpomatic::DCPTime time, bool accurate);
 
        dcpomatic::DCPTime position () const;
        dcpomatic::DCPTime end (boost::shared_ptr<const Film> film) const;
@@ -50,15 +56,26 @@ public:
        }
 
        bool video_use () const;
+       Crop video_crop () const;
+       boost::optional<double> video_fade (boost::shared_ptr<const Film> film, Frame) const;
+       boost::optional<ColourConversion> video_colour_conversion () const;
+       VideoRange video_range () const;
+       dcp::Size video_scaled_size (dcp::Size container_size) const;
+
+       int audio_resampled_frame_rate (boost::shared_ptr<const Film> film) const;
+       double audio_gain () const;
 
        dcpomatic::DCPTime content_video_to_dcp (Frame f) const;
        dcpomatic::DCPTime resampled_audio_to_dcp (boost::shared_ptr<const Film> film, Frame f) const;
        dcpomatic::ContentTime dcp_to_content_time (boost::shared_ptr<const Film> film, dcpomatic::DCPTime t) const;
        dcpomatic::DCPTime content_time_to_dcp (dcpomatic::ContentTime t) const;
+       boost::optional<dcpomatic::DCPTime> content_time_to_dcp (boost::shared_ptr<Content> content, dcpomatic::ContentTime t) const;
 
        void add_fonts (std::list<boost::shared_ptr<dcpomatic::Font> >& fonts) const;
 
 private:
+       friend struct ::check_reuse_old_data_test;
+
        std::vector<boost::shared_ptr<Content> > _content;
        std::vector<boost::shared_ptr<Decoder> > _decoder;
        FrameRateChange _frc;
index 62dc48eebf770fcf34e5592a57be0578121fe5b8..7e5ea1ba05a35590b4151cf42c4d7d3a49331773 100644 (file)
@@ -379,7 +379,7 @@ Player::black_player_video_frame (Eyes eyes) const
                        PART_WHOLE,
                        PresetColourConversion::all().front().conversion,
                        VIDEO_RANGE_FULL,
-                       boost::weak_ptr<Content>(),
+                       boost::weak_ptr<Piece>(),
                        boost::optional<Frame>(),
                        false
                )
@@ -813,15 +813,15 @@ Player::video (weak_ptr<Piece> wp, ContentVideo video)
        _last_video[wp].reset (
                new PlayerVideo (
                        video.image,
-                       piece->content->video->crop (),
-                       piece->content->video->fade (_film, video.frame),
-                       scale_for_display(piece->content->video->scaled_size(_film->frame_size()), _video_container_size, _film->frame_size()),
+                       piece->video_crop(),
+                       piece->video_fade(_film, video.frame),
+                       scale_for_display(piece->video_scaled_size(_film->frame_size()), _video_container_size, _film->frame_size()),
                        _video_container_size,
                        video.eyes,
                        video.part,
-                       piece->content->video->colour_conversion(),
-                       piece->content->video->range(),
-                       piece->content,
+                       piece->video_colour_conversion(),
+                       piece->video_range(),
+                       piece,
                        video.frame,
                        false
                        )
@@ -846,15 +846,11 @@ Player::audio (weak_ptr<Piece> wp, AudioStreamPtr stream, ContentAudio content_a
                return;
        }
 
-       shared_ptr<AudioContent> content = piece->content->audio;
-       DCPOMATIC_ASSERT (content);
-
-       int const rfr = content->resampled_frame_rate (_film);
+       int const rfr = piece->audio_resampled_frame_rate (_film);
 
        /* Compute time in the DCP */
-       DCPTime time = resampled_audio_to_dcp (piece, content_audio.frame);
+       DCPTime time = piece->resampled_audio_to_dcp (_film, content_audio.frame);
        LOG_DEBUG_PLAYER("Received audio frame %1 at %2", content_audio.frame, to_string(time));
-
        /* And the end of this block in the DCP */
        DCPTime end = time + DCPTime::from_frames(content_audio.audio->frames(), rfr);
 
@@ -882,9 +878,9 @@ Player::audio (weak_ptr<Piece> wp, AudioStreamPtr stream, ContentAudio content_a
 
        /* Gain */
 
-       if (content->gain() != 0) {
+       if (piece->audio_gain() != 0) {
                shared_ptr<AudioBuffers> gain (new AudioBuffers (content_audio.audio));
-               gain->apply_gain (content->gain ());
+               gain->apply_gain (piece->audio_gain());
                content_audio.audio = gain;
        }
 
@@ -1008,7 +1004,7 @@ Player::subtitle_stop (weak_ptr<Piece> wp, weak_ptr<const TextContent> wc, Conte
                return;
        }
 
-       DCPTime const dcp_to = content_time_to_dcp (piece, to);
+       DCPTime const dcp_to = piece->content_time_to_dcp (to);
 
        if (dcp_to > piece->end(_film)) {
                return;
@@ -1049,22 +1045,7 @@ Player::seek (DCPTime time, bool accurate)
        }
 
        BOOST_FOREACH (shared_ptr<Piece> i, _pieces) {
-               if (time < i->position()) {
-                       /* Before; seek to the start of the content.  Even if this request is for an inaccurate seek
-                          we must seek this (following) content accurately, otherwise when we come to the end of the current
-                          content we may not start right at the beginning of the next, causing a gap (if the next content has
-                          been trimmed to a point between keyframes, or something).
-                       */
-                       i->decoder->seek (dcp_to_content_time (i, i->position()), true);
-                       i->done = false;
-               } else if (i->position() <= time && time < i->end(_film)) {
-                       /* During; seek to position */
-                       i->decoder->seek (dcp_to_content_time (i, time), accurate);
-                       i->done = false;
-               } else {
-                       /* After; this piece is done */
-                       i->done = true;
-               }
+               i->seek (_film, time, accurate);
        }
 
        if (accurate) {
@@ -1204,8 +1185,9 @@ Player::content_time_to_dcp (shared_ptr<Content> content, ContentTime t)
        boost::mutex::scoped_lock lm (_mutex);
 
        BOOST_FOREACH (shared_ptr<Piece> i, _pieces) {
-               if (i->content == content) {
-                       return content_time_to_dcp (i, t);
+               optional<DCPTime> d = i->content_time_to_dcp (content, t);
+               if (d) {
+                       return d;
                }
        }
 
index 4f8acd5e2e0e59435b4f203d12bac2e97220a7a1..2fc60570f2f91166405799012607803c41f96b7d 100644 (file)
@@ -18,6 +18,7 @@
 
 */
 
+#include "piece.h"
 #include "player_video.h"
 #include "content.h"
 #include "video_content.h"
@@ -54,7 +55,7 @@ PlayerVideo::PlayerVideo (
        Part part,
        optional<ColourConversion> colour_conversion,
        VideoRange video_range,
-       weak_ptr<Content> content,
+       weak_ptr<Piece> piece,
        optional<Frame> video_frame,
        bool error
        )
@@ -67,7 +68,7 @@ PlayerVideo::PlayerVideo (
        , _part (part)
        , _colour_conversion (colour_conversion)
        , _video_range (video_range)
-       , _content (content)
+       , _piece (piece)
        , _video_frame (video_frame)
        , _error (error)
 {
@@ -320,7 +321,7 @@ PlayerVideo::shallow_copy () const
                        _part,
                        _colour_conversion,
                        _video_range,
-                       _content,
+                       _piece,
                        _video_frame,
                        _error
                        )
@@ -333,17 +334,17 @@ PlayerVideo::shallow_copy () const
 bool
 PlayerVideo::reset_metadata (shared_ptr<const Film> film, dcp::Size player_video_container_size)
 {
-       shared_ptr<Content> content = _content.lock();
-       if (!content || !_video_frame) {
+       shared_ptr<Piece> piece = _piece.lock();
+       if (!piece || !_video_frame) {
                return false;
        }
 
-       _crop = content->video->crop();
-       _fade = content->video->fade(film, _video_frame.get());
-       _inter_size = scale_for_display(content->video->scaled_size(film->frame_size()), player_video_container_size, film->frame_size());
-       _out_size = player_video_container_size;
-       _colour_conversion = content->video->colour_conversion();
-       _video_range = content->video->range();
+       _crop = piece->video_crop();
+       _fade = piece->video_fade(film, _video_frame.get());
+       _inter_size = scale_for_display(piece->video_scaled_size(film->frame_size()), player_video_container_size, film->frame_size());
+       _out_size = video_container_size;
+       _colour_conversion = piece->video_colour_conversion();
+       _video_range = piece->video_range();
 
        return true;
 }
index 0952eafb95ea880d47d9874a62fd1b58ece7820f..65f5111c300e8fc3a2cf5f56a77cfac1e70920ca 100644 (file)
@@ -22,6 +22,7 @@
 #define DCPOMATIC_PLAYER_VIDEO_H
 
 #include "types.h"
+#include "piece.h"
 #include "position.h"
 #include "dcpomatic_time.h"
 #include "colour_conversion.h"
@@ -56,7 +57,7 @@ public:
                Part,
                boost::optional<ColourConversion>,
                VideoRange video_range,
-               boost::weak_ptr<Content>,
+               boost::weak_ptr<Piece>,
                boost::optional<Frame>,
                bool error
                );
@@ -105,8 +106,8 @@ public:
 
        size_t memory_used () const;
 
-       boost::weak_ptr<Content> content () const {
-               return _content;
+       boost::weak_ptr<Piece> piece () const {
+               return _piece;
        }
 
        bool error () const {
@@ -126,8 +127,9 @@ private:
        boost::optional<ColourConversion> _colour_conversion;
        VideoRange _video_range;
        boost::optional<PositionImage> _text;
-       /** Content that we came from.  This is so that reset_metadata() can work. */
-       boost::weak_ptr<Content> _content;
+       /** Piece that we came from.  This is so that reset_metadata() can work. */
+        */
+       boost::weak_ptr<Piece> _piece;
        /** Video frame that we came from.  Again, this is for reset_metadata() */
        boost::optional<Frame> _video_frame;
 
index e7ab5ec7acdeaeddb79649c0a22e2bc38134e3ab..4fb7eeda40585a369e82f65d77d57a8b546b02b5 100644 (file)
@@ -99,7 +99,7 @@ BOOST_AUTO_TEST_CASE (client_server_test_rgb)
                        PART_WHOLE,
                        ColourConversion(),
                        VIDEO_RANGE_FULL,
-                       weak_ptr<Content>(),
+                       weak_ptr<Piece>(),
                        optional<Frame>(),
                        false
                        )
@@ -185,7 +185,7 @@ BOOST_AUTO_TEST_CASE (client_server_test_yuv)
                        PART_WHOLE,
                        ColourConversion(),
                        VIDEO_RANGE_FULL,
-                       weak_ptr<Content>(),
+                       weak_ptr<Piece>(),
                        optional<Frame>(),
                        false
                        )
@@ -258,7 +258,7 @@ BOOST_AUTO_TEST_CASE (client_server_test_j2k)
                        PART_WHOLE,
                        ColourConversion(),
                        VIDEO_RANGE_FULL,
-                       weak_ptr<Content>(),
+                       weak_ptr<Piece>(),
                        optional<Frame>(),
                        false
                        )
@@ -287,7 +287,7 @@ BOOST_AUTO_TEST_CASE (client_server_test_j2k)
                        PART_WHOLE,
                        PresetColourConversion::all().front().conversion,
                        VIDEO_RANGE_FULL,
-                       weak_ptr<Content>(),
+                       weak_ptr<Piece>(),
                        optional<Frame>(),
                        false
                        )
index 231a99da2268c67a350bc4f1da04e773d5ff454e..44fc146b18e68a638b7423c601efaf31b95da5f4 100644 (file)
@@ -91,12 +91,12 @@ BOOST_AUTO_TEST_CASE (check_reuse_old_data_test)
        BOOST_REQUIRE (!wait_for_jobs());
        shared_ptr<Player> player (new Player(test));
 
-       shared_ptr<DCPDecoder> decoder = boost::dynamic_pointer_cast<DCPDecoder>(player->_pieces.front()->decoder);
+       shared_ptr<DCPDecoder> decoder = boost::dynamic_pointer_cast<DCPDecoder>(player->_pieces.front()->_decoder[0]);
        BOOST_REQUIRE (decoder);
        list<shared_ptr<dcp::Reel> > reels = decoder->reels();
 
        ov_content->set_position (test, dcpomatic::DCPTime(96000));
-       decoder = boost::dynamic_pointer_cast<DCPDecoder>(player->_pieces.front()->decoder);
+       decoder = boost::dynamic_pointer_cast<DCPDecoder>(player->_pieces.front()->_decoder[0]);
        BOOST_REQUIRE (decoder);
        BOOST_REQUIRE (reels == decoder->reels());
 
@@ -109,14 +109,14 @@ BOOST_AUTO_TEST_CASE (check_reuse_old_data_test)
        BOOST_REQUIRE (!wait_for_jobs());
        player.reset (new Player(test));
 
-       decoder = boost::dynamic_pointer_cast<DCPDecoder>(player->_pieces.front()->decoder);
+       decoder = boost::dynamic_pointer_cast<DCPDecoder>(player->_pieces.front()->_decoder[0]);
        BOOST_REQUIRE (decoder);
        reels = decoder->reels();
 
        vf_content->add_ov (ov->dir(ov->dcp_name(false)));
        JobManager::instance()->add (shared_ptr<Job>(new ExamineContentJob(test, vf_content)));
        BOOST_REQUIRE (!wait_for_jobs());
-       decoder = boost::dynamic_pointer_cast<DCPDecoder>(player->_pieces.front()->decoder);
+       decoder = boost::dynamic_pointer_cast<DCPDecoder>(player->_pieces.front()->_decoder[0]);
        BOOST_REQUIRE (decoder);
        BOOST_REQUIRE (reels != decoder->reels());
 
@@ -127,14 +127,14 @@ BOOST_AUTO_TEST_CASE (check_reuse_old_data_test)
        BOOST_REQUIRE (!wait_for_jobs());
        player.reset (new Player(test));
 
-       decoder = boost::dynamic_pointer_cast<DCPDecoder>(player->_pieces.front()->decoder);
+       decoder = boost::dynamic_pointer_cast<DCPDecoder>(player->_pieces.front()->_decoder[0]);
        BOOST_REQUIRE (decoder);
        reels = decoder->reels();
 
        encrypted_content->add_kdm (kdm);
        JobManager::instance()->add (shared_ptr<Job>(new ExamineContentJob(test, encrypted_content)));
        BOOST_REQUIRE (!wait_for_jobs());
-       decoder = boost::dynamic_pointer_cast<DCPDecoder>(player->_pieces.front()->decoder);
+       decoder = boost::dynamic_pointer_cast<DCPDecoder>(player->_pieces.front()->_decoder[0]);
        BOOST_REQUIRE (decoder);
        BOOST_REQUIRE (reels != decoder->reels());
 }
index 8c57a9fdbbb3dfdb4b417ea12eb1bcc813f65231..25328a9d175d87e131ef3d47f4b0733236f65d04 100644 (file)
@@ -406,9 +406,9 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test2)
        player->setup_pieces ();
        BOOST_REQUIRE_EQUAL (player->_pieces.size(), 1U);
        shared_ptr<Piece> piece = player->_pieces.front ();
-       BOOST_CHECK_EQUAL (player->content_video_to_dcp (piece, 0).get(), 0);
-       BOOST_CHECK_EQUAL (player->content_video_to_dcp (piece, 12).get(), DCPTime::from_seconds(0.5).get());
-       BOOST_CHECK_EQUAL (player->content_video_to_dcp (piece, 72).get(), DCPTime::from_seconds(3.0).get());
+       BOOST_CHECK_EQUAL (piece->content_video_to_dcp(0).get(), 0);
+       BOOST_CHECK_EQUAL (piece->content_video_to_dcp(12).get(), DCPTime::from_seconds(0.5).get());
+       BOOST_CHECK_EQUAL (piece->content_video_to_dcp(72).get(), DCPTime::from_seconds(3.0).get());
 
        /* Position 3s, no trim, content rate = DCP rate */
        content->set_position (film, DCPTime::from_seconds(3));
@@ -418,9 +418,9 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test2)
        player->setup_pieces ();
        BOOST_REQUIRE_EQUAL (player->_pieces.size(), 1U);
        piece = player->_pieces.front ();
-       BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 0).get(), DCPTime::from_seconds(3.00).get());
-       BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 36).get(), DCPTime::from_seconds(4.50).get());
-       BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 162).get(), DCPTime::from_seconds(9.75).get());
+       BOOST_CHECK_EQUAL (piece->content_video_to_dcp(0).get(), DCPTime::from_seconds(3.00).get());
+       BOOST_CHECK_EQUAL (piece->content_video_to_dcp(36).get(), DCPTime::from_seconds(4.50).get());
+       BOOST_CHECK_EQUAL (piece->content_video_to_dcp(162).get(), DCPTime::from_seconds(9.75).get());
 
        /* Position 3s, 1.5s trim, content rate = DCP rate */
        content->set_position (film, DCPTime::from_seconds(3));
@@ -430,10 +430,10 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test2)
        player->setup_pieces ();
        BOOST_REQUIRE_EQUAL (player->_pieces.size(), 1U);
        piece = player->_pieces.front ();
-       BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 0).get(), DCPTime::from_seconds(1.50).get());
-       BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 36).get(), DCPTime::from_seconds(3.00).get());
-       BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 72).get(), DCPTime::from_seconds(4.50).get());
-       BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 198).get(), DCPTime::from_seconds(9.75).get());
+       BOOST_CHECK_EQUAL (piece->content_video_to_dcp(0).get(), DCPTime::from_seconds(1.50).get());
+       BOOST_CHECK_EQUAL (piece->content_video_to_dcp(36).get(), DCPTime::from_seconds(3.00).get());
+       BOOST_CHECK_EQUAL (piece->content_video_to_dcp(72).get(), DCPTime::from_seconds(4.50).get());
+       BOOST_CHECK_EQUAL (piece->content_video_to_dcp(198).get(), DCPTime::from_seconds(9.75).get());
 
        /* Position 0, no trim, content rate 24, DCP rate 25.
           Now, for example, a DCPTime position of 3s means 3s at 25fps.  Since we run the video
@@ -446,9 +446,9 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test2)
        player->setup_pieces ();
        BOOST_REQUIRE_EQUAL (player->_pieces.size(), 1U);
        piece = player->_pieces.front ();
-       BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 0).get(), 0);
-       BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 15).get(), DCPTime::from_seconds(0.6).get());
-       BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 75).get(), DCPTime::from_seconds(3.0).get());
+       BOOST_CHECK_EQUAL (piece->content_video_to_dcp(0).get(), 0);
+       BOOST_CHECK_EQUAL (piece->content_video_to_dcp(15).get(), DCPTime::from_seconds(0.6).get());
+       BOOST_CHECK_EQUAL (piece->content_video_to_dcp(75).get(), DCPTime::from_seconds(3.0).get());
 
        /* Position 3s, no trim, content rate 24, DCP rate 25 */
        content->set_position (film, DCPTime::from_seconds(3));
@@ -458,9 +458,9 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test2)
        player->setup_pieces ();
        BOOST_REQUIRE_EQUAL (player->_pieces.size(), 1U);
        piece = player->_pieces.front ();
-       BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 0).get(), DCPTime::from_seconds(3.00).get());
-       BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 40).get(), DCPTime::from_seconds(4.60).get());
-       BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 169).get(), DCPTime::from_seconds(9.76).get());
+       BOOST_CHECK_EQUAL (piece->content_video_to_dcp(0).get(), DCPTime::from_seconds(3.00).get());
+       BOOST_CHECK_EQUAL (piece->content_video_to_dcp(40).get(), DCPTime::from_seconds(4.60).get());
+       BOOST_CHECK_EQUAL (piece->content_video_to_dcp(169).get(), DCPTime::from_seconds(9.76).get());
 
        /* Position 3s, 1.6s trim, content rate 24, DCP rate 25, so the 1.6s trim is at 24fps */
        content->set_position (film, DCPTime::from_seconds(3));
@@ -470,10 +470,10 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test2)
        player->setup_pieces ();
        BOOST_REQUIRE_EQUAL (player->_pieces.size(), 1U);
        piece = player->_pieces.front ();
-       BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 0).get(), 142080);
-       BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 40).get(), 295680);
-       BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 80).get(), 449280);
-       BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 209).get(), 944640);
+       BOOST_CHECK_EQUAL (piece->content_video_to_dcp(0).get(), 142080);
+       BOOST_CHECK_EQUAL (piece->content_video_to_dcp(40).get(), 295680);
+       BOOST_CHECK_EQUAL (piece->content_video_to_dcp(80).get(), 449280);
+       BOOST_CHECK_EQUAL (piece->content_video_to_dcp(209).get(), 944640);
 
        /* Position 0, no trim, content rate 24, DCP rate 48
           Now, for example, a DCPTime position of 3s means 3s at 48fps.  Since we run the video
@@ -488,9 +488,9 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test2)
        player->setup_pieces ();
        BOOST_REQUIRE_EQUAL (player->_pieces.size(), 1U);
        piece = player->_pieces.front ();
-       BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 0).get(), 0);
-       BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 12).get(), DCPTime::from_seconds(0.5).get());
-       BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 72).get(), DCPTime::from_seconds(3.0).get());
+       BOOST_CHECK_EQUAL (piece->content_video_to_dcp(0).get(), 0);
+       BOOST_CHECK_EQUAL (piece->content_video_to_dcp(12).get(), DCPTime::from_seconds(0.5).get());
+       BOOST_CHECK_EQUAL (piece->content_video_to_dcp(72).get(), DCPTime::from_seconds(3.0).get());
 
        /* Position 3s, no trim, content rate 24, DCP rate 48 */
        content->set_position (film, DCPTime::from_seconds(3));
@@ -500,9 +500,9 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test2)
        player->setup_pieces ();
        BOOST_REQUIRE_EQUAL (player->_pieces.size(), 1U);
        piece = player->_pieces.front ();
-       BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 0).get(), DCPTime::from_seconds(3.00).get());
-       BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 36).get(), DCPTime::from_seconds(4.50).get());
-       BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 162).get(), DCPTime::from_seconds(9.75).get());
+       BOOST_CHECK_EQUAL (piece->content_video_to_dcp(0).get(), DCPTime::from_seconds(3.00).get());
+       BOOST_CHECK_EQUAL (piece->content_video_to_dcp(36).get(), DCPTime::from_seconds(4.50).get());
+       BOOST_CHECK_EQUAL (piece->content_video_to_dcp(162).get(), DCPTime::from_seconds(9.75).get());
 
        /* Position 3s, 1.5s trim, content rate 24, DCP rate 48 */
        content->set_position (film, DCPTime::from_seconds(3));
@@ -512,10 +512,10 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test2)
        player->setup_pieces ();
        BOOST_REQUIRE_EQUAL (player->_pieces.size(), 1U);
        piece = player->_pieces.front ();
-       BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 0).get(), DCPTime::from_seconds(1.50).get());
-       BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 36).get(), DCPTime::from_seconds(3.00).get());
-       BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 72).get(), DCPTime::from_seconds(4.50).get());
-       BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 198).get(), DCPTime::from_seconds(9.75).get());
+       BOOST_CHECK_EQUAL (piece->content_video_to_dcp(0).get(), DCPTime::from_seconds(1.50).get());
+       BOOST_CHECK_EQUAL (piece->content_video_to_dcp(36).get(), DCPTime::from_seconds(3.00).get());
+       BOOST_CHECK_EQUAL (piece->content_video_to_dcp(72).get(), DCPTime::from_seconds(4.50).get());
+       BOOST_CHECK_EQUAL (piece->content_video_to_dcp(198).get(), DCPTime::from_seconds(9.75).get());
 
        /* Position 0, no trim, content rate 48, DCP rate 24
           Now, for example, a DCPTime position of 3s means 3s at 24fps.  Since we run the video
@@ -529,9 +529,9 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test2)
        player->setup_pieces ();
        BOOST_REQUIRE_EQUAL (player->_pieces.size(), 1U);
        piece = player->_pieces.front ();
-       BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 0).get(), 0);
-       BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 24).get(), DCPTime::from_seconds(0.5).get());
-       BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 144).get(), DCPTime::from_seconds(3.0).get());
+       BOOST_CHECK_EQUAL (piece->content_video_to_dcp(0).get(), 0);
+       BOOST_CHECK_EQUAL (piece->content_video_to_dcp(24).get(), DCPTime::from_seconds(0.5).get());
+       BOOST_CHECK_EQUAL (piece->content_video_to_dcp(144).get(), DCPTime::from_seconds(3.0).get());
 
        /* Position 3s, no trim, content rate 24, DCP rate 48 */
        content->set_position (film, DCPTime::from_seconds(3));
@@ -541,9 +541,9 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test2)
        player->setup_pieces ();
        BOOST_REQUIRE_EQUAL (player->_pieces.size(), 1U);
        piece = player->_pieces.front ();
-       BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 0).get(), DCPTime::from_seconds(3.00).get());
-       BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 72).get(), DCPTime::from_seconds(4.50).get());
-       BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 324).get(), DCPTime::from_seconds(9.75).get());
+       BOOST_CHECK_EQUAL (piece->content_video_to_dcp(0).get(), DCPTime::from_seconds(3.00).get());
+       BOOST_CHECK_EQUAL (piece->content_video_to_dcp(72).get(), DCPTime::from_seconds(4.50).get());
+       BOOST_CHECK_EQUAL (piece->content_video_to_dcp(324).get(), DCPTime::from_seconds(9.75).get());
 
        /* Position 3s, 1.5s trim, content rate 24, DCP rate 48 */
        content->set_position (film, DCPTime::from_seconds(3));
@@ -553,10 +553,10 @@ BOOST_AUTO_TEST_CASE (player_time_calculation_test2)
        player->setup_pieces ();
        BOOST_REQUIRE_EQUAL (player->_pieces.size(), 1U);
        piece = player->_pieces.front ();
-       BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 0).get(), DCPTime::from_seconds(1.50).get());
-       BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 72).get(), DCPTime::from_seconds(3.00).get());
-       BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 144).get(), DCPTime::from_seconds(4.50).get());
-       BOOST_CHECK_EQUAL (player->content_video_to_dcp(piece, 396).get(), DCPTime::from_seconds(9.75).get());
+       BOOST_CHECK_EQUAL (piece->content_video_to_dcp(0).get(), DCPTime::from_seconds(1.50).get());
+       BOOST_CHECK_EQUAL (piece->content_video_to_dcp(72).get(), DCPTime::from_seconds(3.00).get());
+       BOOST_CHECK_EQUAL (piece->content_video_to_dcp(144).get(), DCPTime::from_seconds(4.50).get());
+       BOOST_CHECK_EQUAL (piece->content_video_to_dcp(396).get(), DCPTime::from_seconds(9.75).get());
 }
 
 /** Test Player::dcp_to_content_audio */