Fix referencing of assets with non-zero entry points (#1021).
authorCarl Hetherington <cth@carlh.net>
Fri, 16 Dec 2016 11:18:50 +0000 (11:18 +0000)
committerCarl Hetherington <cth@carlh.net>
Fri, 16 Dec 2016 11:18:50 +0000 (11:18 +0000)
ChangeLog
src/lib/player.cc

index a541614ef71d983e49781e8eb460bc80930fad7f..3966ba10fccea9e44b4650eef9a6c0d2400154a0 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2016-12-16  Carl Hetherington  <cth@carlh.net>
+
+       * Fix failure to write referenced DCPs when they have non-zero
+       entry points (#1021).
+
 2016-12-14  Carl Hetherington  <cth@carlh.net>
 
        * Version 2.10.4 released.
index 69306e3817e94fd378a17ea862e525a19293419f..57bb0c3eefd9c18ff99ad0b24610bb1a313b7a7d 100644 (file)
@@ -745,41 +745,36 @@ Player::get_reel_assets ()
                        double const cfr = j->video_frame_rate().get();
                        Frame const trim_start = j->trim_start().frames_round (cfr);
                        Frame const trim_end = j->trim_end().frames_round (cfr);
+                       int const ffr = _film->video_frame_rate ();
 
                        DCPTime const from = i->position() + DCPTime::from_frames (offset, _film->video_frame_rate());
                        if (j->reference_video ()) {
-                               DCPOMATIC_ASSERT (k->main_picture ());
-                               k->main_picture()->set_entry_point (trim_start);
-                               k->main_picture()->set_duration (k->main_picture()->intrinsic_duration() - trim_start - trim_end);
+                               shared_ptr<dcp::ReelAsset> ra = k->main_picture ();
+                               DCPOMATIC_ASSERT (ra);
+                               ra->set_entry_point (ra->entry_point() + trim_start);
+                               ra->set_duration (ra->duration() - trim_start - trim_end);
                                a.push_back (
-                                       ReferencedReelAsset (
-                                               k->main_picture (),
-                                               DCPTimePeriod (from, from + DCPTime::from_frames (k->main_picture()->duration(), _film->video_frame_rate()))
-                                               )
+                                       ReferencedReelAsset (ra, DCPTimePeriod (from, from + DCPTime::from_frames (ra->duration(), ffr)))
                                        );
                        }
 
                        if (j->reference_audio ()) {
-                               DCPOMATIC_ASSERT (k->main_sound ());
-                               k->main_sound()->set_entry_point (trim_start);
-                               k->main_sound()->set_duration (k->main_sound()->intrinsic_duration() - trim_start - trim_end);
+                               shared_ptr<dcp::ReelAsset> ra = k->main_sound ();
+                               DCPOMATIC_ASSERT (ra);
+                               ra->set_entry_point (ra->entry_point() + trim_start);
+                               ra->set_duration (ra->duration() - trim_start - trim_end);
                                a.push_back (
-                                       ReferencedReelAsset (
-                                               k->main_sound (),
-                                               DCPTimePeriod (from, from + DCPTime::from_frames (k->main_sound()->duration(), _film->video_frame_rate()))
-                                               )
+                                       ReferencedReelAsset (ra, DCPTimePeriod (from, from + DCPTime::from_frames (ra->duration(), ffr)))
                                        );
                        }
 
                        if (j->reference_subtitle ()) {
-                               DCPOMATIC_ASSERT (k->main_subtitle ());
-                               k->main_subtitle()->set_entry_point (trim_start);
-                               k->main_subtitle()->set_duration (k->main_subtitle()->intrinsic_duration() - trim_start - trim_end);
+                               shared_ptr<dcp::ReelAsset> ra = k->main_subtitle ();
+                               DCPOMATIC_ASSERT (ra);
+                               ra->set_entry_point (ra->entry_point() + trim_start);
+                               ra->set_duration (ra->duration() - trim_start - trim_end);
                                a.push_back (
-                                       ReferencedReelAsset (
-                                               k->main_subtitle (),
-                                               DCPTimePeriod (from, from + DCPTime::from_frames (k->main_subtitle()->duration(), _film->video_frame_rate()))
-                                               )
+                                       ReferencedReelAsset (ra, DCPTimePeriod (from, from + DCPTime::from_frames (ra->duration(), ffr)))
                                        );
                        }