X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fplaylist.cc;h=1bb0ad0d6cda449354ed0eae1da435d59e649131;hb=1fe6bd7f8ba059322b8357b2210f0fd590567ce2;hp=09b67e921bf42e2820937212fd1cfae32a3bdef7;hpb=6f27d1dde8fe133e1a589c36d5bffc105437fb77;p=dcpomatic.git diff --git a/src/lib/playlist.cc b/src/lib/playlist.cc index 09b67e921..1bb0ad0d6 100644 --- a/src/lib/playlist.cc +++ b/src/lib/playlist.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2013-2016 Carl Hetherington + Copyright (C) 2013-2018 Carl Hetherington This file is part of DCP-o-matic. @@ -20,10 +20,11 @@ #include "playlist.h" #include "video_content.h" -#include "subtitle_content.h" +#include "text_content.h" #include "ffmpeg_decoder.h" #include "ffmpeg_content.h" #include "image_decoder.h" +#include "audio_content.h" #include "content_factory.h" #include "dcp_content.h" #include "job.h" @@ -63,10 +64,27 @@ Playlist::~Playlist () reconnect (); } +void +Playlist::content_may_change () +{ + ContentMayChange (); +} + +void +Playlist::content_not_changed () +{ + ContentNotChanged (); +} + void Playlist::content_changed (weak_ptr content, int property, bool frequent) { - if (property == ContentProperty::LENGTH || property == VideoContentProperty::FRAME_TYPE) { + if ( + property == ContentProperty::TRIM_START || + property == ContentProperty::TRIM_END || + property == ContentProperty::LENGTH || + property == VideoContentProperty::FRAME_TYPE + ) { /* Don't respond to position changes here, as: - sequencing after earlier/later changes is handled by move_earlier/move_later - any other position changes will be timeline drags which should not result in content @@ -125,11 +143,11 @@ Playlist::maybe_sequence () placed.push_back (i); } - /* Subtitles */ + /* Captions */ DCPTime next; BOOST_FOREACH (shared_ptr i, _content) { - if (!i->subtitle || find (placed.begin(), placed.end(), i) != placed.end()) { + if (i->text.empty() || find (placed.begin(), placed.end(), i) != placed.end()) { continue; } @@ -149,7 +167,13 @@ Playlist::video_identifier () const string t; BOOST_FOREACH (shared_ptr i, _content) { - if (i->video || (i->subtitle && i->subtitle->burn())) { + bool burn = false; + BOOST_FOREACH (shared_ptr j, i->text) { + if (j->burn()) { + burn = true; + } + } + if (i->video || burn) { t += i->identifier (); } } @@ -338,7 +362,9 @@ Playlist::reconnect () _content_connections.clear (); BOOST_FOREACH (shared_ptr i, _content) { - _content_connections.push_back (i->Changed.connect (bind (&Playlist::content_changed, this, _1, _2, _3))); + _content_connections.push_back (i->MayChange.connect(boost::bind(&Playlist::content_may_change, this))); + _content_connections.push_back (i->Changed.connect(boost::bind(&Playlist::content_changed, this, _1, _2, _3))); + _content_connections.push_back (i->NotChanged.connect(boost::bind(&Playlist::content_not_changed, this))); } } @@ -356,11 +382,11 @@ Playlist::video_end () const } DCPTime -Playlist::subtitle_end () const +Playlist::text_end () const { DCPTime end; BOOST_FOREACH (shared_ptr i, _content) { - if (i->subtitle) { + if (!i->text.empty ()) { end = max (end, i->end ()); } } @@ -543,18 +569,6 @@ Playlist::content_summary (DCPTimePeriod period) const return best_summary; } -bool -Playlist::video_content_at (DCPTime time) const -{ - BOOST_FOREACH (shared_ptr i, _content) { - if (i->video && i->position() <= time && time < i->end()) { - return true; - } - } - - return false; -} - pair Playlist::speed_up_range (int dcp_video_frame_rate) const {