Add priority control buttons to batch converter (#961).
[dcpomatic.git] / src / lib / player.cc
index db62cbcc8dec6f417b05558f25724353324c7563..57bb0c3eefd9c18ff99ad0b24610bb1a313b7a7d 100644 (file)
@@ -169,7 +169,8 @@ Player::playlist_content_changed (weak_ptr<Content> w, int property, bool freque
                property == ContentProperty::TRIM_END ||
                property == ContentProperty::PATH ||
                property == VideoContentProperty::FRAME_TYPE ||
-               property == DCPContentProperty::CAN_BE_PLAYED ||
+               property == DCPContentProperty::NEEDS_ASSETS ||
+               property == DCPContentProperty::NEEDS_KDM ||
                property == SubtitleContentProperty::COLOUR ||
                property == SubtitleContentProperty::OUTLINE ||
                property == SubtitleContentProperty::SHADOW ||
@@ -183,7 +184,10 @@ Player::playlist_content_changed (weak_ptr<Content> w, int property, bool freque
 
        } else if (
                property == SubtitleContentProperty::LINE_SPACING ||
-               property == SubtitleContentProperty::Y_SCALE
+               property == SubtitleContentProperty::OUTLINE_WIDTH ||
+               property == SubtitleContentProperty::Y_SCALE ||
+               property == SubtitleContentProperty::FADE_IN ||
+               property == SubtitleContentProperty::FADE_OUT
                ) {
 
                /* These changes just need the pieces' decoders to be reset.
@@ -337,7 +341,7 @@ Player::get_video (DCPTime time, bool accurate)
 
        /* Text subtitles (rendered to an image) */
        if (!ps.text.empty ()) {
-               list<PositionImage> s = render_subtitles (ps.text, ps.fonts, _video_container_size);
+               list<PositionImage> s = render_subtitles (ps.text, ps.fonts, _video_container_size, time);
                copy (s.begin (), s.end (), back_inserter (sub_images));
        }
 
@@ -590,7 +594,7 @@ Player::get_subtitles (DCPTime time, DCPTime length, bool starting, bool burnt,
 {
        list<shared_ptr<Piece> > subs = overlaps (time, time + length, has_subtitle);
 
-       PlayerSubtitles ps (time, length);
+       PlayerSubtitles ps (time);
 
        for (list<shared_ptr<Piece> >::const_iterator j = subs.begin(); j != subs.end(); ++j) {
                if (!(*j)->content->subtitle->use () || (!_always_burn_subtitles && (burnt != (*j)->content->subtitle->burn ()))) {
@@ -648,7 +652,7 @@ Player::get_subtitles (DCPTime time, DCPTime length, bool starting, bool burnt,
                                }
                                s.set_in (dcp::Time(content_subtitle_to_dcp (*j, ts.period().from).seconds(), 1000));
                                s.set_out (dcp::Time(content_subtitle_to_dcp (*j, ts.period().to).seconds(), 1000));
-                               ps.text.push_back (s);
+                               ps.text.push_back (SubtitleString (s, (*j)->content->subtitle->outline_width()));
                                ps.add_fonts ((*j)->content->subtitle->fonts ());
                        }
                }
@@ -736,32 +740,41 @@ Player::get_reel_assets ()
 
                int64_t offset = 0;
                BOOST_FOREACH (shared_ptr<dcp::Reel> k, decoder->reels()) {
+
+                       DCPOMATIC_ASSERT (j->video_frame_rate ());
+                       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 ()) {
+                               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 ()) {
+                               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 ());
+                               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)))
                                        );
                        }