void playlist_changed ();
void playlist_content_changed (boost::weak_ptr<Content>, int, bool);
std::list<PositionImage> transform_image_subtitles (std::list<ImageSubtitle>) const;
void playlist_changed ();
void playlist_content_changed (boost::weak_ptr<Content>, int, bool);
std::list<PositionImage> transform_image_subtitles (std::list<ImageSubtitle>) const;
Frame dcp_to_content_video (boost::shared_ptr<const Piece> piece, DCPTime t) const;
DCPTime content_video_to_dcp (boost::shared_ptr<const Piece> piece, Frame f) const;
Frame dcp_to_resampled_audio (boost::shared_ptr<const Piece> piece, DCPTime t) const;
DCPTime resampled_audio_to_dcp (boost::shared_ptr<const Piece> piece, Frame f) const;
ContentTime dcp_to_content_time (boost::shared_ptr<const Piece> piece, DCPTime t) const;
DCPTime content_time_to_dcp (boost::shared_ptr<const Piece> piece, ContentTime t) const;
Frame dcp_to_content_video (boost::shared_ptr<const Piece> piece, DCPTime t) const;
DCPTime content_video_to_dcp (boost::shared_ptr<const Piece> piece, Frame f) const;
Frame dcp_to_resampled_audio (boost::shared_ptr<const Piece> piece, DCPTime t) const;
DCPTime resampled_audio_to_dcp (boost::shared_ptr<const Piece> piece, Frame f) const;
ContentTime dcp_to_content_time (boost::shared_ptr<const Piece> piece, DCPTime t) const;
DCPTime content_time_to_dcp (boost::shared_ptr<const Piece> piece, ContentTime t) const;
std::list<boost::shared_ptr<Piece> > overlaps (DCPTime from, DCPTime to, boost::function<bool (Content *)> valid);
void video (boost::weak_ptr<Piece>, ContentVideo);
void audio (boost::weak_ptr<Piece>, AudioStreamPtr, ContentAudio);
void image_subtitle (boost::weak_ptr<Piece>, ContentImageSubtitle);
void text_subtitle (boost::weak_ptr<Piece>, ContentTextSubtitle);
std::list<boost::shared_ptr<Piece> > overlaps (DCPTime from, DCPTime to, boost::function<bool (Content *)> valid);
void video (boost::weak_ptr<Piece>, ContentVideo);
void audio (boost::weak_ptr<Piece>, AudioStreamPtr, ContentAudio);
void image_subtitle (boost::weak_ptr<Piece>, ContentImageSubtitle);
void text_subtitle (boost::weak_ptr<Piece>, ContentTextSubtitle);
+ boost::shared_ptr<Resampler> resampler (boost::shared_ptr<const AudioContent> content, AudioStreamPtr stream, bool create);
+ DCPTime one_video_frame () const;
+ void fill_video (DCPTimePeriod period);
+ void fill_audio (DCPTimePeriod period);
+ void audio_flush (boost::shared_ptr<Piece>, AudioStreamPtr stream);
+ void audio_transform (boost::shared_ptr<AudioContent> content, AudioStreamPtr stream, ContentAudio content_audio, DCPTime time);
- DCPTime _last_audio_time;
+ boost::optional<DCPTime> _last_audio_time;
+
+ class StreamState {
+ public:
+ StreamState () {}
+
+ StreamState (boost::shared_ptr<Piece> p, DCPTime l)
+ : piece(p)
+ , last_push_end(l)
+ {}
+
+ boost::shared_ptr<Piece> piece;
+ DCPTime last_push_end;
+ };
+ std::map<AudioStreamPtr, StreamState> _stream_states;
+
+ std::list<DCPTimePeriod> _no_video;
+ std::list<DCPTimePeriod> _no_audio;
+
+ std::list<std::pair<PlayerSubtitles, DCPTimePeriod> > _subtitles;
boost::signals2::scoped_connection _film_changed_connection;
boost::signals2::scoped_connection _playlist_changed_connection;
boost::signals2::scoped_connection _film_changed_connection;
boost::signals2::scoped_connection _playlist_changed_connection;