Try to fix missing icons in OS X .dmg.
[dcpomatic.git] / src / lib / player.cc
index 56145f5bdec1f7a6fa7cd218702d8f211d98907b..d05597dd556540f50839f35fd57510fee75e7243 100644 (file)
@@ -62,6 +62,8 @@ public:
                , decoder (d)
                , video_position (c->position ())
                , audio_position (c->position ())
+               , repeat_to_do (0)
+               , repeat_done (0)
        {}
 
        /** Set this piece to repeat a video frame a given number of times */
@@ -124,7 +126,7 @@ Player::Player (shared_ptr<const Film> f, shared_ptr<const Playlist> p)
        _playlist_changed_connection = _playlist->Changed.connect (bind (&Player::playlist_changed, this));
        _playlist_content_changed_connection = _playlist->ContentChanged.connect (bind (&Player::content_changed, this, _1, _2, _3));
        _film_changed_connection = _film->Changed.connect (bind (&Player::film_changed, this, _1));
-       set_video_container_size (fit_ratio_within (_film->container()->ratio (), _film->full_frame ()));
+       set_video_container_size (_film->frame_size ());
 }
 
 void
@@ -224,7 +226,8 @@ Player::pass ()
                                continue;
                        }
 
-                       if (dynamic_pointer_cast<AudioDecoder> ((*i)->decoder)) {
+                       shared_ptr<AudioDecoder> ad = dynamic_pointer_cast<AudioDecoder> ((*i)->decoder);
+                       if (ad && ad->has_audio ()) {
                                audio_done_up_to = min (audio_done_up_to.get_value_or (TIME_MAX), (*i)->audio_position);
                        }
                }
@@ -270,8 +273,7 @@ Player::process_video (weak_ptr<Piece> weak_piece, shared_ptr<const Image> image
        }
 
        Time const time = content->position() + relative_time + extra - content->trim_start ();
-       float const ratio = content->ratio() ? content->ratio()->ratio() : content->video_size_after_crop().ratio();
-       libdcp::Size const image_size = fit_ratio_within (ratio, _video_container_size);
+       libdcp::Size const image_size = content->scale().size (content, _video_container_size, _film->frame_size ());
 
        shared_ptr<PlayerImage> pi (
                new PlayerImage (
@@ -453,6 +455,10 @@ Player::setup_pieces ()
 
        for (ContentList::iterator i = content.begin(); i != content.end(); ++i) {
 
+               if (!(*i)->paths_valid ()) {
+                       continue;
+               }
+
                shared_ptr<Piece> piece (new Piece (*i));
 
                /* XXX: into content? */
@@ -520,13 +526,17 @@ Player::content_changed (weak_ptr<Content> w, int property, bool frequent)
                _have_valid_pieces = false;
                Changed (frequent);
 
-       } else if (property == SubtitleContentProperty::SUBTITLE_OFFSET || property == SubtitleContentProperty::SUBTITLE_SCALE) {
+       } else if (
+               property == SubtitleContentProperty::SUBTITLE_X_OFFSET ||
+               property == SubtitleContentProperty::SUBTITLE_Y_OFFSET ||
+               property == SubtitleContentProperty::SUBTITLE_SCALE
+               ) {
 
                update_subtitle ();
                Changed (frequent);
 
        } else if (
-               property == VideoContentProperty::VIDEO_CROP || property == VideoContentProperty::VIDEO_RATIO ||
+               property == VideoContentProperty::VIDEO_CROP || property == VideoContentProperty::VIDEO_SCALE ||
                property == VideoContentProperty::VIDEO_FRAME_RATE
                ) {
                
@@ -534,6 +544,7 @@ Player::content_changed (weak_ptr<Content> w, int property, bool frequent)
 
        } else if (property == ContentProperty::PATH) {
 
+               _have_valid_pieces = false;
                Changed (frequent);
        }
 }
@@ -657,7 +668,8 @@ Player::update_subtitle ()
        dcpomatic::Rect<double> in_rect = _in_subtitle.rect;
        libdcp::Size scaled_size;
 
-       in_rect.y += sc->subtitle_offset ();
+       in_rect.x += sc->subtitle_x_offset ();
+       in_rect.y += sc->subtitle_y_offset ();
 
        /* We will scale the subtitle up to fit _video_container_size, and also by the additional subtitle_scale */
        scaled_size.width = in_rect.width * _video_container_size.width * sc->subtitle_scale ();
@@ -694,7 +706,7 @@ Player::update_subtitle ()
                to = rint (to * vc->video_frame_rate() / _film->video_frame_rate());
        }
        
-       _out_subtitle.from = from * piece->content->position ();
+       _out_subtitle.from = from + piece->content->position ();
        _out_subtitle.to = to + piece->content->position ();
 }