Basics of DCP import.
[dcpomatic.git] / src / lib / player.cc
index ccc1ab2367e3e0fed2832790c4d97ccc9b9ce2db..9f9f8db2e3374b369f7c206e480310b9d278dd01 100644 (file)
@@ -43,6 +43,8 @@
 #include "content_video.h"
 #include "player_video.h"
 #include "frame_rate_change.h"
+#include "dcp_content.h"
+#include "dcp_decoder.h"
 
 #define LOG_GENERAL(...) _film->log()->log (String::compose (__VA_ARGS__), Log::TYPE_GENERAL);
 
@@ -120,6 +122,12 @@ Player::setup_pieces ()
                        frc = FrameRateChange (fc->video_frame_rate(), _film->video_frame_rate());
                }
 
+               shared_ptr<const DCPContent> dc = dynamic_pointer_cast<const DCPContent> (*i);
+               if (dc) {
+                       decoder.reset (new DCPDecoder (dc, _film->log ()));
+                       frc = FrameRateChange (dc->video_frame_rate(), _film->video_frame_rate());
+               }
+
                /* ImageContent */
                shared_ptr<const ImageContent> ic = dynamic_pointer_cast<const ImageContent> (*i);
                if (ic) {
@@ -350,7 +358,7 @@ Player::get_video (DCPTime time, bool accurate)
 
        /* Add subtitles (for possible burn-in) to whatever PlayerVideos we got */
 
-       PlayerSubtitles ps = get_subtitles (time, DCPTime::from_frames (1, _film->video_frame_rate ()));
+       PlayerSubtitles ps = get_subtitles (time, DCPTime::from_frames (1, _film->video_frame_rate ()), false);
 
        list<PositionImage> sub_images;
 
@@ -514,7 +522,7 @@ Player::statistics () const
 }
 
 PlayerSubtitles
-Player::get_subtitles (DCPTime time, DCPTime length)
+Player::get_subtitles (DCPTime time, DCPTime length, bool starting)
 {
        list<shared_ptr<Piece> > subs = overlaps<SubtitleContent> (time, time + length);
 
@@ -531,7 +539,7 @@ Player::get_subtitles (DCPTime time, DCPTime length)
                /* XXX: this video_frame_rate() should be the rate that the subtitle content has been prepared for */
                ContentTime const to = from + ContentTime::from_frames (1, _film->video_frame_rate ());
 
-               list<ContentImageSubtitle> image = subtitle_decoder->get_image_subtitles (ContentTimePeriod (from, to));
+               list<ContentImageSubtitle> image = subtitle_decoder->get_image_subtitles (ContentTimePeriod (from, to), starting);
                for (list<ContentImageSubtitle>::iterator i = image.begin(); i != image.end(); ++i) {
                        
                        /* Apply content's subtitle offsets */
@@ -549,7 +557,7 @@ Player::get_subtitles (DCPTime time, DCPTime length)
                        ps.image.push_back (i->sub);
                }
 
-               list<ContentTextSubtitle> text = subtitle_decoder->get_text_subtitles (ContentTimePeriod (from, to));
+               list<ContentTextSubtitle> text = subtitle_decoder->get_text_subtitles (ContentTimePeriod (from, to), starting);
                for (list<ContentTextSubtitle>::const_iterator i = text.begin(); i != text.end(); ++i) {
                        copy (i->subs.begin(), i->subs.end(), back_inserter (ps.text));
                }